mirror of
https://github.com/librespot-org/librespot.git
synced 2024-12-18 17:11:53 +00:00
Remove support for Facebook authentication.
This commit is contained in:
parent
7ba3d766c0
commit
e254bb7291
11 changed files with 4 additions and 295 deletions
71
Cargo.lock
generated
71
Cargo.lock
generated
|
@ -10,7 +10,6 @@ dependencies = [
|
|||
"eventual 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hyper 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hyper-rustls 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"json_macros 0.3.1 (git+https://github.com/plietar/json_macros)",
|
||||
"lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libpulse-sys 0.0.0 (git+https://github.com/astro/libpulse-sys)",
|
||||
|
@ -27,7 +26,6 @@ dependencies = [
|
|||
"rpassword 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustls 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_codegen 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_json 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -80,11 +78,6 @@ dependencies = [
|
|||
"syntex_syntax 0.52.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "bit-set"
|
||||
version = "0.4.0"
|
||||
|
@ -232,16 +225,6 @@ dependencies = [
|
|||
"url 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-rustls"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"hyper 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustls 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webpki-roots 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "0.1.0"
|
||||
|
@ -648,15 +631,6 @@ name = "regex-syntax"
|
|||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "ring"
|
||||
version = "0.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"untrusted 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rpassword"
|
||||
version = "0.3.0"
|
||||
|
@ -693,19 +667,6 @@ dependencies = [
|
|||
"semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"base64 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ring 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"untrusted 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webpki 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "scoped-tls"
|
||||
version = "0.1.0"
|
||||
|
@ -1064,11 +1025,6 @@ name = "unicode-xid"
|
|||
version = "0.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "untrusted"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "url"
|
||||
version = "0.5.10"
|
||||
|
@ -1165,26 +1121,6 @@ dependencies = [
|
|||
"vorbis-sys 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webpki"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"ring 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"untrusted 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webpki-roots"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"untrusted 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webpki 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.2.8"
|
||||
|
@ -1210,7 +1146,6 @@ dependencies = [
|
|||
"checksum aster 0.27.0 (registry+https://github.com/rust-lang/crates.io-index)" = "258989846dd255a1e0eeef92d425d345477c9999433cecc9f0879f4549d5e5c9"
|
||||
"checksum aster 0.34.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88bb8ecdf6a7eaddb7bfd872ebf5e085d343ca42ce98c582dba8046e3450b524"
|
||||
"checksum aster 0.36.0 (registry+https://github.com/rust-lang/crates.io-index)" = "365684a2d8153bde2ca60826e54c8d3df76e06578ed868f8baaf91ae811af07b"
|
||||
"checksum base64 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2015e3793554aa5b6007e3a72959e84c1070039e74f13dde08fa64afe1ddd892"
|
||||
"checksum bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9bf6104718e80d7b26a68fdbacff3481cfc05df670821affc7e9cbc1884400c"
|
||||
"checksum bit-vec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5b97c2c8e8bbb4251754f559df8af22fb264853c7d009084a576cdf12565089d"
|
||||
"checksum bitflags 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "32866f4d103c4e438b1db1158aa1b1a80ee078e5d77a59a2f906fd62a577389c"
|
||||
|
@ -1231,7 +1166,6 @@ dependencies = [
|
|||
"checksum hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d2da7d3a34cf6406d9d700111b8eafafe9a251de41ae71d8052748259343b58"
|
||||
"checksum httparse 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a6e7a63e511f9edffbab707141fbb8707d1a3098615fb2adbd5769cdfcc9b17d"
|
||||
"checksum hyper 0.9.14 (registry+https://github.com/rust-lang/crates.io-index)" = "bcb3fc65554155980167fb821d05c7c66177f92464976c0b676a19d9e03387a7"
|
||||
"checksum hyper-rustls 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aaa757ec75ba51b7dfeef94696ceb6b8b44be7775a524e1d7b64102481a7e43e"
|
||||
"checksum idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1053236e00ce4f668aeca4a769a09b3bf5a682d802abd6f3cb39374f6b162c11"
|
||||
"checksum itoa 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae3088ea4baeceb0284ee9eea42f591226e6beaecf65373e41b38d95a1b8e7a1"
|
||||
"checksum json_macros 0.3.1 (git+https://github.com/plietar/json_macros)" = "<none>"
|
||||
|
@ -1278,12 +1212,10 @@ dependencies = [
|
|||
"checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d"
|
||||
"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
|
||||
"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
|
||||
"checksum ring 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5b7609de2b0dbc70eb7b27a1c2508aff1af9be7c05265ce19d98631b91281ee4"
|
||||
"checksum rpassword 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ab6e42be826e215f30ff830904f8f4a0933c6e2ae890e1af8b408f5bae60081e"
|
||||
"checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a"
|
||||
"checksum rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "237546c689f20bb44980270c73c3b9edd0891c1be49cc1274406134a66d3957b"
|
||||
"checksum rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c5f5376ea5e30ce23c03eb77cbe4962b988deead10910c372b226388b594c084"
|
||||
"checksum rustls 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "340c03bcbc24e09a1fb49027a480c5dd2950edc2746e324ec684917ab84b56a0"
|
||||
"checksum scoped-tls 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f417c22df063e9450888a7561788e9bd46d3bb3c1466435b4eccb903807f147d"
|
||||
"checksum semver 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac"
|
||||
"checksum serde 0.8.21 (registry+https://github.com/rust-lang/crates.io-index)" = "7b7c6bf11cf766473ea1d53eb4e3bc4e80f31f50082fc24077cf06f600279a66"
|
||||
|
@ -1323,7 +1255,6 @@ dependencies = [
|
|||
"checksum unicode-bidi 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b61814f3e7fd0e0f15370f767c7c943e08bc2e3214233ae8f88522b334ceb778"
|
||||
"checksum unicode-normalization 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5e94e9f6961090fcc75180629c4ef33e5310d6ed2c0dd173f4ca63c9043b669e"
|
||||
"checksum unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "36dff09cafb4ec7c8cf0023eb0b686cb6ce65499116a12201c9e11840ca01beb"
|
||||
"checksum untrusted 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "193df64312e3515fd983ded55ad5bcaa7647a035804828ed757e832ce6029ef3"
|
||||
"checksum url 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4a3440c1ed62af4a2aee71c6fb78ef32ddcb75cfa24bf42f45e07c02b6d6a2f6"
|
||||
"checksum url 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f024e241a55f5c88401595adc1d4af0c9649e91da82d0e190fe55950231ae575"
|
||||
"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
|
||||
|
@ -1334,8 +1265,6 @@ dependencies = [
|
|||
"checksum vorbis-encoder 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3fb66bcdde056dd230991bb86669a1269778fe8ad1f6cee403428ac7985391bc"
|
||||
"checksum vorbis-sys 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "729e1f15395850b4e6d19ca0cd1d42ef44707503a53b69d40ff49182b3c5589d"
|
||||
"checksum vorbisfile-sys 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "4f4306d7e1ac4699b55e20de9483750b90c250913188efd7484db6bfbe9042d1"
|
||||
"checksum webpki 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9cf747b3007eb728e9b130d09540394b7e0a57444f5981f5f2d44c86ba22ce60"
|
||||
"checksum webpki-roots 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "73093f9095120f5d3b3ea923ff09e50c3d44bffb0bb27ecf85f3ff442ecdf826"
|
||||
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
|
||||
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
|
||||
"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
|
||||
|
|
|
@ -28,7 +28,6 @@ env_logger = "0.3.2"
|
|||
eventual = "0.1.6"
|
||||
getopts = "0.2.14"
|
||||
hyper = { version = "0.9.1", default-features = false }
|
||||
hyper-rustls = "0.2.1"
|
||||
lazy_static = "0.2.0"
|
||||
linear-map = "1.0"
|
||||
lmdb-rs = "0.7.2"
|
||||
|
@ -37,7 +36,6 @@ num = "0.1.30"
|
|||
protobuf = "1.0.15"
|
||||
rand = "0.3.13"
|
||||
rpassword = "0.3.0"
|
||||
rustls = "0.5.3"
|
||||
rust-crypto = "0.2.34"
|
||||
rustc-serialize = "0.3.16"
|
||||
serde = "0.8"
|
||||
|
|
|
@ -44,15 +44,6 @@ target/release/librespot --username USERNAME --cache CACHEDIR --name DEVICENAME
|
|||
*librespot* can be run in discovery mode, in which case no password is required at startup.
|
||||
For that, simply omit the `--username` argument.
|
||||
|
||||
## Facebook Accounts
|
||||
*librespot* can use Facebook for authentication.
|
||||
|
||||
```shell
|
||||
target/release/librespot --cache CACHEDIR --name DEVICENAME --facebook
|
||||
```
|
||||
|
||||
This will print a link to the console, which must be visited on the same computer *librespot* is running on.
|
||||
|
||||
## Audio Backends
|
||||
*librespot* supports various audio backends. Multiple backends can be enabled at compile time by enabling the
|
||||
corresponding cargo feature. By default, only PortAudio is enabled.
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
const APRESOLVE_ENDPOINT : &'static str = "https://apresolve.spotify.com/";
|
||||
const APRESOLVE_ENDPOINT : &'static str = "http://apresolve.spotify.com/";
|
||||
const AP_FALLBACK : &'static str = "ap.spotify.com:80";
|
||||
|
||||
use hyper;
|
||||
use hyper_rustls;
|
||||
use std::io::Read;
|
||||
use serde_json;
|
||||
use hyper::net::HttpsConnector;
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
pub struct APResolveData {
|
||||
|
@ -13,8 +11,7 @@ pub struct APResolveData {
|
|||
}
|
||||
|
||||
pub fn apresolve() -> String {
|
||||
let connector = HttpsConnector::new(hyper_rustls::TlsClient::new());
|
||||
let client = hyper::Client::with_connector(connector);
|
||||
let client = hyper::Client::new();
|
||||
|
||||
(|| {
|
||||
let mut response = client.get(APRESOLVE_ENDPOINT).send().map_err(|_| ())?;
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
use hyper;
|
||||
use hyper::header::AccessControlAllowOrigin;
|
||||
use hyper::net::HttpsConnector;
|
||||
use hyper::net::NetworkListener;
|
||||
use hyper::server::Request;
|
||||
use hyper::server::Response;
|
||||
use hyper::uri::RequestUri;
|
||||
use hyper_rustls;
|
||||
use rand::{self, Rng};
|
||||
use rustls;
|
||||
use serde_json;
|
||||
use std::collections::BTreeMap;
|
||||
use std::io::Read;
|
||||
use std::sync::{mpsc, Mutex};
|
||||
use url;
|
||||
|
||||
use protocol::authentication::AuthenticationType;
|
||||
use authentication::Credentials;
|
||||
use spotilocal::{SPOTILOCAL_CERT, SPOTILOCAL_KEY};
|
||||
|
||||
struct ServerHandler {
|
||||
token_tx: Mutex<mpsc::Sender<String>>,
|
||||
csrf: String,
|
||||
}
|
||||
|
||||
impl ServerHandler {
|
||||
fn handle_login(&self, params: &BTreeMap<String, String>) -> hyper::status::StatusCode {
|
||||
let token = params.get("access_token").unwrap();
|
||||
let csrf = params.get("csrf").unwrap();
|
||||
|
||||
if *csrf == self.csrf {
|
||||
self.token_tx.lock().unwrap().send(token.to_owned()).unwrap();
|
||||
hyper::status::StatusCode::Ok
|
||||
} else {
|
||||
hyper::status::StatusCode::Forbidden
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl hyper::server::Handler for ServerHandler {
|
||||
fn handle<'a, 'k>(&'a self, request: Request<'a, 'k>, mut response: Response<'a, hyper::net::Fresh>) {
|
||||
response.headers_mut().set(AccessControlAllowOrigin::Value("https://login.spotify.com".to_owned()));
|
||||
*response.status_mut() = if let RequestUri::AbsolutePath(path) = request.uri {
|
||||
let (path, query, _) = url::parse_path(&path).unwrap();
|
||||
let params = query.map_or(vec![], |q| url::form_urlencoded::parse(q.as_bytes()))
|
||||
.into_iter().collect::<BTreeMap<_,_>>();
|
||||
|
||||
debug!("{:?} {:?} {:?}", request.method, path, params);
|
||||
|
||||
if request.method == hyper::method::Method::Get && path == vec!["login", "facebook_login_sso.json"] {
|
||||
self.handle_login(¶ms)
|
||||
} else {
|
||||
hyper::status::StatusCode::NotFound
|
||||
}
|
||||
} else {
|
||||
hyper::status::StatusCode::NotFound
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn facebook_get_me_id(token: &str) -> Result<String, ()> {
|
||||
let url = format!("https://graph.facebook.com/me?fields=id&access_token={}", token);
|
||||
|
||||
let connector = HttpsConnector::new(hyper_rustls::TlsClient::new());
|
||||
let client = hyper::Client::with_connector(connector);
|
||||
|
||||
let mut response = client.get(&url).send().unwrap();
|
||||
let mut body = String::new();
|
||||
response.read_to_string(&mut body).unwrap();
|
||||
|
||||
let mut result : BTreeMap<String, String> = serde_json::from_str(&body).unwrap();
|
||||
Ok(result.remove("id").unwrap())
|
||||
}
|
||||
|
||||
pub fn facebook_login() -> Result<Credentials, ()> {
|
||||
let (tx, rx) = mpsc::channel();
|
||||
|
||||
let csrf = rand::thread_rng().gen_ascii_chars().take(32).collect::<String>();
|
||||
let handler = ServerHandler {
|
||||
token_tx: Mutex::new(tx),
|
||||
csrf: csrf.clone()
|
||||
};
|
||||
|
||||
let mut cert_data = SPOTILOCAL_CERT;
|
||||
let mut key_data = SPOTILOCAL_KEY;
|
||||
let certs = rustls::internal::pemfile::certs(&mut cert_data).unwrap();
|
||||
let key = rustls::internal::pemfile::rsa_private_keys(&mut key_data).unwrap().swap_remove(0);
|
||||
let tls = hyper_rustls::TlsServer::new(certs, key);
|
||||
|
||||
let mut listener = hyper::net::HttpsListener::new("127.0.0.1:0", tls).unwrap();
|
||||
let port = listener.local_addr().unwrap().port();
|
||||
|
||||
let mut server = hyper::Server::new(listener).handle(handler).unwrap();
|
||||
|
||||
println!("Logging in using Facebook, please visit https://login.spotify.com/login-facebook-sso/?csrf={}&port={} in your browser.",
|
||||
csrf, port);
|
||||
|
||||
let token = rx.recv().unwrap();
|
||||
let user_id = facebook_get_me_id(&token).unwrap();
|
||||
let cred = Credentials {
|
||||
username: user_id,
|
||||
auth_type: AuthenticationType::AUTHENTICATION_FACEBOOK_TOKEN,
|
||||
auth_data: token.as_bytes().to_owned(),
|
||||
};
|
||||
|
||||
server.close().unwrap();
|
||||
Ok(cred)
|
||||
}
|
|
@ -170,6 +170,3 @@ fn deserialize_base64<D>(de: &mut D) -> Result<Vec<u8>, D::Error>
|
|||
|
||||
mod discovery;
|
||||
pub use self::discovery::discovery_login;
|
||||
|
||||
mod facebook;
|
||||
pub use self::facebook::facebook_login;
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIGGzCCBQOgAwIBAgIQCMsbyFVsBNk7vWlJ7YFryjANBgkqhkiG9w0BAQsFADBN
|
||||
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
|
||||
aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTQxMTI4MDAwMDAwWhcN
|
||||
MTcxMjA2MTIwMDAwWjBlMQswCQYDVQQGEwJTRTESMBAGA1UECBMJU3RvY2tob2xt
|
||||
MRIwEAYDVQQHEwlTdG9ja2hvbG0xEzARBgNVBAoTClNwb3RpZnkgQUIxGTAXBgNV
|
||||
BAMMECouc3BvdGlsb2NhbC5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
|
||||
AoICAQDwccCju1/MY/lVM+2j0Hiu/M4u8jbR5ctk11U3i3ugYF4xwyqzbh8ziQq6
|
||||
9atIDg33OTEGGD1m2LkOursIRng6UUth1wqdRlRylHG2p4JYW22WEa730hnysSDn
|
||||
AHLfFawfHh40BPwLY7UD/0c0J8dUTu7Xx3fNHcJATQAHO7KlhTj+t+axUvFj+AxK
|
||||
0YyGZKmyS4GATtdDuI7uFp188iDI3zZgSI7A4svoDUvn3yGA2G7sgOG1va8aYVRW
|
||||
ftD5f2minppMy3UKt8XVGM+CuFMbQbLaTnQCW6t3fj/luscX4mlBC7pWj+swfoC2
|
||||
q5LvV3vErA8q6jPKDZElps8KRqeLvqkSheKI9Zh7+foijkAkC1kJGbJiX7BnFhM1
|
||||
EKKS6xda4tbewDVBseguO5b37Xqvh3vexSC42q/lxGbo7Md2LlgkORoeGYw7wzDH
|
||||
OoVvYmgktmwEccNu6BtjT0ql9OW3/+PPxxBXL/85crFWrMieNBf3eLeiT5ncv/mR
|
||||
JD+EB4QTTiUvZokEbG8/haGNrJVxDImBIqc4B9dUdikNkwr+cFgjdJezM8FBy7vd
|
||||
5suQHfeLYeqkc+pN097jw6qWdIA2ZPr/96IhIb1Pg0rIC+NqFte5+DB3QKCgUZJR
|
||||
1SUyT1BuNgU65kaM3rTx71UwQ46DMvWwL6BHja8ujPhjh/UiJwIDAQABo4IB3TCC
|
||||
AdkwHwYDVR0jBBgwFoAUD4BhHIIxYdUvKOeNRji0LOHG2eIwHQYDVR0OBBYEFFGI
|
||||
qQzKfuxgQuJad85y1CRs++4ZMCsGA1UdEQQkMCKCECouc3BvdGlsb2NhbC5jb22C
|
||||
DnNwb3RpbG9jYWwuY29tMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEF
|
||||
BQcDAQYIKwYBBQUHAwIwawYDVR0fBGQwYjAvoC2gK4YpaHR0cDovL2NybDMuZGln
|
||||
aWNlcnQuY29tL3NzY2Etc2hhMi1nMy5jcmwwL6AtoCuGKWh0dHA6Ly9jcmw0LmRp
|
||||
Z2ljZXJ0LmNvbS9zc2NhLXNoYTItZzMuY3JsMEIGA1UdIAQ7MDkwNwYJYIZIAYb9
|
||||
bAEBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMw
|
||||
fAYIKwYBBQUHAQEEcDBuMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy
|
||||
dC5jb20wRgYIKwYBBQUHMAKGOmh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9E
|
||||
aWdpQ2VydFNIQTJTZWN1cmVTZXJ2ZXJDQS5jcnQwDAYDVR0TAQH/BAIwADANBgkq
|
||||
hkiG9w0BAQsFAAOCAQEAr4W8l4mhi1nZUIeRFUyaeFSuKF3wwmMTprkE8y1gZyj2
|
||||
9dReUR/3SsiWsiZhfoZVNDAuDx+poue3YnSq1oNBZvbff2mOZQmVFbMTCiDrfY0e
|
||||
5qCZDNNqoo8d93BHGmAtJq2mnhBLnGTX6s3uiQHrcqs8iSzgXfSn7T6og9GA5vCt
|
||||
qlNykfuVtbMdfVdgI3u2i4TZ/5xmJyRLvzhM4AtdwwHecbJc57/LN3Buif+Al6py
|
||||
l54mNPfvtisl0O7Otz1Tj3aqTDLG8BrLbMRccbgRmfNwAd4bW9jtL0NnKcFDbKeY
|
||||
d3Docj7OIYK7IjWfb4LKts3jUq1ZM1o/eGyp/B4G+w==
|
||||
-----END CERTIFICATE-----
|
|
@ -1,51 +0,0 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----
|
|
@ -18,7 +18,6 @@ extern crate env_logger;
|
|||
extern crate eventual;
|
||||
extern crate getopts;
|
||||
extern crate hyper;
|
||||
extern crate hyper_rustls;
|
||||
extern crate linear_map;
|
||||
extern crate lmdb_rs;
|
||||
extern crate mdns;
|
||||
|
@ -27,7 +26,6 @@ extern crate protobuf;
|
|||
extern crate rand;
|
||||
extern crate rpassword;
|
||||
extern crate rustc_serialize;
|
||||
extern crate rustls;
|
||||
extern crate serde;
|
||||
extern crate serde_json;
|
||||
extern crate shannon;
|
||||
|
@ -61,7 +59,6 @@ pub mod link;
|
|||
pub mod main_helper;
|
||||
pub mod metadata;
|
||||
pub mod player;
|
||||
pub mod spotilocal;
|
||||
pub mod stream;
|
||||
pub mod util;
|
||||
pub mod version;
|
||||
|
|
|
@ -7,7 +7,7 @@ use std::path::PathBuf;
|
|||
use std::process::exit;
|
||||
|
||||
use audio_backend::{BACKENDS, Sink};
|
||||
use authentication::{Credentials, facebook_login, discovery_login};
|
||||
use authentication::{Credentials, discovery_login};
|
||||
use cache::{Cache, DefaultCache, NoCache};
|
||||
use player::Player;
|
||||
use session::{Bitrate, Config, Session};
|
||||
|
@ -47,8 +47,7 @@ pub fn add_session_arguments(opts: &mut getopts::Options) {
|
|||
|
||||
pub fn add_authentication_arguments(opts: &mut getopts::Options) {
|
||||
opts.optopt("u", "username", "Username to sign in with", "USERNAME")
|
||||
.optopt("p", "password", "Password", "PASSWORD")
|
||||
.optflag("", "facebook", "Login with a Facebook account");
|
||||
.optopt("p", "password", "Password", "PASSWORD");
|
||||
}
|
||||
|
||||
pub fn add_player_arguments(opts: &mut getopts::Options) {
|
||||
|
@ -113,9 +112,6 @@ pub fn get_credentials(session: &Session, matches: &getopts::Matches) -> Credent
|
|||
Credentials::with_password(username.clone(), password)
|
||||
}
|
||||
|
||||
(None, _, _) if matches.opt_present("facebook")
|
||||
=> facebook_login().unwrap(),
|
||||
|
||||
(None, _, Some(credentials))
|
||||
=> credentials,
|
||||
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
pub static SPOTILOCAL_CERT : &'static [u8] = include_bytes!("data/spotilocal.cert");
|
||||
pub static SPOTILOCAL_KEY : &'static [u8] = include_bytes!("data/spotilocal.key");
|
Loading…
Reference in a new issue