jsut setting up

This commit is contained in:
2013-01-13 18:16:49 -08:00
parent 78a2f2db48
commit f6d1b95d0b
20 changed files with 393 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', routes.index);
app.listen(3000, function(){
console.log("Express server listening on port %d in %s mode", app.address().port,
app.settings.env);
});

View File

@@ -0,0 +1,9 @@
/*
* GET home page.
*/
module.exports = function(app) {
app.get('/', function(req, res){
res.render('index', { title: 'Express' });
});
};

View File

@@ -0,0 +1,11 @@
/*
* User Routes
*/
module.exports = function(app) {
app.get('/users/:name', function(req, res){
res.render('users/profile', {title: 'User profile'});
});
};

View File

@@ -0,0 +1,3 @@
h1 Users
p User list should be here

View File

@@ -0,0 +1,21 @@
{
"frank": {
"username": "frank",
"name": "Frank Sinatra",
"bio": "Singer"
},
"jobim": {
"username": "jobim",
"name": "Antonio Carlos Jobim",
"bio": "Composer"
},
"fred": {
"username": "fred",
"name": "Fred Astaire",
"bio": "Dancer and Actor"
}
}

View File

@@ -0,0 +1,45 @@
/*
* User Routes
*/
var users = require('../data/users');
module.exports = function(app) {
app.get('/users', function(req, res){
res.render('users/index', {title: 'Users', users: users});
});
app.get('/users/new', function(req, res) {
res.render('users/new', {title: "New User"});
});
app.get('/users/:name', function(req, res, next){
var user = users[req.params.name];
if (user) {
res.render('users/profile', {title: 'User profile', user: user});
} else {
next();
}
});
app.post('/users', function(req, res) {
if (users[req.body.username]) {
res.send('Conflict', 409);
} else {
users[req.body.username] = req.body;
res.redirect('/users');
}
});
app.del('/users/:name', function(req, res, next) {
if (users[req.params.name]) {
delete users[req.params.name];
res.redirect('/users');
} else {
next();
}
});
};

View File

@@ -0,0 +1,10 @@
h1 Users
p
a(href="/users/new") Create new profile
ul
- for(var username in users) {
li
a(href="/users/" + encodeURIComponent(username))= users[username].name
- };

View File

@@ -0,0 +1,8 @@
h1= user.name
h2 Bio
p= user.bio
form(action="/users/" + encodeURIComponent(user.username), method="POST")
input(name="_method", type="hidden", value="DELETE")
input(type="submit", value="Delete")

View File

@@ -0,0 +1,14 @@
h1 New User
form(method="POST", action="/users")
p
label(for="username") Username<br />
input#username(name="username")
p
label(for="name") Name<br />
input#name(name="name")
p
label(for="bio") Bio<br />
textarea#bio(name="bio")
p
input(type="submit", value="Create")

View File

@@ -0,0 +1,34 @@
/*
* Session Routes
*/
var users = require('../data/users');
module.exports = function(app) {
app.dynamicHelpers({
session: function(req, res) {
return req.session;
}
});
app.get('/session/new', function(req, res) {
res.render('session/new', {title: "Log in"});
});
app.post('/session', function(req, res) {
if (users[req.body.username] &&
users[req.body.username].password === req.body.password) {
req.session.user = users[req.body.username];
res.redirect('/users');
} else {
res.redirect('/session/new')
}
});
app.del('/session', function(req, res, next) {
req.session.destroy();
res.redirect('/users');
});
};

View File

@@ -0,0 +1,19 @@
- if (session.user) {
p
span Hello&nbsp;
span= session.user.name
span !
p
form(method="POST", action="/session")
input(type="hidden", name="_method", value="DELETE")
input(type="submit", value="Log out")
- } else {
p
a(href="/session/new") Login
span &nbsp;or&nbsp;
a(href="/users/new") Register
- }

View File

@@ -0,0 +1,8 @@
!!!
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
body
header!= partial('session/user')
section#main!= body

View File

