Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

register new account #4

Merged
merged 8 commits into from
Jun 13, 2018
Merged
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
Binary file modified data/lexonomy.sqlite.template
Binary file not shown.
18 changes: 17 additions & 1 deletion website/adminscripts/updates.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,28 @@ const sqlite3 = require('sqlite3').verbose(); //https://www.npmjs.com/package/sq

fs.readFile(path.join(__dirname, "../siteconfig.json"), "utf8", function(err, content){
var siteconfig=JSON.parse(content);
var db=new sqlite3.Database(path.join(siteconfig.dataDir, "lexonomy.sqlite"), sqlite3.OPEN_READWRITE);
var db=new sqlite3.Database(path.join("../",siteconfig.dataDir, "lexonomy.sqlite"), sqlite3.OPEN_READWRITE);
db.run("CREATE TABLE IF NOT EXISTS recovery_tokens (email text, requestAddress text, token text, expiration datetime, usedDate datetime, usedAddress text)", {}, function(err) {
if (err) {
return console.error(err.message);
}
console.log("Table recovery_tokens created.");
});
db.run("CREATE TABLE IF NOT EXISTS register_tokens (email text, requestAddress text, token text, expiration datetime, usedDate datetime, usedAddress text)", {}, function(err) {
if (err) {
return console.error(err.message);
}
console.log("Table register_tokens created.");
});
db.run("ALTER TABLE users ADD COLUMN ske_id INTEGER", {}, function(err) {
if (err) {
return console.error(err.message);
}
});
db.run("ALTER TABLE users ADD COLUMN ske_username TEXT", {}, function(err) {
if (err) {
return console.error(err.message);
}
});
db.close();
});
5 changes: 5 additions & 0 deletions website/furniture/public.css
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,11 @@ div.usertop a:hover {color: #2c7fba; }
div.usertop > div.title {font-size: 1.5rem; padding-top: 10px;}
div.usertop > div.subtitle {margin-top: 10px; color: #666666;}

div.skelogin a {text-decoration: none; color: #09587e;}
div.skelogin a:hover {color: #2c7fba; }
div.skelogin {font-weight: bold; text-align: center; padding: 10px; margin: 20px 0px 0px 0px; border-radius: 4px; border: 1px solid #279FD2;}
div.skelogin img {vertical-align: middle;}

div.field {margin-top: 10px;}
div.field:first-child {margin-top: 0px;}
div.field div.label {font-weight: bold; margin: 0px 0px 5px 0px; color: #333333;}
Expand Down
61 changes: 58 additions & 3 deletions website/lexonomy.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const sqlite3 = require('sqlite3').verbose(); //https://www.npmjs.com/package/sq
const nodemailer = require('nodemailer');
ops.mailtransporter = nodemailer.createTransport(siteconfig.mailconfig);
const PORT=process.env.PORT||siteconfig.port||80;
const jwt = require("jsonwebtoken");

//Do this for each request:
app.use(function (req, res, next) {
Expand Down Expand Up @@ -60,7 +61,12 @@ app.get(siteconfig.rootPath+":dictID/en/", function(req, res){ res.redirect("/"+
app.get(siteconfig.rootPath, function(req, res){
ops.verifyLogin(req.cookies.email, req.cookies.sessionkey, function(user){
ops.getDictsByUser(user.email, function(dicts){
res.render("home.ejs", {siteconfig: siteconfig, user: user, dicts: dicts});
var error = null;
if (req.cookies.jwt_error) {
error = req.cookies.jwt_error;
res.clearCookie('jwt_error');
}
res.render("home.ejs", {siteconfig: siteconfig, user: user, dicts: dicts, error: error});
});
});
});
Expand Down Expand Up @@ -89,17 +95,25 @@ app.get(siteconfig.rootPath+"make/", function(req, res){
});
app.get(siteconfig.rootPath+"signup/", function(req, res){
ops.verifyLogin(req.cookies.email, req.cookies.sessionkey, function(user){
res.render("signup.ejs", {user: user, email: siteconfig.admins[0], siteconfig: siteconfig});
res.render("signup.ejs", {user: user, redirectUrl: siteconfig.baseUrl, siteconfig: siteconfig});
});
});
app.get(siteconfig.rootPath+"forgotpwd/", function(req, res){
ops.verifyLogin(req.cookies.email, req.cookies.sessionkey, function(user){
res.render("forgotpwd.ejs", {user: user, redirectUrl: siteconfig.baseUrl, siteconfig: siteconfig});
});
});
app.get(siteconfig.rootPath+"createaccount/:token/", function(req, res){
ops.verifyLogin(req.cookies.email, req.cookies.sessionkey, function(user){
ops.verifyToken(req.params.token, "register", function(valid){
var tokenValid = valid;
res.render("createaccount.ejs", {user: user, redirectUrl: siteconfig.baseUrl, siteconfig: siteconfig, token: req.params.token, tokenValid: tokenValid});
});
});
});
app.get(siteconfig.rootPath+"recoverpwd/:token/", function(req, res){
ops.verifyLogin(req.cookies.email, req.cookies.sessionkey, function(user){
ops.verifyToken(req.params.token, function(valid){
ops.verifyToken(req.params.token, "recovery", function(valid){
var tokenValid = valid;
res.render("recoverpwd.ejs", {user: user, redirectUrl: siteconfig.baseUrl, siteconfig: siteconfig, token: req.params.token, tokenValid: tokenValid});
});
Expand Down Expand Up @@ -145,12 +159,24 @@ app.post(siteconfig.rootPath+"changepwd.json", function(req, res){
}
});
});
app.post(siteconfig.rootPath+"signup.json", function(req, res){
var remoteip = req.connection.remoteAddress.replace('::ffff:','');
ops.sendSignupToken(req.body.email, remoteip, function(success){
res.json({success: success});
});
});
app.post(siteconfig.rootPath+"forgotpwd.json", function(req, res){
var remoteip = req.connection.remoteAddress.replace('::ffff:','');
ops.sendToken(req.body.email, remoteip, function(success){
res.json({success: success});
});
});
app.post(siteconfig.rootPath+"createaccount.json", function(req, res){
var remoteip = req.connection.remoteAddress.replace('::ffff:','');
ops.createAccount(req.body.token, req.body.password, remoteip, function(success){
res.json({success: success});
});
});
app.post(siteconfig.rootPath+"recoverpwd.json", function(req, res){
var remoteip = req.connection.remoteAddress.replace('::ffff:','');
ops.resetPwd(req.body.token, req.body.password, remoteip, function(success){
Expand Down Expand Up @@ -266,6 +292,35 @@ app.post(siteconfig.rootPath+"dicts/dictread.json", function(req, res){
});
});

//SKETCHENGINE LOGIN JSON endpoint:
app.get(siteconfig.rootPath+"skelogin.json/:token", function(req, res){
//var token = req.headers.authorization.replace('Bearer ', '');
var token = req.params.token;
var secret = siteconfig.sketchengineKey;
jwt.verify(token, secret, {audience:'lexonomy.eu'}, function(err, decoded) {
if (err == null) {
console.log(decoded)
ops.verifyLogin(req.cookies.email, req.cookies.sessionkey, function(user){
ops.processJWT(user, decoded, function(success, email, sessionkey){
if (success) {
res.cookie("email", email, {});
res.cookie("sessionkey", sessionkey, {});
res.redirect(siteconfig.baseUrl)
} else {
res.cookie("jwt_error", email, {});
res.redirect(siteconfig.baseUrl)
}
});
});
} else {
//JWT not verified, error
res.cookie("jwt_error",err.message,{})
res.redirect(siteconfig.baseUrl)
}
});
});


//ONE-CLICK UI and JSON endpoints:
app.get(siteconfig.rootPath+"oneclick/", function(req, res){
ops.verifyLogin(req.cookies.email, req.cookies.sessionkey, function(user){
Expand Down
19 changes: 19 additions & 0 deletions website/libs/screenful/screenful-createaccount.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#middlebox {max-width: 600px; padding: 40px 30px; min-height: 100px; margin: 75px auto 50px auto; border: 1px solid rgb(38, 122, 181); background-color: #ffffff; border-radius: 4px; box-shadow: 0px 0px 4px #666666; }

#middlebox div.field {margin-top: 30px;}
#middlebox div.field:first-child {margin-top: 0px;}
#middlebox div.field div.label {font-weight: bold; margin: 0px 0px 5px 0px; color: #333333;}
#middlebox div.field input.textbox {box-sizing: border-box; width: 100%; margin: 0px 0px 0px 0px; font: inherit; border-width: 0px; border-radius: 4px; background-color: #ffffff; box-shadow: inset 0px 0px 2px #666666; padding: 9px 8px; min-height: 1.3em; display: inline-block; vertical-align: middle;}
#middlebox div.field input.button {box-sizing: border-box; margin: 0px 0px 0px 0px; font: inherit; border-width: 0px; border-radius: 4px; background-color: #ffffff; box-shadow: 0px 0px 2px #666666; padding: 9px 30px; min-height: 1.3em; display: inline-block; vertical-align: middle; color: #267ab5; cursor: pointer;}
#middlebox div.field input.button:hover {color: #4698d1;}
#middlebox div.field button {box-sizing: border-box; margin: 0px 0px 0px 0px; font: inherit; border-width: 0px; border-radius: 4px; background-color: #ffffff; box-shadow: 0px 0px 2px #666666; padding: 9px 30px; min-height: 1.3em; display: inline-block; vertical-align: middle; color: #267ab5; cursor: pointer;}
#middlebox div.field button:hover {color: #4698d1;}

#middlebox div.field.submit {text-align: center;}
#middlebox div.field.submit input.button {font-weight: bold;}
#middlebox div.field.submit button {font-weight: bold;}

#middlebox div.bigerror {background-color: #ffcdcc; color: #99004d; font-weight: bold; text-align: center; padding: 40px; margin: -40px -30px 0px -30px; text-shadow: 1px 1px 0px #eeeeee;}
#middlebox div.error {background-color: #ffcdcc; color: #99004d; font-weight: bold; text-align: center; padding: 40px; margin: 30px -30px -40px -30px; text-shadow: 1px 1px 0px #eeeeee;}

#middlebox div.two div.message {text-align: center; margin: 20px 0px 30px 0px;}
47 changes: 47 additions & 0 deletions website/libs/screenful/screenful-createaccount.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
Screenful.CreateAccount={
start: function(){
Screenful.createEnvelope(true);
$("#envelope").html("<form id='middlebox'><div class='one'></div><div class='two' style='display: none'></div></form>");
if (Screenful.CreateAccount.tokenValid) {
$("#middlebox .one").append("<div class='message'>"+Screenful.Loc.setPwdMsg+"</div>");
$("#middlebox .one").append("<div class='field password'><div class='label'>"+Screenful.Loc.newPassword+"</div><input class='textbox' type='password'/></div>");
$("#middlebox .one").append("<div class='field submit'><input class='button' type='submit' value='"+Screenful.Loc.change+"'/></div>");
$("#middlebox .one").append("<div class='error' style='display: none'></div>");
$("#middlebox .two").append("<div class='message'>"+Screenful.Loc.accountCreated+"</div>");
$("#middlebox .two").append("<div class='field submit'><button class='return'>"+Screenful.Loc.ok+"</button></div>");
} else {
$("#middlebox .one").append("<div class='bigerror'>"+Screenful.Loc.invalidSignupToken+"</div>");
$("#middlebox .one").append("<div class='field submit'><button class='return'>"+Screenful.Loc.ok+"</button></div>");
}

$("#middlebox div.field.password input").focus();

$("#middlebox").on("submit", function(e){
var password=$("#middlebox div.field.password input").val();
if(password=="") { $("#middlebox .error").html(Screenful.Loc.passwordEmpty).show(); return false; }
if(password.length<6) { $("#middlebox .error").html(Screenful.Loc.passwordShort).show(); return false; }
if($.trim(password)!=password) { $("#middlebox .error").html(Screenful.Loc.passwordWhitespace).show(); return false; }
Screenful.CreateAccount.go(password);
return false;
});

$("#middlebox button.return").on("click", function(e){
window.location=Screenful.CreateAccount.returnUrl;
return false;
});
},

go: function(password){
$.ajax({url: Screenful.CreateAccount.actionUrl, dataType: "json", method: "POST", data: {password: password, token: Screenful.CreateAccount.token}}).done(function(data){
if(data.success) {
$("#middlebox .one").hide();
$("#middlebox .two").show()
} else {
$("#middlebox .error").html(Screenful.Loc.signupAccountExists).show();
}
});
},


};
$(window).ready(Screenful.CreateAccount.start);
2 changes: 1 addition & 1 deletion website/libs/screenful/screenful-forgotpwd.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Screenful.ForgotPwd={
$("#middlebox .one").append("<div class='field submit'><input class='button' type='submit' value='"+Screenful.Loc.recoverPwd+"'/></div>");
$("#middlebox .two").append("<div class='message'>"+Screenful.Loc.tokenSent+"</div>");
$("#middlebox .two").append("<div class='field submit'><button class='return'>"+Screenful.Loc.ok+"</button></div>");
$("#middlebox").append("<div class='error' style='display: none'>"+Screenful.Loc.forgotPwdError+"</div>");
$("#middlebox").append("<div class='error' style='display: none'>"+Screenful.Loc.badEmailError+"</div>");

$("#middlebox div.field.email input").focus();
$("#middlebox").on("submit", function(e){
Expand Down
9 changes: 8 additions & 1 deletion website/libs/screenful/screenful-loc-cs.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,20 @@ Screenful.Loc={
invalidSourceCode: "Neplatný zdrojový kód",
unsavedConfirm: "Más neuložené změny. Opravdu o ně chceš přijít?",
doItLater: "Udělej to jindy",
badEmailError: "Nesprávná e-mailová adresa.",

forgotPwdEmail: "Zapomněli-li jste svoje heslo, zadejte tady svoji e-mailovou adresu a my vám pošleme instrukce, jak si získat nové heslo.",
recoverPwd: "Chci nové heslo",
forgotPwdError: "Nesprávná e-mailová adresa.",
tokenSent: "Poslali jsme vám instrukce, jak si získat nové heslo.",
recoverPwdMsg: "Nyní si můžete změnit heslo.",
changePwdMsg: "Tady si můžete změnit heslo.",
invalidToken: "Tento odkaz je neplatný. Možná už vypršel, nebo byl už použit.",

signupInfoEmail: "To get a new account, enter your e-mail address and we will send you instructions.",
signupButton: "Create new account",
signupTokenSent: "We have sent you an e-mail with instructions on how to reset your password.",
invalidSignupToken: "This signup link is invalid. It may have expired or has been used before.",
setPwdMsg: "Please, set your password now.",
accountCreated: "We have created your account. You may now log-in with your e-mail and password.",
signupAccountExists: "You are trying to create account for e-mail that is already existing. Did you <a href='/forgotpwd/'>forget your password?</a>",
};
9 changes: 8 additions & 1 deletion website/libs/screenful/screenful-loc-en.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,20 @@ Screenful.Loc={
invalidSourceCode: "Invalid source code",
unsavedConfirm: "You have unsaved changes. Are you sure you want to lose them?",
doItLater: "Do it later",
badEmailError: "Incorrect e-mail address.",

forgotPwdEmail: "If you have forgotten your password, enter your e-mail address and we will send you instructions on how to create a new one.",
recoverPwd: "Get a new password",
forgotPwdError: "Incorrect e-mail address.",
tokenSent: "We have sent you an e-mail with instructions on how to reset your password.",
recoverPwdMsg: "You can change your password now.",
changePwdMsg: "You can change your password here.",
invalidToken: "This password reset link is invalid. It may have expired or has been used before.",

signupInfoEmail: "To get a new account, enter your e-mail address and we will send you instructions.",
signupButton: "Create new account",
signupTokenSent: "We have sent you an e-mail with instructions on how to reset your password.",
invalidSignupToken: "This signup link is invalid. It may have expired or has been used before.",
setPwdMsg: "Please, set your password now.",
accountCreated: "We have created your account. You may now log-in with your e-mail and password.",
signupAccountExists: "You are trying to create account for e-mail that is already existing. Did you <a href='/forgotpwd/'>forget your password?</a>",
};
9 changes: 8 additions & 1 deletion website/libs/screenful/screenful-loc-ga.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,20 @@ Screenful.Loc={
invalidSourceCode: "Cód foinseach neamhbhailí",
unsavedConfirm: "Tá athruithe déanta agat nach bhfuil sábháilte go fóill. An cuma leat go gcaillfear iad?",
doItLater: "Déan níos déanaí é",
badEmailError: "Seoladh ríomhphoist mícheart.",

forgotPwdEmail: "Má tá do phasfhocal dearmadta agat, cuir do sheoladh ríomhphoist isteach anseo. Cuirfidh muidne treoracha chugat maidir leis an dóigh chun do phasfhocal a athrú.",
recoverPwd: "Faigh pasfhocal nua",
forgotPwdError: "Seoladh ríomhphoist mícheart.",
tokenSent: "Tá treoracha seolta againn chugat maidir leis an dóigh chun do phasfhocal a athrú.",
recoverPwdMsg: "Is féidir leat do phasfhocal a athrú anois.",
changePwdMsg: "Is féidir leat do phasfhocal a athrú anseo.",
invalidToken: "Níl an nasc seo bailí. Seans go bhfuil sé imithe in éag, nó b'fhéidir gur baineadh úsáid as cheana.",

signupInfoEmail: "To get a new account, enter your e-mail address and we will send you instructions.",
signupButton: "Create new account",
signupTokenSent: "We have sent you an e-mail with instructions on how to reset your password.",
invalidSignupToken: "This signup link is invalid. It may have expired or has been used before.",
setPwdMsg: "Please, set your password now.",
accountCreated: "We have created your account. You may now log-in with your e-mail and password.",
signupAccountExists: "You are trying to create account for e-mail that is already existing. Did you <a href='/forgotpwd/'>forget your password?</a>",
};
18 changes: 14 additions & 4 deletions website/libs/screenful/screenful-signup.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
#middlebox {max-width: 600px; padding: 40px 30px; min-height: 100px; margin: 75px auto 50px auto; border: 1px solid rgb(38, 122, 181); background-color: #ffffff; border-radius: 4px; box-shadow: 0px 0px 4px #666666; }

#middlebox div.message {text-align: center; margin: 50px 0px 0px 0px;}
#middlebox div.url {text-align: center; margin: 10px 0px 50px 0px;}
#middlebox div.url a {text-decoration: none; color: #004f9b;}
#middlebox div.url a:hover {color: #006ed7;}
#middlebox div.field {margin-top: 30px;}
#middlebox div.field:first-child {margin-top: 0px;}
#middlebox div.field div.label {font-weight: bold; margin: 0px 0px 5px 0px; color: #333333;}
#middlebox div.field input.textbox {box-sizing: border-box; width: 100%; margin: 0px 0px 0px 0px; font: inherit; border-width: 0px; border-radius: 4px; background-color: #ffffff; box-shadow: inset 0px 0px 2px #666666; padding: 9px 8px; min-height: 1.3em; display: inline-block; vertical-align: middle;}
#middlebox div.field input.button {box-sizing: border-box; margin: 0px 0px 0px 0px; font: inherit; border-width: 0px; border-radius: 4px; background-color: #ffffff; box-shadow: 0px 0px 2px #666666; padding: 9px 30px; min-height: 1.3em; display: inline-block; vertical-align: middle; color: #267ab5; cursor: pointer;}
#middlebox div.field input.button:hover {color: #4698d1;}
#middlebox div.field button {box-sizing: border-box; margin: 0px 0px 0px 0px; font: inherit; border-width: 0px; border-radius: 4px; background-color: #ffffff; box-shadow: 0px 0px 2px #666666; padding: 9px 30px; min-height: 1.3em; display: inline-block; vertical-align: middle; color: #267ab5; cursor: pointer;}
#middlebox div.field button:hover {color: #4698d1;}

#middlebox div.field.submit {text-align: center;}
#middlebox div.field.submit input.button {font-weight: bold;}
#middlebox div.field.submit button {font-weight: bold;}

#middlebox div.error {background-color: #ffcdcc; color: #99004d; font-weight: bold; text-align: center; padding: 40px; margin: 30px -30px -40px -30px; text-shadow: 1px 1px 0px #eeeeee;}
Loading