-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added admin pages on menu, implemented teams server-side, #19.
- Loading branch information
Adam Schodde
committed
Sep 16, 2014
1 parent
133646c
commit 3554c5a
Showing
32 changed files
with
1,537 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
'use strict'; | ||
|
||
var validator = require('validator'); | ||
var db = require('../../../components/database'); | ||
|
||
db.initialize('couchdb'); | ||
|
||
// Delete a member from a team. | ||
exports.index = function(req, res) { | ||
if(!req.session.username || !req.session.isAdmin) { | ||
return res.json(401, {message: 'Please sign in.'}); | ||
} | ||
var teamName = req.body.teamname; | ||
var username = req.body.username; | ||
var requestor = req.session.username; | ||
if(validator.isNull(username)) { | ||
return res.json(400, {message: 'Missing username.'}); | ||
} | ||
if(validator.isNull(teamName)) { | ||
return res.json(400, {message: 'Missing username.'}); | ||
} | ||
if(username === requestor) { | ||
return res.json(400, {message: 'Can\'t remove yourself from a team.'}); | ||
} | ||
db.deleteUserFromTeam(teamName, username, function (error) { | ||
if(error) { | ||
console.log(error); | ||
return res.json(500, {message: 'Could not delete member, check logs.'}); | ||
} | ||
return res.json({message: 'Member deleted.'}); | ||
}); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
'use strict'; | ||
|
||
var app = require('../../../app'); | ||
var request = require('supertest'); | ||
var assert = require('assert'); | ||
var uuid = require('node-uuid'); | ||
var db = require('../../../components/database'); | ||
var bcrypt = require('bcrypt'); | ||
var settings = require('../../../config/environment'); | ||
db.initialize('couchdb'); | ||
var users = db.getUsersTable(); | ||
var teams = db.getTeamsTable(); | ||
var cookie; | ||
|
||
describe('POST /api/admin/deleteMember', function() { | ||
|
||
beforeEach(function (done) { | ||
var admin = { | ||
username: 'mockAdmin', | ||
password: bcrypt.hashSync('mockPassword', 10), | ||
firstName: 'Foo', | ||
lastName: 'Bar', | ||
avatar: 'assets/images/default.png', | ||
lastfm: { | ||
username: '', | ||
currentSong: { | ||
artist: '', | ||
song: '', | ||
url: '', | ||
lastUpdated: Date.now() | ||
} | ||
}, | ||
linesPerMinute: 0.0, | ||
linesLastUpdated: Date.now(), | ||
admin: true | ||
}; | ||
var user = { | ||
username: 'mockUser', | ||
password: bcrypt.hashSync('mockPassword', 10), | ||
firstName: 'Foo', | ||
lastName: 'Bar', | ||
avatar: 'images/default.png', | ||
lastfm: { | ||
username: '', | ||
currentSong: { | ||
artist: '', | ||
song: '', | ||
url: '', | ||
lastUpdated: Date.now() | ||
} | ||
}, | ||
linesPerMinute: 0.0, | ||
linesLastUpdated: Date.now(), | ||
admin: false | ||
}; | ||
var userId = uuid.v4(); | ||
var team = { | ||
name: 'MockTeam', | ||
logo: 'http://i.imgur.com/BS2iaX2.jpg', | ||
users: [userId] | ||
}; | ||
db.insert(users, uuid.v4(), admin, function (error) { | ||
if (error) { | ||
console.log('Error inserting new admin.'.red); | ||
return done(error); | ||
} | ||
db.insert(users, userId, user, function (error) { | ||
if (error) { | ||
console.log('Error inserting new user.'.red); | ||
return done(error); | ||
} | ||
db.insert(teams, uuid.v4(), team, function (error) { | ||
if (error) { | ||
console.log('Error inserting new team.'.red); | ||
return done(error); | ||
} | ||
request(app).post('/api/user/login') | ||
.send({username: 'mockAdmin', password: 'mockPassword'}) | ||
.expect(200) | ||
.expect('Content-Type', /json/) | ||
.end(function(error, res) { | ||
if (error) { | ||
return done(error); | ||
} | ||
cookie = res.headers['set-cookie']; | ||
done(); | ||
}); | ||
}); | ||
}); | ||
}); | ||
}); | ||
|
||
afterEach(function (done) { | ||
db.searchUserByAll(function (error, reply) { | ||
if (error) { | ||
console.log('Error retrieving admins.'.red); | ||
return done(error); | ||
} | ||
var docs = []; | ||
for (var i = 0; i < reply.rows.length; i++) { | ||
var user = reply.rows[i].value; | ||
user._deleted = true; | ||
docs.push(user); | ||
} | ||
db.deleteAllUsers(docs, function(error, reply) { | ||
if (error) { | ||
console.log('Error deleting admins.'.red); | ||
return done(error); | ||
} | ||
db.compactUserDB(function (error, reply) { | ||
if (error) { | ||
console.log('Error compacting user database.'.red); | ||
return done(error); | ||
} | ||
db.searchTeamByAll(function (error, reply) { | ||
if (error) { | ||
console.log('Error retrieving teams.'.red); | ||
return done(error); | ||
} | ||
var docs = []; | ||
for (var i = 0; i < reply.rows.length; i++) { | ||
var team = reply.rows[i].value; | ||
team._deleted = true; | ||
docs.push(team); | ||
} | ||
db.deleteAllTeams(docs, function(error, reply) { | ||
if (error) { | ||
console.log('Error deleting teams.'.red); | ||
return done(error); | ||
} | ||
db.compactTeamDB(function (error, reply) { | ||
if (error) { | ||
console.log('Error compacting team database.'.red); | ||
return done(error); | ||
} | ||
done(); | ||
}); | ||
}); | ||
}); | ||
}); | ||
}); | ||
}); | ||
}); | ||
|
||
it('should successfully delete a member from the team.', function(done) { | ||
var memberReq = { | ||
teamname: 'MockTeam', | ||
username: 'mockUser' | ||
}; | ||
request(app) | ||
.post('/api/admin/deleteMember') | ||
.expect(200) | ||
.expect('Content-Type', /json/) | ||
.set('cookie', cookie) | ||
.send(memberReq) | ||
.end(function(err, res) { | ||
if (err) { | ||
return done(err); | ||
} | ||
assert.equal(res.body.message, 'Member deleted.') | ||
done(); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
'use strict'; | ||
|
||
var express = require('express'); | ||
var controller = require('./deleteMember.controller'); | ||
|
||
var router = express.Router(); | ||
|
||
router.post('/', controller.index); | ||
|
||
module.exports = router; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
'use strict'; | ||
|
||
var validator = require('validator'); | ||
var db = require('../../../components/database'); | ||
|
||
db.initialize('couchdb'); | ||
|
||
// Deletes a team based on team name. | ||
exports.index = function(req, res) { | ||
if(!req.session.username || !req.session.isAdmin) { | ||
return res.json(401, {message: 'Please sign in.'}); | ||
} | ||
var admin = req.session.username; | ||
var teamName = req.body.name; | ||
if(validator.isNull(teamName)) { | ||
return res.json(400, {message: 'Missing team name.'}); | ||
} | ||
if(teamName === 'Admins') { | ||
return res.json(400, {message: 'Cannot delete the admin team.'}); | ||
} | ||
db.deleteTeamByName(teamName, function (error, reply) { | ||
if(error) { | ||
console.log(error); | ||
return res.json(500, {message: 'Could not delete team, check logs.'}); | ||
} | ||
return res.json({message: 'Team deleted.'}); | ||
}); | ||
}; |
Oops, something went wrong.