@@ -0,0 +1,11 @@
h1 Log in
form(method="POST", action="/session")
p
label(for="username") User name:<br />
input#username(name="username")
p
label(for="password") Password:<br />
input#password(type="password", name="password")
p
input(type="submit", value="Log in");

View File

@@ -0,0 +1,17 @@
h1 New User
form(method="POST", action="/users")
p
label(for="username") Username<br />
input#username(name="username")
p
label(for="name") Name<br />
input#name(name="name")
p
label(for="password") Password<br />
input#password(type="password", name="password")
p
label(for="bio") Bio<br />
textarea#bio(name="bio")
p
input(type="submit", value="Create")

View File

@@ -0,0 +1,9 @@
function notLoggedIn(req, res, next) {
if (req.session.user) {
res.send('Unauthorized', 401);
} else {
next();
}
}
module.exports = notLoggedIn;

View File

@@ -0,0 +1,35 @@
/*
* Session Routes
*/
var users = require('../data/users');
var notLoggedIn = require('./middleware/not_logged_in');
module.exports = function(app) {
app.dynamicHelpers({
session: function(req, res) {
return req.session;
}
});
app.get('/session/new', notLoggedIn, function(req, res) {
res.render('session/new', {title: "Log in"});
});
app.post('/session', notLoggedIn, function(req, res) {
if (users[req.body.username] &&
users[req.body.username].password === req.body.password) {
req.session.user = users[req.body.username];
res.redirect('/users');
} else {
res.redirect('/session/new');
}
});
app.del('/session', function(req, res, next) {
req.session.destroy();
res.redirect('/users');
});
};

View File

@@ -0,0 +1,45 @@
/*
* User Routes
*/
var users = require('../data/users');
var notLoggedIn = require('./middleware/not_logged_in');
module.exports = function(app) {
app.get('/users', function(req, res){
res.render('users/index', {title: 'Users', users: users});
});
app.get('/users/new', notLoggedIn, function(req, res) {
res.render('users/new', {title: "New User"});
});
app.get('/users/:name', function(req, res, next){
var user = users[req.params.name];
if (user) {
res.render('users/profile', {title: 'User profile', user: user});
} else {
next();
}
});
app.post('/users', notLoggedIn, function(req, res) {
if (users[req.body.username]) {
res.send('Conflict', 409);
} else {
users[req.body.username] = req.body;
res.redirect('/users');
}
});
app.del('/users/:name', function(req, res, next) {
if (users[req.params.name]) {
delete users[req.params.name];
res.redirect('/users');
} else {
next();
}
});
};

View File

@@ -0,0 +1,12 @@
var users = require('../../data/users');
function loadUser(req, res, next) {
var user = req.user = users[req.params.name];
if (! user) {
res.send('Not found', 404);
} else {
next();
}
}
module.exports = loadUser;

View File

@@ -0,0 +1,37 @@
/*
* User Routes
*/
var users = require('../data/users');
var notLoggedIn = require('./middleware/not_logged_in');
var loadUser = require('./middleware/load_user');
module.exports = function(app) {
app.get('/users', function(req, res){
res.render('users/index', {title: 'Users', users: users});
});
app.get('/users/new', notLoggedIn, function(req, res) {
res.render('users/new', {title: "New User"});
});
app.get('/users/:name', loadUser, function(req, res, next){
res.render('users/profile', {title: 'User profile', user: req.user});
});
app.post('/users', notLoggedIn, function(req, res) {
if (users[req.body.username]) {
res.send('Conflict', 409);
} else {
users[req.body.username] = req.body;
res.redirect('/users');
}
});
app.del('/users/:name', loadUser, function(req, res, next) {
delete users[req.user.username];
res.redirect('/users');
});
};

View File

@@ -0,0 +1,9 @@
function restrictUserToSelf(req, res, next) {
if (! req.session.user || req.session.user.username !== req.user.username) {
res.send('Unauthorized', 401);
} else {
next();
}
}
module.exports = restrictUserToSelf;