Skip to content

Commit

Permalink
Merge 1a47d13 into 34e54aa
Browse files Browse the repository at this point in the history
  • Loading branch information
erran-r7 committed Oct 5, 2016
2 parents 34e54aa + 1a47d13 commit 46c9c83
Show file tree
Hide file tree
Showing 8 changed files with 108 additions and 35 deletions.
3 changes: 3 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ Application.on('ready', () => {
mainWindow.loadURL(Server.get('configureUrl'));
mainWindow.show();

// TODO: A global clipboard instance must be loaded. Investigate how to load it within the .jsx code.
mainWindow.webContents.executeJavaScript('new Clipboard(".copy-to-clipboard-button");');

setInterval(() => {
const entryPointUrl = Server.get('entryPointUrl');

Expand Down
17 changes: 15 additions & 2 deletions lib/routes/configure.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@ const ResponseObj = require('./../response');

module.exports = (app, auth) => {
router.get('/', (req, res) => {
const storedMetadataUrls = Storage.get('metadataUrls') || {};
const previousMetadataUrl = app.get('metadataUrl') || Storage.get('previousMetadataUrl') || '';

res.render('configure', Object.assign(ResponseObj, {
metadataUrl: Storage.get('metadataUrl') || '',
metadataUrl: previousMetadataUrl,
metadataUrls: storedMetadataUrls,
metadataUrlValid: Storage.get('metadataUrlValid'),
error: Storage.get('metadataUrlError')
}));
Expand All @@ -29,7 +33,7 @@ module.exports = (app, auth) => {
const metadataUrl = req.body.metadataUrl;
const metaDataResponseObj = Object.assign(ResponseObj, {metadataUrl});

Storage.set('metadataUrl', metadataUrl);
app.set('metadataUrl', metadataUrl);

const xmlReq = https.get(metadataUrl, (xmlRes) => {
let xml = '';
Expand Down Expand Up @@ -82,6 +86,15 @@ module.exports = (app, auth) => {
config.auth.entryPoint = entryPoint;

if (cert && issuer && entryPoint) {
let metadataUrls = Storage.get('metadataUrls') || {};

if (!metadataUrls.hasOwnProperty(metadataUrl)) {
metadataUrls[metadataUrl] = metadataUrl

Storage.set('previousMetadataUrl', metadataUrl);
Storage.set('metadataUrls', metadataUrls);
}

app.set('entryPointUrl', config.auth.entryPoint);
auth.configure(config.auth);
res.redirect(config.auth.entryPoint);
Expand Down
71 changes: 41 additions & 30 deletions lib/routes/refresh.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,41 +11,52 @@ const credentials = new AwsCredentials(config.aws);

const ResponseObj = require('./../response');

router.all('/', (req, res) => {
const sts = new Aws.STS();
const session = req.session.passport;
module.exports = (app) => {
router.all('/', (req, res) => {
const sts = new Aws.STS();
const session = req.session.passport;

const refreshResponseObj = Object.assign(ResponseObj, {
accountId: session.accountId
});

sts.assumeRoleWithSAML({
PrincipalArn: session.principalArn,
RoleArn: session.roleArn,
SAMLAssertion: session.samlResponse,
DurationSeconds: config.aws.duration
}, (assumeRoleErr, data) => {
if (assumeRoleErr) {
res.redirect(config.auth.entryPoint);
return;
}

const credentialResponseObj = Object.assign(refreshResponseObj, {
accessKey: data.Credentials.AccessKeyId,
secretKey: data.Credentials.SecretAccessKey,
sessionToken: data.Credentials.SessionToken
const refreshResponseObj = Object.assign(ResponseObj, {
accountId: session.accountId
});

res.render('refresh', credentialResponseObj);
sts.assumeRoleWithSAML({
PrincipalArn: session.principalArn,
RoleArn: session.roleArn,
SAMLAssertion: session.samlResponse,
DurationSeconds: config.aws.duration
}, (assumeRoleErr, data) => {
if (assumeRoleErr) {
res.redirect(config.auth.entryPoint);
return;
}

const credentialResponseObj = Object.assign(refreshResponseObj, {
accessKey: data.Credentials.AccessKeyId,
secretKey: data.Credentials.SecretAccessKey,
sessionToken: data.Credentials.SessionToken
});

const profileName = `awsaml-${session.accountId}`;
const metadataUrl = app.get('metadataUrl');
let metadataUrls = Storage.get('metadataUrls');

credentials.save(data.Credentials, `awsaml-${session.accountId}`, (credSaveErr) => {
if (credSaveErr) {
res.render('refresh', Object.assign(credentialResponseObj, {
error: credSaveErr
}));
// If the stored metadataUrl label value is the same as the URL default to the profile name!
if(metadataUrls[metadataUrl] == metadataUrl) {
metadataUrls[metadataUrl] = profileName;
Storage.set('metadataUrls', metadataUrls);
}
res.render('refresh', credentialResponseObj);

credentials.save(data.Credentials, profileName, (credSaveErr) => {
if (credSaveErr) {
res.render('refresh', Object.assign(credentialResponseObj, {
error: credSaveErr
}));
}
});
});
});
});

module.exports = router;
return router;
};
2 changes: 1 addition & 1 deletion lib/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const app = require('./server-config')(auth, config, sessionSecret);
{name: config.auth.path, route: require('./routes/auth')(app, auth)},
{name: '/configure', route: require('./routes/configure')(app, auth)},
{name: '/logout', route: require('./routes/logout')(app)},
{name: '/refresh', route: require('./routes/refresh')}
{name: '/refresh', route: require('./routes/refresh')(app)}
].forEach((el) => {
app.use(el.name, el.route);
});
Expand Down
8 changes: 8 additions & 0 deletions public/css/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,11 @@ dd {
.button-margin {
margin-left: 10px;
}

.scrollable-list {
overflow-x: hidden;
}

#recent-logins .scrollable-list {
height: 150px;
}
40 changes: 39 additions & 1 deletion views/configure.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const propTypes = {
error: React.PropTypes.string,
title: React.PropTypes.string.isRequired,
metadataUrl: React.PropTypes.string.isRequired,
metadataUrls: React.PropTypes.object.isRequired,
metadataUrlValid: React.PropTypes.bool
};

Expand All @@ -17,6 +18,10 @@ class Configure extends React.Component {
return '';
}

get previousMetadataUrl() {
return this.props.metadataUrl || this.props.metadataUrls[0];
}

hasError() {
return (this.props.error || this.props.metadataUrlValid === false);
}
Expand Down Expand Up @@ -44,17 +49,50 @@ class Configure extends React.Component {
<label htmlFor='metadataUrl'>SAML Metadata URL</label>
<input
className='form-control'
defaultValue={this.props.metadataUrl}
defaultValue={this.previousMetadataUrl}
id='metadataUrl'
name='metadataUrl'
pattern='https://.+'
required
type='url'
/>
</div>

<button className='btn btn-default' type='submit'>Done</button>
</fieldset>
</form>
<div id='recent-logins'>
<h4>Recent Logins</h4>
<ul className='list-group scrollable-list' id='recent-logins'>{
Object.keys(this.props.metadataUrls).map((key) => {
const pretty = this.props.metadataUrls[key];
const prettyId = `#${pretty}`;

return (
<li className='list-group-item' key={key}>
<details>
<summary>{pretty}</summary>

<br/>

<div className='input-group'>
<input
className='form-control' defaultValue={key}
id={pretty} readonly // eslint-disable-line react/no-unknown-property
/>
<span className='input-group-btn'>
<button
className='btn btn-default copy-to-clipboard-button'
data-clipboard-target={prettyId}
><span className='glyphicon glyphicon-copy'/></button>
</span>
</div>
</details>
</li>
);
})
}</ul>
</div>
</div>
</div>
</DefaultLayout>
Expand Down
1 change: 1 addition & 0 deletions views/layouts/default.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const DefaultLayout = function render(props) {
{props.children}
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.5.12/clipboard.min.js"></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/prism/0.0.1/prism.min.js'></script>
</body>
</html>
Expand Down
1 change: 0 additions & 1 deletion views/refresh.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ class Refresh extends React.Component {
);
}
}

Refresh.propTypes = propTypes;
Refresh.displayName = 'Refresh';

Expand Down

0 comments on commit 46c9c83

Please sign in to comment.