Skip to content
This repository has been archived by the owner on Sep 4, 2021. It is now read-only.

Commit

Permalink
dashboard: Fix github auth
Browse files Browse the repository at this point in the history
closes #1872

Signed-off-by: Jesse Stuart <jesse@jessestuart.ca>
  • Loading branch information
jvatic committed Sep 15, 2015
1 parent 053c308 commit b3c2401
Show file tree
Hide file tree
Showing 9 changed files with 93 additions and 82 deletions.
19 changes: 0 additions & 19 deletions dashboard/app/lib/javascripts/dashboard/actions/app-auth.js

This file was deleted.

18 changes: 18 additions & 0 deletions dashboard/app/lib/javascripts/dashboard/actions/app-env.js
Expand Up @@ -10,11 +10,29 @@ var updateAppEnv = function (appID, changedRelease, env) {
var envDiff = objectDiff(changedRelease.env || {}, env);
release.env = applyObjectDiff(envDiff, release.env);
delete release.id;
delete release.created_at;

return client.createRelease(release);
}).then(function (args) {
var release = args[0];
return client.deployAppRelease(appID, release.id);
}).then(function () {
if (appID === Config.dashboardAppID || appID === 'dashboard') {
Config.setGithubToken(env.GITHUB_TOKEN);
}
}).catch(function (args) {
var message = 'Something went wrong.';
if (Array.isArray(args)) {
message = args[0].message;
} else if (typeof args === 'string') {
message = args;
}
Dispatcher.dispatch({
name: 'UPDATE_APP_ENV_FAILED',
appID: appID,
errorMsg: args[0].message || ''
});
return Promise.reject(args);
});
};

Expand Down
24 changes: 19 additions & 5 deletions dashboard/app/lib/javascripts/dashboard/config.js
Expand Up @@ -110,11 +110,21 @@ Config.fetch = function () {
};

Config.setGithubToken = function (token) {
Config.user.auths.github = { access_token: token };
Dispatcher.handleAppEvent({
name: "GITHUB_AUTH_CHANGE",
authenticated: true
});
if (token) {
Config.githubAuthenticated = true;
Config.user.auths.github = { access_token: token };
Dispatcher.handleAppEvent({
name: "GITHUB_AUTH_CHANGE",
authenticated: true
});
} else {
Config.githubAuthenticated = false;
Config.user.auths.github = null;
Dispatcher.handleAppEvent({
name: "GITHUB_AUTH_CHANGE",
authenticated: false
});
}
};

