import React, { PropTypes } from "react" import oauth2Authorize from "core/oauth2-authorize" const IMPLICIT = "implicit" const ACCESS_CODE = "accessCode" const PASSWORD = "password" const APPLICATION = "application" export default class Oauth2 extends React.Component { static propTypes = { name: PropTypes.string, authorized: PropTypes.object, getComponent: PropTypes.func.isRequired, schema: PropTypes.object.isRequired, authSelectors: PropTypes.object.isRequired, authActions: PropTypes.object.isRequired, errSelectors: PropTypes.object.isRequired, errActions: PropTypes.object.isRequired, getConfigs: PropTypes.any } constructor(props, context) { super(props, context) let { name, schema, authorized, authSelectors } = this.props let auth = authorized && authorized.get(name) let authConfigs = authSelectors.getConfigs() || {} let username = auth && auth.get("username") || "" let clientId = auth && auth.get("clientId") || authConfigs.clientId || "" let clientSecret = auth && auth.get("clientSecret") || authConfigs.clientSecret || "" let passwordType = auth && auth.get("passwordType") || "basic" this.state = { appName: authConfigs.appName, name: name, schema: schema, scopes: [], clientId: clientId, clientSecret: clientSecret, username: username, password: "", passwordType: passwordType } } authorize =() => { let { authActions, errActions, getConfigs, authSelectors } = this.props let configs = getConfigs() let authConfigs = authSelectors.getConfigs() errActions.clear({authId: name,type: "auth", source: "auth"}) oauth2Authorize({auth: this.state, authActions, errActions, configs, authConfigs }) } onScopeChange =(e) => { let { target } = e let { checked } = target let scope = target.dataset.value if ( checked && this.state.scopes.indexOf(scope) === -1 ) { let newScopes = this.state.scopes.concat([scope]) this.setState({ scopes: newScopes }) } else if ( !checked && this.state.scopes.indexOf(scope) > -1) { this.setState({ scopes: this.state.scopes.filter((val) => val !== scope) }) } } onInputChange =(e) => { let { target : { dataset : { name }, value } } = e let state = { [name]: value } this.setState(state) } logout =(e) => { e.preventDefault() let { authActions, errActions, name } = this.props errActions.clear({authId: name, type: "auth", source: "auth"}) authActions.logout([ name ]) } render() { let { schema, getComponent, authSelectors, errSelectors, name } = this.props const Input = getComponent("Input") const Row = getComponent("Row") const Col = getComponent("Col") const Button = getComponent("Button") const AuthError = getComponent("authError") const JumpToPath = getComponent("JumpToPath", true) const Markdown = getComponent( "Markdown" ) let flow = schema.get("flow") let scopes = schema.get("allowedScopes") || schema.get("scopes") let authorizedAuth = authSelectors.authorized().get(name) let isAuthorized = !!authorizedAuth let errors = errSelectors.allErrors().filter( err => err.get("authId") === name) let isValid = !errors.filter( err => err.get("source") === "validation").size let description = schema.get("description") return (

OAuth2.0

{ !this.state.appName ? null :
Application: { this.state.appName }
} { description && } { isAuthorized &&
Authorized
} { ( flow === IMPLICIT || flow === ACCESS_CODE ) &&

Authorization URL: { schema.get("authorizationUrl") }

} { ( flow === PASSWORD || flow === ACCESS_CODE || flow === APPLICATION ) &&

Token URL: { schema.get("tokenUrl") }

}

Flow: { schema.get("flow") }

{ flow !== PASSWORD ? null : { isAuthorized ? { this.state.username } : } { } { isAuthorized ? ****** : } { isAuthorized ? { this.state.passwordType } : } } { ( flow === APPLICATION || flow === IMPLICIT || flow === ACCESS_CODE || ( flow === PASSWORD && this.state.passwordType!== "basic") ) && ( !isAuthorized || isAuthorized && this.state.clientId) && { isAuthorized ? ****** : } } { ( flow === APPLICATION || flow === ACCESS_CODE || ( flow === PASSWORD && this.state.passwordType!== "basic") ) && { isAuthorized ? ****** : } } { !isAuthorized && scopes && scopes.size ?

Scopes:

{ scopes.map((description, name) => { return (
) }).toArray() }
: null } { errors.valueSeq().map( (error, key) => { return } ) }
{ isValid && ( isAuthorized ? : ) }
) } }