|
@ -1,12 +1,9 @@ |
|
|
<!doctype html> |
|
|
|
|
|
|
|
|
<!DOCTYPE html> |
|
|
<html> |
|
|
<html> |
|
|
<head> |
|
|
<head> |
|
|
<title>Example of the Authorization Code flow with Spotify</title> |
|
|
|
|
|
|
|
|
<title>User Login</title> |
|
|
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"> |
|
|
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"> |
|
|
<style type="text/css"> |
|
|
<style type="text/css"> |
|
|
#login, #loggedin { |
|
|
|
|
|
display: none; |
|
|
|
|
|
} |
|
|
|
|
|
.text-overflow { |
|
|
.text-overflow { |
|
|
overflow: hidden; |
|
|
overflow: hidden; |
|
|
text-overflow: ellipsis; |
|
|
text-overflow: ellipsis; |
|
@ -22,111 +19,6 @@ |
|
|
<h1>This is an example of the Authorization Code flow</h1> |
|
|
<h1>This is an example of the Authorization Code flow</h1> |
|
|
<a href="/login" class="btn btn-primary">Log in with Spotify</a> |
|
|
<a href="/login" class="btn btn-primary">Log in with Spotify</a> |
|
|
</div> |
|
|
</div> |
|
|
<div id="loggedin"> |
|
|
|
|
|
<div id="user-profile"> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div id="oauth"> |
|
|
|
|
|
</div> |
|
|
|
|
|
<button class="btn btn-default" id="obtain-new-token">Obtain new token using the refresh token</button> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<script id="user-profile-template" type="text/x-handlebars-template"> |
|
|
|
|
|
<h1>Logged in as {{display_name}}</h1> |
|
|
|
|
|
<div class="media"> |
|
|
|
|
|
<div class="pull-left"> |
|
|
|
|
|
<img class="media-object" width="150" src="{{images.0.url}}" /> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="media-body"> |
|
|
|
|
|
<dl class="dl-horizontal"> |
|
|
|
|
|
<dt>Display name</dt><dd class="clearfix">{{display_name}}</dd> |
|
|
|
|
|
<dt>Id</dt><dd>{{id}}</dd> |
|
|
|
|
|
<dt>Email</dt><dd>{{email}}</dd> |
|
|
|
|
|
<dt>Spotify URI</dt><dd><a href="{{external_urls.spotify}}">{{external_urls.spotify}}</a></dd> |
|
|
|
|
|
<dt>Link</dt><dd><a href="{{href}}">{{href}}</a></dd> |
|
|
|
|
|
<dt>Profile Image</dt><dd class="clearfix"><a href="{{images.0.url}}">{{images.0.url}}</a></dd> |
|
|
|
|
|
<dt>Country</dt><dd>{{country}}</dd> |
|
|
|
|
|
</dl> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
<script id="oauth-template" type="text/x-handlebars-template"> |
|
|
|
|
|
<h2>oAuth info</h2> |
|
|
|
|
|
<dl class="dl-horizontal"> |
|
|
|
|
|
<dt>Access token</dt><dd class="text-overflow">{{access_token}}</dd> |
|
|
|
|
|
<dt>Refresh token</dt><dd class="text-overflow">{{refresh_token}}</dd> |
|
|
|
|
|
</dl> |
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0-alpha.1/handlebars.min.js"></script> |
|
|
|
|
|
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> |
|
|
|
|
|
<script> |
|
|
|
|
|
(function() { |
|
|
|
|
|
/** |
|
|
|
|
|
* Obtains parameters from the hash of the URL |
|
|
|
|
|
* @return Object |
|
|
|
|
|
*/ |
|
|
|
|
|
function getHashParams() { |
|
|
|
|
|
var hashParams = {}; |
|
|
|
|
|
var e, r = /([^&;=]+)=?([^&;]*)/g, |
|
|
|
|
|
q = window.location.hash.substring(1); |
|
|
|
|
|
while ( e = r.exec(q)) { |
|
|
|
|
|
hashParams[e[1]] = decodeURIComponent(e[2]); |
|
|
|
|
|
} |
|
|
|
|
|
return hashParams; |
|
|
|
|
|
} |
|
|
|
|
|
var userProfileSource = document.getElementById('user-profile-template').innerHTML, |
|
|
|
|
|
userProfileTemplate = Handlebars.compile(userProfileSource), |
|
|
|
|
|
userProfilePlaceholder = document.getElementById('user-profile'); |
|
|
|
|
|
var oauthSource = document.getElementById('oauth-template').innerHTML, |
|
|
|
|
|
oauthTemplate = Handlebars.compile(oauthSource), |
|
|
|
|
|
oauthPlaceholder = document.getElementById('oauth'); |
|
|
|
|
|
var params = getHashParams(); |
|
|
|
|
|
var access_token = params.access_token, |
|
|
|
|
|
refresh_token = params.refresh_token, |
|
|
|
|
|
error = params.error; |
|
|
|
|
|
if (error) { |
|
|
|
|
|
alert('There was an error during the authentication'); |
|
|
|
|
|
} else { |
|
|
|
|
|
if (access_token) { |
|
|
|
|
|
// render oauth info |
|
|
|
|
|
oauthPlaceholder.innerHTML = oauthTemplate({ |
|
|
|
|
|
access_token: access_token, |
|
|
|
|
|
refresh_token: refresh_token |
|
|
|
|
|
}); |
|
|
|
|
|
$.ajax({ |
|
|
|
|
|
url: 'https://api.spotify.com/v1/me', |
|
|
|
|
|
headers: { |
|
|
|
|
|
'Authorization': 'Bearer ' + access_token |
|
|
|
|
|
}, |
|
|
|
|
|
success: function(response) { |
|
|
|
|
|
userProfilePlaceholder.innerHTML = userProfileTemplate(response); |
|
|
|
|
|
$('#login').hide(); |
|
|
|
|
|
$('#loggedin').show(); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
} else { |
|
|
|
|
|
// render initial screen |
|
|
|
|
|
$('#login').show(); |
|
|
|
|
|
$('#loggedin').hide(); |
|
|
|
|
|
} |
|
|
|
|
|
document.getElementById('obtain-new-token').addEventListener('click', function() { |
|
|
|
|
|
$.ajax({ |
|
|
|
|
|
url: '/refresh_token', |
|
|
|
|
|
data: { |
|
|
|
|
|
'refresh_token': refresh_token |
|
|
|
|
|
} |
|
|
|
|
|
}).done(function(data) { |
|
|
|
|
|
access_token = data.access_token; |
|
|
|
|
|
oauthPlaceholder.innerHTML = oauthTemplate({ |
|
|
|
|
|
access_token: access_token, |
|
|
|
|
|
refresh_token: refresh_token |
|
|
|
|
|
}); |
|
|
|
|
|
}); |
|
|
|
|
|
}, false); |
|
|
|
|
|
} |
|
|
|
|
|
})(); |
|
|
|
|
|
</script> |
|
|
|
|
|
</body> |
|
|
</body> |
|
|
</html> |
|
|
</html> |