Config.setClient = function (client) {
Expand All @@ -125,4 +135,8 @@ Config.setGithubClient = function (client) {
Config.githubClient = client;
};

Config.setDashboardAppID = function (appID) {
Config.dashboardAppID = appID;
};

export default Config;
6 changes: 3 additions & 3 deletions dashboard/app/lib/javascripts/dashboard/main.js
Expand Up @@ -289,12 +289,12 @@ extend(Dashboard.prototype, {
if (authenticated) {
if ( !Config.githubClient ) {
var githubAuth = Config.user.auths.github;
Config.githubClient = new GithubClient(
Config.setGithubClient(new GithubClient(
githubAuth.access_token
);
));
}
} else {
Config.githubClient = null;
Config.setGithubClient(null);
}
},

Expand Down
4 changes: 4 additions & 0 deletions dashboard/app/lib/javascripts/dashboard/routers/apps.js
Expand Up @@ -336,6 +336,10 @@ var AppsRouter = Router.createClass({
case "GITHUB_PULL:MERGED":
this.__handleGithubPullMerged(event);
break;

case "GITHUB_AUTH_CHANGE":
this.history.navigate(this.history.path, { force: true, replace: true });
break;
}
},

Expand Down
45 changes: 1 addition & 44 deletions dashboard/app/lib/javascripts/dashboard/routers/github.js
Expand Up @@ -188,16 +188,6 @@ var GithubRouter = Router.createClass({
case "GITHUB_AUTH_CHANGE":
this.__handleGithubAuthChange(event.authenticated);
break;

case "APP:RELEASE_CREATE_FAILED":
this.__handleReleaseCreateFailed(event);
break;

case "APP:RELEASE_CREATED":
this.__waitForGithubAuth().then(function () {
this.__handleReleaseCreated(event);
}.bind(this));
break;
}
},

Expand Down Expand Up @@ -251,40 +241,7 @@ var GithubRouter = Router.createClass({
},

__handleGithubAuthChange: function (authenticated) {
if (authenticated && this.__waitForGithubAuthResolve) {
this.__waitForGithubAuthResolve();
delete this.__waitForGithubAuthResolve;
delete this.__waitForGithubAuthPromise;
}
if ( !authenticated && this.history.path.match(/^github/) ) {
this.__redirectToGithub();
}
},

__waitForGithubAuth: function () {
if (Config.githubClient) {
return Promise.resolve();
} else {
this.__waitForGithubAuthPromise = this.__waitForGithubAuthPromise || new Promise(function (resolve) {
this.__waitForGithubAuthResolve = resolve;
}.bind(this));
return this.__waitForGithubAuthPromise;
}
},

__handleReleaseCreateFailed: function (event) {
var view = this.context.primaryView;
if (view && view.constructor.displayName === "Views.GithubAuth" && view.isMounted() && view.props.appName === event.appId) {
view.setProps({
errorMsg: event.errorMsg
});
}
},

__handleReleaseCreated: function (event) {
var view = this.context.primaryView;
if (view && view.constructor.displayName === "Views.GithubAuth" && view.isMounted() && view.props.appName === event.appId) {
// GitHub token saved and loaded, navigate to main GitHub view
if (authenticated && this.history.getHandler().name === 'auth') {
this.history.navigate("/github", { replace: true, force: true });
}
},
Expand Down
8 changes: 8 additions & 0 deletions dashboard/app/lib/javascripts/dashboard/stores/app-deploy.js
Expand Up @@ -73,6 +73,14 @@ var AppDeploy = Store.createClass({
});
}
break;

case 'UPDATE_APP_ENV_FAILED':
if (event.appID === this.props.appID) {
this.setState({
launchErrorMsg: event.errorMsg
});
}
break;
}
}
});
Expand Down
3 changes: 3 additions & 0 deletions dashboard/app/lib/javascripts/dashboard/stores/app.js
Expand Up @@ -128,6 +128,9 @@ var App = Store.createClass({
__fetchApp: function () {
return App.getClient.call(this).getApp(this.props.appId).then(function (args) {
var res = args[0];
if (res.name === 'dashboard') {
Config.setDashboardAppID(res.id);
}
this.setState({
app: res
});
Expand Down
48 changes: 37 additions & 11 deletions dashboard/app/lib/javascripts/dashboard/views/github-auth.js.jsx
@@ -1,8 +1,9 @@
import { assertEqual, extend } from 'marbles/utils';
import QueryParams from 'marbles/query_params';
import Config from '../config';
import AppStore from '../stores/app';
import AppAuthActions from '../actions/app-auth';
import AppStore from 'dashboard/stores/app';
import AppDeployStore from 'dashboard/stores/app';
import Dispatcher from 'dashboard/dispatcher';
import RouteLink from './route-link';
import ExternalLink from './external-link';

Expand All @@ -21,9 +22,9 @@ var GithubAuth = React.createClass({

<section className="panel github-auth">
<form onSubmit={this.__handleSubmit}>
{this.state.notFound || this.props.errorMsg ? (
{this.state.notFound || this.state.errorMsg ? (
<div className="alert-error">
{this.state.notFound ? "Error: App not found: "+ this.props.appName : this.props.errorMsg}
{this.state.notFound ? "Error: App not found: "+ this.props.appName : this.state.errorMsg}
</div>
) : null}

Expand Down Expand Up @@ -78,20 +79,33 @@ var GithubAuth = React.createClass({

componentDidMount: function () {
AppStore.addChangeListener(this.state.appStoreId, this.__handleStoreChange);
AppDeployStore.addChangeListener(this.state.appDeployStoreId, this.__handleStoreChange);
},

componentWillReceiveProps: function (nextProps) {
var changed = false;
var prevAppStoreId = this.state.appStoreId;
var nextAppStoreId = this.__getAppStoreId(nextProps);
if ( !assertEqual(prevAppStoreId, nextAppStoreId) ) {
AppStore.removeChangeListener(prevAppStoreId, this.__handleStoreChange);
AppStore.addChangeListener(nextAppStoreId, this.__handleStoreChange);
changed = true;
}
var prevAppDeployStoreId = this.state.appDeployStoreId;
var nextAppDeployStoreId = this.__getAppDeployStoreId(nextProps);
if ( !assertEqual(prevAppDeployStoreId, nextAppDeployStoreId) ) {
AppDeployStore.removeChangeListener(prevAppDeployStoreId, this.__handleStoreChange);
AppDeployStore.addChangeListener(nextAppDeployStoreId, this.__handleStoreChange);
changed = true;
}
if (changed) {
this.__handleStoreChange(nextProps);
}
},

componentWillUnmount: function () {
AppStore.removeChangeListener(this.state.appStoreId, this.__handleStoreChange);
AppDeployStore.removeChangeListener(this.state.appDeployStoreId, this.__handleStoreChange);
},

__handleGenerateTokenBtnClick: function () {
Expand All @@ -108,16 +122,18 @@ var GithubAuth = React.createClass({

__handleSubmit: function (e) {
e.preventDefault();
var release = extend({}, this.state.release, {
env: extend({}, this.state.release.env, {
GITHUB_TOKEN: this.state.githubToken
})
var env = extend({}, this.state.release.env, {
GITHUB_TOKEN: this.state.githubToken
});
this.setState({
isSaving: true
});
AppAuthActions.setGithubToken(this.state.githubToken);
AppAuthActions.createRelease(this.state.appStoreId, release);
Dispatcher.dispatch({
name: 'UPDATE_APP_ENV',
appID: this.state.app.id,
prevRelease: this.state.release,
data: env
});
},

__handleStoreChange: function (props) {
Expand All @@ -130,12 +146,19 @@ var GithubAuth = React.createClass({
};
},

__getAppDeployStoreId: function (props) {
return {
appID: props.appName
};
},

__getState: function (props, prevState) {
prevState = prevState || {};
var state = {
appStoreId: this.__getAppStoreId(props),
appDeployStoreId: this.__getAppDeployStoreId(props),
githubToken: prevState.githubToken,
submitDisabled: prevState.submitDisabled
submitDisabled: prevState.submitDisabled,
};

var appState = AppStore.getState(state.appStoreId);
Expand All @@ -146,6 +169,9 @@ var GithubAuth = React.createClass({
state.env = extend({}, state.release.env);
}

var appDeployState = AppDeployStore.getState(state.appDeployStoreId);
state.errorMsg = AppDeployStore.launchErrorMsg;

return state;
}

Expand Down

0 comments on commit b3c2401

Please sign in to comment.