mirror of
https://github.com/Unleash/unleash.git
synced 2024-12-22 19:07:54 +01:00
When the user enters his username in to the field
a username cookie is updated and will be available in all subsequent requests. THIS IS NOT AUTHENTICATION! it is not safe and is only implemented as a first edition. It does how ever solve the issue where we are not able to see who canged what.
This commit is contained in:
parent
13ab89a91e
commit
2a4a76aaf5
3
app.js
3
app.js
@ -1,5 +1,6 @@
|
||||
var express = require('express'),
|
||||
bodyParser = require('body-parser'),
|
||||
cookieParser = require('cookie-parser'),
|
||||
log4js = require('log4js'),
|
||||
logger = require('./lib/logger'),
|
||||
routes = require('./lib/routes'),
|
||||
@ -38,6 +39,8 @@ app.set('port', process.env.HTTP_PORT || process.env.PORT || 4242);
|
||||
app.use(baseUriPath, express.static(__dirname + '/public'));
|
||||
app.use(bodyParser.json({strict: false}));
|
||||
|
||||
app.use(cookieParser());
|
||||
|
||||
eventApi(router);
|
||||
featureApi(router);
|
||||
featureArchiveApi(router);
|
||||
|
4
lib/extractUser.js
Normal file
4
lib/extractUser.js
Normal file
@ -0,0 +1,4 @@
|
||||
function extractUsername(req) {
|
||||
return req.cookies.username || "unknown";
|
||||
}
|
||||
module.exports = extractUsername;
|
@ -7,6 +7,7 @@ var NameExistsError = require('./error/NameExistsError');
|
||||
var NotFoundError = require('./error/NotFoundError');
|
||||
var ValidationError = require('./error/ValidationError');
|
||||
var validateRequest = require('./error/validateRequest');
|
||||
var extractUser = require('./extractUser');
|
||||
|
||||
module.exports = function (app) {
|
||||
|
||||
@ -33,7 +34,7 @@ module.exports = function (app) {
|
||||
.then(function() {
|
||||
return eventStore.create({
|
||||
type: eventType.featureCreated,
|
||||
createdBy: req.connection.remoteAddress,
|
||||
createdBy: extractUser(req),
|
||||
data: req.body
|
||||
});
|
||||
})
|
||||
@ -56,7 +57,7 @@ module.exports = function (app) {
|
||||
|
||||
app.put('/features/:featureName', function (req, res) {
|
||||
var featureName = req.params.featureName;
|
||||
var userName = req.connection.remoteAddress;
|
||||
var userName = extractUser(req);
|
||||
var updatedFeature = req.body;
|
||||
|
||||
updatedFeature.name = featureName;
|
||||
@ -83,7 +84,7 @@ module.exports = function (app) {
|
||||
|
||||
app.delete('/features/:featureName', function (req, res) {
|
||||
var featureName = req.params.featureName;
|
||||
var userName = req.connection.remoteAddress;
|
||||
var userName = extractUser(req);
|
||||
|
||||
featureDb.getFeature(featureName)
|
||||
.then(function () {
|
||||
@ -118,4 +119,3 @@ module.exports = function (app) {
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -6,6 +6,7 @@ var logger = require('./logger');
|
||||
var NameExistsError = require('./error/NameExistsError');
|
||||
var ValidationError = require('./error/ValidationError');
|
||||
var validateRequest = require('./error/validateRequest');
|
||||
var extractUser = require('./extractUser');
|
||||
|
||||
module.exports = function (app) {
|
||||
|
||||
@ -24,7 +25,7 @@ module.exports = function (app) {
|
||||
app.delete('/strategies/:name', function (req, res) {
|
||||
eventStore.create({
|
||||
type: eventType.strategyDeleted,
|
||||
createdBy: req.connection.remoteAddress,
|
||||
createdBy: extractUser(req),
|
||||
data: {
|
||||
name: req.params.name
|
||||
}
|
||||
@ -44,7 +45,7 @@ module.exports = function (app) {
|
||||
.then(function() {
|
||||
return eventStore.create({
|
||||
type: eventType.strategyCreated,
|
||||
createdBy: req.connection.remoteAddress,
|
||||
createdBy: extractUser(req),
|
||||
data: newStrategy
|
||||
});
|
||||
})
|
||||
@ -75,4 +76,3 @@ module.exports = function (app) {
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
"dependencies": {
|
||||
"bluebird": "2.6.2",
|
||||
"body-parser": "1.10.1",
|
||||
"cookie-parser": "^1.3.3",
|
||||
"db-migrate": "0.7.1",
|
||||
"deep-diff": "^0.3.0",
|
||||
"errorhandler": "1.3.2",
|
||||
|
@ -1,11 +1,14 @@
|
||||
var React = require('react');
|
||||
var TabView = require('./components/TabView');
|
||||
var Menu = require('./components/Menu');
|
||||
var UserStore = require('./stores/UserStore');
|
||||
var LogEntriesComponent = React.createFactory(require('./components/log/LogEntriesComponent'));
|
||||
var FeatureTogglesComponent = React.createFactory(require('./components/feature/FeatureTogglesComponent'));
|
||||
var StrategiesComponent = React.createFactory(require('./components/strategy/StrategiesComponent'));
|
||||
var ArchiveFeatureComponent = React.createFactory(require('./components/feature/ArchiveFeatureComponent'));
|
||||
|
||||
UserStore.init();
|
||||
|
||||
var tabPanes = [
|
||||
{
|
||||
name: 'Feature Toggles',
|
||||
|
@ -1,4 +1,5 @@
|
||||
var React = require('react');
|
||||
var User = require('./User');
|
||||
|
||||
var Menu = React.createClass({
|
||||
render: function() { return (
|
||||
@ -46,6 +47,9 @@ var Menu = React.createClass({
|
||||
unleash admin
|
||||
</span>
|
||||
</a>
|
||||
<div style={{position: "absolute", right: "0"}}>
|
||||
<User />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
23
public/js/components/User.jsx
Normal file
23
public/js/components/User.jsx
Normal file
@ -0,0 +1,23 @@
|
||||
var React = require('react');
|
||||
var UserStore = require('../stores/UserStore');
|
||||
|
||||
var User = React.createClass({
|
||||
|
||||
onSave: function() {
|
||||
var value = this.refs.username.getDOMNode().value.trim();
|
||||
UserStore.set(value);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
return (
|
||||
<div className="r-pam">
|
||||
<input type="text" placeholder="username"
|
||||
ref="username"
|
||||
defaultValue={UserStore.get()}
|
||||
onBlur={this.onSave} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = User;
|
34
public/js/stores/UserStore.js
Normal file
34
public/js/stores/UserStore.js
Normal file
@ -0,0 +1,34 @@
|
||||
var _username;
|
||||
|
||||
//Ref: http://stackoverflow.com/questions/10730362/get-cookie-by-name
|
||||
function readCookie(name) {
|
||||
var nameEQ = name + "=";
|
||||
var ca = document.cookie.split(';');
|
||||
for(var i=0;i < ca.length;i++) {
|
||||
var c = ca[i];
|
||||
while (c.charAt(0)==' ') {
|
||||
c = c.substring(1,c.length);
|
||||
}
|
||||
if (c.indexOf(nameEQ) === 0) {
|
||||
return c.substring(nameEQ.length,c.length);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
var UserStore = {
|
||||
init: function init() {
|
||||
_username = readCookie("username");
|
||||
},
|
||||
|
||||
set: function set(username) {
|
||||
_username=username;
|
||||
document.cookie="username="+_username+"; expires=Thu, 18 Dec 2099 12:00:00 UTC";
|
||||
},
|
||||
|
||||
get: function get() {
|
||||
return _username;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = UserStore;
|
Loading…
Reference in New Issue
Block a user