mirror of
https://github.com/zhigang1992/deployd.git
synced 2026-05-13 12:37:17 +08:00
Added authentication to deployment page
This commit is contained in:
@@ -5,7 +5,8 @@ var path = require('path')
|
||||
, tar = require('tar')
|
||||
, zlib = require('zlib')
|
||||
, request = require('request')
|
||||
, fs = require('fs');
|
||||
, fs = require('fs')
|
||||
, q = require('q');
|
||||
|
||||
/**
|
||||
* deploy all files to a remote testing instance
|
||||
@@ -13,6 +14,9 @@ var path = require('path')
|
||||
|
||||
function Deployment(appPath, user, subdomain) {
|
||||
var remote = this.remote = 'deploydapp.com';
|
||||
|
||||
this.api = "http://api.deploydapp.com:3000";
|
||||
|
||||
this.path = path.resolve(appPath);
|
||||
|
||||
if(!subdomain) {
|
||||
@@ -140,6 +144,10 @@ Deployment.prototype.setConfig = function(key, val) {
|
||||
cur[key] = val;
|
||||
|
||||
fs.writeFileSync(this.path + '/.dpd/deployments.json', JSON.stringify(cur, null, ' '));
|
||||
delete require.cache[path.resolve(this.path + '/.dpd/deployments.json')];
|
||||
|
||||
console.log();
|
||||
console.log("Saved ", key, val);
|
||||
};
|
||||
|
||||
Deployment.prototype.authenticate = function (credentials, fn) {
|
||||
@@ -152,12 +160,12 @@ Deployment.prototype.authenticate = function (credentials, fn) {
|
||||
|
||||
if(credentials) {
|
||||
var options = {
|
||||
url: 'http://api.deploydapp.com:3000/users/login',
|
||||
url: deployment.api + '/users/login',
|
||||
json: credentials,
|
||||
method: 'POST'
|
||||
};
|
||||
request(options, function (err, res, session) {
|
||||
if(err) return fn(err);
|
||||
if(err) return fn(false);
|
||||
var sid = session && session.id;
|
||||
|
||||
if(sid) {
|
||||
@@ -181,4 +189,59 @@ Deployment.prototype.authenticate = function (credentials, fn) {
|
||||
fn(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Deployment.prototype.getOnlineDeployments = function(fn) {
|
||||
var deployment = this;
|
||||
|
||||
var sid = deployment.getConfig('sid');
|
||||
console.log('sid', sid);
|
||||
request.cookie('sid', sid);
|
||||
|
||||
var meIdQ = q.fcall(function() {
|
||||
|
||||
var d = q.defer();
|
||||
|
||||
request({
|
||||
url: deployment.api + "/users/me",
|
||||
headers: {
|
||||
'Accept': 'application/json'
|
||||
}
|
||||
}, function(err, res, user) {
|
||||
if (err) return d.reject(err);
|
||||
if (!user) return d.reject(new Error("Not logged in"));
|
||||
d.resolve(user.id);
|
||||
});
|
||||
|
||||
return d.promise;
|
||||
|
||||
});
|
||||
|
||||
var deploymentsQ = meIdQ.then(function(meId) {
|
||||
var d = q.defer();
|
||||
|
||||
request({
|
||||
url: deployment.api + "/apps",
|
||||
qs: {owner: meId},
|
||||
headers: {
|
||||
'Accept': 'application/json'
|
||||
}
|
||||
}, function(err, res, deployments) {
|
||||
if (err) return d.reject(err);
|
||||
if (typeof deployments === 'string') {
|
||||
deployments = JSON.parse(deployments);
|
||||
}
|
||||
|
||||
d.resolve(deployments);
|
||||
});
|
||||
|
||||
return d.promise;
|
||||
});
|
||||
|
||||
deploymentsQ.then(function(deployments) {
|
||||
fn(null, deployments);
|
||||
}, function(err) {
|
||||
fn(err);
|
||||
});
|
||||
|
||||
};
|
||||
@@ -23,7 +23,7 @@
|
||||
</button>
|
||||
<br />
|
||||
|
||||
<select id="existing-deployment-dropdown" class="empty">
|
||||
<select id="existing-deployment-dropdown" class="empty hide">
|
||||
<option>or add an existing deployment...</option>
|
||||
<option>my-awesome-app-demo</option>
|
||||
<option>diamond-shovel</option>
|
||||
@@ -38,7 +38,8 @@
|
||||
<h3>Log into Deployd.com</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>Log in to your <a href="http://deployapp.com">deploydapp.com</a> account or <a href="http://deploy.deployapp.com/">register</a> if you don't already have one.</p>
|
||||
<div class="alert alert-error hide" id="auth-error">Invalid email or password</div>
|
||||
<p>Log in to your <a href="http://deploydapp.com">deploydapp.com</a> account or <a href="http://deploydapp.com/">register</a> if you don't already have one.</p>
|
||||
<form class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="inputEmail">Email</label>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
var scope = {
|
||||
deployments: null
|
||||
, onlineDeployments: null
|
||||
, checkedAuthentication: false
|
||||
, isAuthenticated: false
|
||||
};
|
||||
@@ -15,9 +16,11 @@
|
||||
});
|
||||
|
||||
loadDeployments();
|
||||
checkAuthentication();
|
||||
loadOnlineDeployments();
|
||||
// checkAuthentication();
|
||||
|
||||
$('#deployment-list').on('click', '.component-item', onClickDeployment);
|
||||
$('#deployAuthModal .login-btn').click(onClickLogin);
|
||||
|
||||
function loadDeployments() {
|
||||
dpdDeployments.get(function(deployments, error) {
|
||||
@@ -26,15 +29,23 @@
|
||||
});
|
||||
}
|
||||
|
||||
function loadOnlineDeployments() {
|
||||
dpdDeployments.get('online', function(deployments, error) {
|
||||
scope.checkedAuthentication = true;
|
||||
scope.isAuthenticated = !error;
|
||||
showLogin(true);
|
||||
|
||||
scope.onlineDeployments = deployments;
|
||||
renderOnlineDeployments();
|
||||
});
|
||||
}
|
||||
|
||||
function checkAuthentication() {
|
||||
dpdDeployments.post('authenticate', {}, function(res, err) {
|
||||
scope.isAuthenticated = !err;
|
||||
scope.checkedAuthentication = true;
|
||||
if (scope.isAuthenticated) {
|
||||
$('#deployments').show();
|
||||
} else {
|
||||
$modal.modal('show');
|
||||
}
|
||||
|
||||
showLogin();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -44,6 +55,38 @@
|
||||
location.href = href;
|
||||
}
|
||||
|
||||
function onClickLogin() {
|
||||
var email = $('#deployAuthModal #inputEmail').val()
|
||||
, password = $('#deployAuthModal #inputPassword').val();
|
||||
|
||||
$('#auth-error').hide();
|
||||
|
||||
dpdDeployments.post('authenticate', {
|
||||
username: email,
|
||||
password: password
|
||||
}, function(res, err) {
|
||||
scope.isAuthenticated = !err;
|
||||
showLogin(true);
|
||||
loadOnlineDeployments();
|
||||
});
|
||||
}
|
||||
|
||||
function showLogin(error) {
|
||||
if (scope.isAuthenticated) {
|
||||
$modal.modal('hide');
|
||||
$('#deployments').show();
|
||||
} else {
|
||||
$modal.modal('show');
|
||||
$('#deployments').hide();
|
||||
if (error) {
|
||||
$('#auth-error').show();
|
||||
} else {
|
||||
$('#auth-error').hide();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function renderDeployments() {
|
||||
if (scope.deployments === null || scope.deployments.length) {
|
||||
$('#deployments-empty').hide();
|
||||
@@ -62,4 +105,18 @@
|
||||
}
|
||||
}
|
||||
|
||||
function renderOnlineDeployments() {
|
||||
var $dropdown = $('#existing-deployment-dropdown');
|
||||
if (scope.onlineDeployments && scope.onlineDeployments.length) {
|
||||
$dropdown.show().empty();
|
||||
$dropdown.append("<option>or add an existing deployment...</option>");
|
||||
console.log(scope.onlineDeployments, scope.onlineDeployments.length);
|
||||
scope.onlineDeployments.forEach(function(o) {
|
||||
$dropdown.append("<option>" + o.name + "</option>");
|
||||
});
|
||||
} else {
|
||||
$dropdown.hide();
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
@@ -23,6 +23,8 @@ InternalDeployments.prototype.handle = function(ctx, next) {
|
||||
this.getList(ctx, next);
|
||||
} else if (ctx.method === "POST" && ctx.url === "/authenticate") {
|
||||
this.authenticate(ctx, next);
|
||||
} else if (ctx.method === "GET" && ctx.url === '/online') {
|
||||
this.getOnline(ctx, next);
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
@@ -63,6 +65,15 @@ InternalDeployments.prototype.getList = function(ctx, next) {
|
||||
|
||||
};
|
||||
|
||||
InternalDeployments.prototype.getOnline = function(ctx, next) {
|
||||
var d = new Deployment('.', null, '');
|
||||
|
||||
d.getOnlineDeployments(function(err, deployments) {
|
||||
console.log(err, deployments);
|
||||
ctx.done(err, deployments);
|
||||
});
|
||||
};
|
||||
|
||||
InternalDeployments.prototype.authenticate = function(ctx, next) {
|
||||
var d = new Deployment('.', null, '');
|
||||
|
||||
|
||||
@@ -38,7 +38,8 @@ var excludedTypes = {
|
||||
Dashboard: 1,
|
||||
Files: 1,
|
||||
ClientLib: 1,
|
||||
InternalResources: 1
|
||||
InternalResources: 1,
|
||||
InternalDeployments: 1
|
||||
};
|
||||
|
||||
InternalResources.prototype.handle = function(ctx, next) {
|
||||
|
||||
Reference in New Issue
Block a user