Browse Source

facebook: Use a random, OS-assigned port instead of hardcoded 8001.

Paul Lietar 8 years ago
parent
commit
a7559787df
2 changed files with 8 additions and 4 deletions
  1. 1 1
      docs/authentication.md
  2. 7 3
      src/facebook.rs

+ 1 - 1
docs/authentication.md

@@ -64,7 +64,7 @@ in their browser, where CSRF is a random token, and PORT is the HTTPS server's p
 This will redirect to Facebook, where the user must login and authorize Spotify, and
 finally make a GET request to
 `https://login.spotilocal.com:PORT/login/facebook_login_sso.json?csrf=CSRF&access_token=TOKEN`,
-where CSRF is the same string sent earlier, and TOKEN is the facebook authentication token.
+where PORT and CSRF are the same as sent earlier, and TOKEN is the facebook authentication token.
 
 Since `login.spotilocal.com` resolves the 127.0.0.1, the request is received by the client.
 

+ 7 - 3
src/facebook.rs

@@ -1,5 +1,6 @@
 use hyper;
 use hyper::net::Openssl;
+use hyper::net::NetworkListener;
 use hyper::server::Request;
 use hyper::server::Response;
 use hyper::uri::RequestUri;
@@ -93,12 +94,15 @@ pub fn facebook_login() -> Result<Credentials, ()> {
     };
 
     let ssl = spotilocal_ssl_context().unwrap();
-    let mut server = hyper::Server::https("127.0.0.1:8001", ssl).unwrap().handle(handler).unwrap();
+
+    let mut listener = hyper::net::HttpsListener::new("127.0.0.1:0", ssl).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, 8001);
+             csrf, port);
 
-    //a2c27234068bbe05d22c1b930b3bc2f5
     let token = rx.recv().unwrap();
     let user_id = facebook_get_me_id(&token).unwrap();
     let cred = Credentials {