Files
Iris/src/js/components/SpotifyAuthenticationFrame.js

89 lines
2.3 KiB
JavaScript
Raw Normal View History

import React, { PropTypes } from 'react'
import { connect } from 'react-redux'
import { createStore, bindActionCreators } from 'redux'
import FontAwesome from 'react-fontawesome'
import * as actions from '../services/spotify/actions'
class SpotifyAuthenticationFrame extends React.Component{
constructor(props) {
super(props);
}
componentDidMount(){
let self = this;
// listen for incoming messages from the authorization iframe
// this is triggered when authentication is granted from the popup
window.addEventListener('message', function(event){
// only allow incoming data from our authorized authenticator proxy
if( !/^https?:\/\/jamesbarnsley\.co\.nz/.test(event.origin) ) return false;
var data = JSON.parse(event.data);
2016-10-19 14:09:34 +13:00
self.props.actions.authorizationGranted( data );
}, false);
}
2016-10-19 14:09:34 +13:00
renderMe(){
if( this.props.spotify.me ){
if( this.props.spotify.me.display_name ){
return <span>Logged in as { this.props.spotify.me.display_name }</span>
}else{
return <span>Logged in as { this.props.spotify.me.id }</span>
}
}
return null;
}
renderAuthorizeButton(){
if( this.props.spotify.authorizing ){
return (
<span>
<FontAwesome name="circle-o-notch" spin />
<span>Authorizing...</span>
</span>
);
}else if( this.props.spotify.authorized ){
return (
2016-10-19 14:09:34 +13:00
<div>
<button onClick={() => this.props.actions.removeAuthorization()}>Log out</button>
{ this.renderMe() }
</div>
);
}else{
return (
<button onClick={() => this.props.actions.startAuthorization()}>Log in</button>
);
}
}
render(){
var src = '//jamesbarnsley.co.nz/spotmop.php?action=frame';
if( this.props.spotify.authorizing ){
src = '//jamesbarnsley.co.nz/spotmop.php?action=authorize&app='+location.protocol+'//'+window.location.host;
}
return (
<div>
{ this.renderAuthorizeButton() }
2016-10-17 14:27:48 +13:00
<iframe src={src} style={{ display: 'none' }}></iframe>
</div>
);
}
}
const mapStateToProps = (state, ownProps) => {
return state;
}
const mapDispatchToProps = (dispatch) => {
return {
actions: bindActionCreators(actions, dispatch)
}
}
export default connect(mapStateToProps, mapDispatchToProps)(SpotifyAuthenticationFrame)