Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion bin/ldnode.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,12 @@ var argv = require('nomnom')
full: 'default-app',
help: 'URI to use as a default app for resources (default: https://linkeddata.github.io/warp/#/list/)'
})
.parse()
.option('signup', {
full: 'signup',
flag: true,
help: 'Allow a user to set up its initial identity'
})
.parse();

function bin (argv) {
// Print version and leave
Expand Down
117 changes: 64 additions & 53 deletions lib/create-app.js
Original file line number Diff line number Diff line change
@@ -1,67 +1,78 @@
module.exports = createApp
module.exports = createApp;

var express = require('express')
var session = require('express-session')
var uuid = require('node-uuid')
var cors = require('cors')
var LDP = require('./ldp')
var LdpMiddleware = require('./ldp-middleware')
var express = require('express');
var session = require('express-session');
var uuid = require('node-uuid');
var cors = require('cors');
var debug = require('./debug');
var LDP = require('./ldp');
var LdpMiddleware = require('./ldp-middleware');
var proxy = require('./handlers/proxy')
var IdentityProvider = require('./identity-provider')
var vhost = require('vhost')

var IdentityProvider = require('./identity-provider');
var vhost = require('vhost');
var path = require('path');
var corsSettings = cors({
methods: [
'OPTIONS', 'HEAD', 'GET',
'PATCH', 'POST', 'PUT', 'DELETE'
],
exposedHeaders: 'User, Location, Link, Vary, Last-Modified, Content-Length',
credentials: true,
maxAge: 1728000,
origin: true
})
methods: [
'OPTIONS', 'HEAD', 'GET',
'PATCH', 'POST', 'PUT', 'DELETE'
],
exposedHeaders: 'User, Location, Link, Vary, Last-Modified, Content-Length',
credentials: true,
maxAge: 1728000,
origin: true
});

function createApp (argv) {
var ldp = new LDP(argv)
var app = express()
var ldp = new LDP(argv);
var app = express();

// Setting options as local variable
app.locals.ldp = ldp
// Setting options as local variable
app.locals.ldp = ldp;

var sessionSettings = {
secret: ldp.secret || uuid.v1(),
saveUninitialized: false,
resave: false
}
var sessionSettings = {
secret: ldp.secret || uuid.v1(),
saveUninitialized: false,
resave: false
}

// Cookies should set to be secure if https is on
if (ldp.webid || ldp.idp) {
sessionSettings.cookie = {
secure: true
// Cookies should set to be secure if https is on
if (ldp.webid || ldp.idp) {
sessionSettings.cookie = {
secure: true
}
}
}

// Session
app.use(session(sessionSettings))
// Session
app.use(session(sessionSettings));

// Adding proxy
if (ldp.proxy) {
proxy(app, ldp.proxy)
}
// Adding proxy
if (ldp.proxy) {
proxy(app, ldp.proxy);
}

// Adding Multi-user support
if (ldp.idp) {
var idp = IdentityProvider({
store: ldp,
suffixAcl: ldp.suffixAcl
})
app.use('/accounts', idp.middleware(corsSettings))
app.use('/', corsSettings, idp.get.bind(idp))
app.use(vhost('*', LdpMiddleware(corsSettings)))
}
// Adding Multi-user support
if (ldp.idp || ldp.signup) {
var idp = IdentityProvider({
store: ldp,
suffixAcl: ldp.suffixAcl,
overwrite: ldp.signup
})
app.use('/accounts', idp.middleware(corsSettings));
app.use('/', corsSettings, idp.get.bind(idp))
}

// Setting up routes
app.use('/', LdpMiddleware(corsSettings))
if (ldp.idp) {
app.use(vhost('*', LdpMiddleware(corsSettings)));
}

if (ldp.signup) {
app.get('/', function (req, res) {
res.set('Content-Type', 'text/html');
var signup = path.resolve(__dirname + '/../static/signup.html')
res.sendFile(signup);
});
}
app.use('/', LdpMiddleware(corsSettings));

return app
}
return app;
}
13 changes: 7 additions & 6 deletions lib/identity-provider.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ function IdentityProvider (options) {
this.suffixURI = options.suffixURI || '#me'
this.buildURI = options.buildURI || defaultBuildURI
this.suffixAcl = options.suffixAcl
this.overwrite = options.overwrite
}

// Generate the future webid from the options and the IdentityProvider Settings
Expand Down Expand Up @@ -78,7 +79,7 @@ IdentityProvider.prototype.create = function (options, cert, callback) {
var subdomain = options.host.split(':')[0]
self.store.exists(subdomain, '/', function (err) {
// if page exists
if (!err || err.status !== 404) {
if (!self.overwrite && (!err || err.status !== 404)) {
debug('Cannot create ' + subdomain + ', it already exists')
var error = new Error('Account already exists')
error.status = 406
Expand All @@ -94,10 +95,10 @@ IdentityProvider.prototype.create = function (options, cert, callback) {
], function (err) {
if (err) {
err.status = 500
debug('Error creating account ' + options.username + ': ' + err.message)
debug('Error creating account ' + options.agent + ': ' + err.message)
}

debug('Created files for ' + options.username)
debug('Created files for ' + options.agent)
callback(err)
})
})
Expand Down Expand Up @@ -405,9 +406,9 @@ IdentityProvider.prototype.post = function (req, res, next) {
var self = this
var options = req.body

if (!options || !options.username) {
debug('Account creation is missing username field')
var err = new Error('You must enter an account name!')
if (!options) {
debug('Options missing')
var err = new Error('Settings to create the account have not been passed!')
err.status = 406
return next(err)
}
Expand Down
Loading