Added a top bar for controlling logging in and logging out.

This commit is contained in:
Bram van der Veen 2015-07-21 17:01:45 +02:00
parent a7c1c87859
commit abd175136a
8 changed files with 83 additions and 39 deletions

13
auth.js
View file

@ -4,6 +4,7 @@ var https = require('socks5-https-client');
var crypt = require('./crypt'); var crypt = require('./crypt');
var config = require('./configuration'); var config = require('./configuration');
var lookup = require('./lookup');
function get_login(username, password, callback) { function get_login(username, password, callback) {
var login = qs.stringify({ var login = qs.stringify({
@ -59,21 +60,23 @@ function logout(req, res) {
function is(req, res, next) { function is(req, res, next) {
var cookies = qs.parse(req.headers.cookie.replace(/\s/g, ''), ';', '='); var cookies = qs.parse(req.headers.cookie.replace(/\s/g, ''), ';', '=');
console.log(cookies);
if (!cookies.username || !cookies.password) {next(); return;} if (!cookies.username || !cookies.password) {next(); return;}
var username = crypt.decrypt(cookies.username), var username = crypt.decrypt(cookies.username),
password = crypt.decrypt(cookies.password); password = crypt.decrypt(cookies.password);
console.log(username, password);
get_login(username, password, function (legit) { get_login(username, password, function (legit) {
if (legit) { if (legit) {
console.log('Username and password were legit'); req.query.name = username;
req.headers.username = username; lookup.api(req, function (database_entry) {
req.headers.user = database_entry.data[0];
next();
});
// req.headers.password = password; // req.headers.password = password;
} }
else {
next(); next();
}
}); });
} }

View file

@ -23,8 +23,8 @@ module.exports = function () {
], ],
'school_id' : 934, 'school_id' : 934,
'links' : { 'links' : {
'Login': ['#', '#96AA48'], 'Login': ['http://roosters5.gepro-osi.nl/roosters/rooster.php?school=INSERTYOURSCHOOL_ID', '#CCCC99'],
'Magister': ['http://werkman.magister.net', '#0C5489'], 'Magister': ['http://INSERTYOURMAGISTER.magister.net', '#0C5489'],
'Mail': ['https://login.microsoftonline.com/', '#C41824'] 'Mail': ['https://login.microsoftonline.com/', '#C41824']
}, },
'spider_timeout' : 1000 'spider_timeout' : 1000

View file

@ -12,8 +12,7 @@ function get(req, res, next, search) {
easter(search) ? search = easter(search).name : null; //Check if there are any eastereggs matching the search query. easter(search) ? search = easter(search).name : null; //Check if there are any eastereggs matching the search query.
search = new RegExp(search, 'i'); //Make regular exeption for ignoring the case (Bram vs BRAM) should return the same. search = new RegExp(search, 'i'); //Make regular exeption for ignoring the case (Bram vs BRAM) should return the same.
index.find({$or : [{id : search}, {name : search}, {first_name : search}, {last_name : search}, {username: search}]}).toArray(function (err, database_entry) {
index.find({$or : [{id : search}, {name : search}, {first_name : search}, {last_name : search}]}).toArray(function (err, database_entry) {
if (err) console.warn(err); if (err) console.warn(err);
if (database_entry.length == 1) { if (database_entry.length == 1) {
@ -35,7 +34,7 @@ function api(req, callback) {
var index = database.collection('index'); var index = database.collection('index');
var query = RegExp(req.query.name, 'i'); var query = RegExp(req.query.name, 'i');
index.find({$or : [{id : query}, {name : query}, {first_name : query}, {last_name : query}]}).toArray(function (err, database_entry) { index.find({$or : [{id : query}, {name : query}, {first_name : query}, {last_name : query}, {username: query}]}).toArray(function (err, database_entry) {
if (err) callback({'error': err}); if (err) callback({'error': err});
else { else {
for (entry of database_entry) {entry.url = make_url(req, entry)} for (entry of database_entry) {entry.url = make_url(req, entry)}

View file

@ -15,19 +15,24 @@ html
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-46880644-1', 'werkmanrooster.nl');ga('send', 'pageview');ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'; (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-46880644-1', 'werkmanrooster.nl');ga('send', 'pageview');ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
body body
div.bar div.bar
if headers.user
ul.left
li Hey, #{headers.user.first_name}
li |
li
a(href="/rooster/#{headers.user.id}") Jouw Rooster
li
a(href=headers.user.url, target="_blank") Andere roostersite
//- div.motd ul.right
//- p li
//- | Hey jongens, het is weer tijd voor een nieuwe versie van Werkmanrooster. <br> a(href="/logout") Logout
//- | Hij is nog niet helemaal af maar het komt allemaal bij elkaar. <br>
//- | De volgende dingen zijn niet meer te doen : <br>
//- | * Inloggen <br> else
//- | * Cijfers bekijken <br> ul
//- | * Instellingen veranderen <br> li
//- | * Useless button <br> a(href="/login") Login
//- | Als je wil, vul je een <a href="https://docs.google.com/forms/d/1MBf7ncF8BQc4f7B8EfXZyuvRdIhLYmhgGB2vcdb02gw/viewform?c=0&w=1">enquette</a> waarin je feedback kan achterlaten. <br>
//- | Alvast bedankt! <br>
//- | -B
h1#title(class=url == '/' ? 'big' : '') Werkmanrooster h1#title(class=url == '/' ? 'big' : '') Werkmanrooster
span V span V

View file

@ -1,14 +1,13 @@
//- login.jade //- login.jade
include header include header
.login
form(action="/login", method="post") form(action="/login", method="post")
div div
label Username label Gebruikersnaam
input(type="text", name="username") input(type="text", name="username")
div div
label Password label Wachtwoord
input(type="password", name="password") input(type="password", name="password")
div div
input(type="submit", value="Log In") input(type="submit", value="Log In").button-primary
div=user

View file

@ -77,10 +77,40 @@ input.search {
} }
.bar { .bar {
height: 10px; height: 20px;
width: 100%; width: 100%;
background-color: #96aa48; background-color: #96aa48;
margin-bottom: 50px; margin-bottom: 50px;
ul {
list-style: none;
display: inline;
&.right li {
float: right;
}
li {
display: inline-block;
margin: 0 7px;
font-size: 13px;
color: #FFF;
a {
text-decoration: none;
color: inherit;
&:hover {
color: #DDD;
}
&:active {
color: #CCC;
}
}
}
}
} }
h1#title { h1#title {
@ -287,4 +317,10 @@ div.schedule {
} }
} }
.login {
margin: 0 auto;
width: 200px;
text-align: center;
}
@import "mobile"; @import "mobile";

4
web.js
View file

@ -31,10 +31,11 @@ app.get('/', auth.is, function (req, res) {
}); });
app.get('/login', function (req, res) { app.get('/login', function (req, res) {
res.render('login'); res.render('login', req);
}); });
app.post('/login', auth.login); app.post('/login', auth.login);
app.get('/logout', auth.logout);
app.get('/api/:api', function (req, res, next) { next(); }); app.get('/api/:api', function (req, res, next) { next(); });
app.param('api', api); app.param('api', api);
@ -43,6 +44,7 @@ app.get('/rooster/:search', function (req, res, next) {
next(); next();
}); });
app.param('search', auth.is);
app.param('search', lookup.get); app.param('search', lookup.get);
app.param('search', schedule.get); app.param('search', schedule.get);