2020-07-09 23:12:17 +10:00
|
|
|
/**
|
|
|
|
* This handles user registration.
|
|
|
|
*
|
|
|
|
* The form must have the following fields:
|
2024-01-01 17:03:25 +11:00
|
|
|
* + USER The user's user id to login
|
2020-07-09 23:12:17 +10:00
|
|
|
* + EMAIL The users's email address - to receive tokens
|
|
|
|
* + FULLNAME The user's full name
|
|
|
|
* + PASS The users's preferred password
|
|
|
|
* + CITY The user's city
|
|
|
|
* + COUNTRY The user's country - 3 letter ISO code
|
|
|
|
* + PCODE THe user's postal code
|
|
|
|
*/
|
|
|
|
|
2020-07-13 23:08:37 +10:00
|
|
|
var CONTROL_REGISTER = '1';
|
2020-07-08 12:48:13 +10:00
|
|
|
var EMAIL_REGEX = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
2020-07-09 23:12:17 +10:00
|
|
|
var cValChars='ACDEFHJKLMNPQRTUVWXY23456789!@$%&';
|
2020-07-08 12:48:13 +10:00
|
|
|
|
2020-07-09 23:12:17 +10:00
|
|
|
log(LOG_DEBUG,'+ Control REGISTER loaded');
|
2020-07-08 12:48:13 +10:00
|
|
|
|
2024-01-01 17:03:25 +11:00
|
|
|
function register(session) {
|
2020-07-08 12:48:13 +10:00
|
|
|
var code = '';
|
2020-07-09 23:12:17 +10:00
|
|
|
var complete = false;
|
2022-05-09 22:24:28 +10:00
|
|
|
var processed = false;
|
2024-01-01 17:03:25 +11:00
|
|
|
var ready = false;
|
|
|
|
|
|
|
|
function init(session) {
|
|
|
|
log(LOG_DEBUG,' - Register init()');
|
|
|
|
ready = true;
|
|
|
|
}
|
2020-07-08 12:48:13 +10:00
|
|
|
|
2020-07-13 23:08:37 +10:00
|
|
|
// Called before processing for a field
|
|
|
|
Object.defineProperty(this, 'getName', {
|
|
|
|
get: function () {
|
|
|
|
return 'Control-Registration';
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
Object.defineProperty(this, 'isComplete', {
|
|
|
|
get: function () {
|
2022-05-09 22:24:28 +10:00
|
|
|
return complete && processed;
|
2020-07-13 23:08:37 +10:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2024-01-01 17:03:25 +11:00
|
|
|
this.handle = function(read) {
|
2020-07-18 23:48:51 +10:00
|
|
|
// Dont allow existing users to re-register
|
|
|
|
if (user.number) {
|
2024-01-01 17:03:25 +11:00
|
|
|
session.baselineSend('ALREADY_MEMBER',false);
|
|
|
|
return (read === '*') ? read : '';
|
2020-07-18 23:48:51 +10:00
|
|
|
}
|
|
|
|
|
2020-07-08 12:48:13 +10:00
|
|
|
log(LOG_DEBUG,'Control REGISTER handle() start. ('+read+')');
|
2022-05-09 22:24:28 +10:00
|
|
|
if (cf === undefined) {
|
|
|
|
log(LOG_DEBUG,' - CF not defined, returning');
|
|
|
|
return read;
|
|
|
|
}
|
|
|
|
|
2022-12-09 17:19:33 +11:00
|
|
|
log(LOG_DEBUG,'- Field '+cf.name+'('+JSON.stringify(cf)+')');
|
2020-07-08 12:48:13 +10:00
|
|
|
|
2022-12-09 17:19:33 +11:00
|
|
|
if ((cf.name === 'TOKEN') && (read === '#' || read === "\r")) {
|
|
|
|
if (cf.value === code) {
|
2020-07-09 23:12:17 +10:00
|
|
|
complete = true;
|
|
|
|
|
|
|
|
} else {
|
2024-01-01 17:03:25 +11:00
|
|
|
session.baselineSend('INVALID_CODE',false);
|
|
|
|
session.cursorOn(cf.c+cf.value.length,cf.r);
|
|
|
|
session.attr(cf.attribute);
|
2020-07-08 12:48:13 +10:00
|
|
|
read = '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-09 17:19:33 +11:00
|
|
|
log(LOG_DEBUG,'- Field Value ['+cf.value+'] ('+code+')');
|
2020-07-08 12:48:13 +10:00
|
|
|
|
|
|
|
return read;
|
|
|
|
}
|
|
|
|
|
2024-01-01 17:03:25 +11:00
|
|
|
this.prefield = function() {
|
2022-12-09 17:19:33 +11:00
|
|
|
log(LOG_DEBUG,'- prefield: Field '+cf.name+'('+JSON.stringify(cf)+')');
|
2020-07-08 12:48:13 +10:00
|
|
|
|
2024-01-01 17:03:25 +11:00
|
|
|
// Make sure we got an email
|
2022-12-09 17:19:33 +11:00
|
|
|
if (cf.name === 'TOKEN') {
|
2020-07-09 23:12:17 +10:00
|
|
|
if (! code.length) {
|
2022-12-09 17:19:33 +11:00
|
|
|
log(LOG_DEBUG,' - BASELINE '+cf.name+'('+JSON.stringify(cf)+')');
|
2024-01-01 17:03:25 +11:00
|
|
|
session.baselineSend('TOKEN_EMAIL',false);
|
2020-07-09 23:12:17 +10:00
|
|
|
|
2024-01-01 17:03:25 +11:00
|
|
|
var email = session.fieldValue('EMAIL');
|
|
|
|
var uid = session.fieldValue('USER');
|
|
|
|
var name = session.fieldValue('FULLNAME');
|
2020-07-09 23:12:17 +10:00
|
|
|
|
2020-07-18 23:48:51 +10:00
|
|
|
log(LOG_DEBUG,' - VALIDATE EMAIL TO ('+JSON.stringify(system.matchuserdata(U_NETMAIL,email))+')');
|
2020-07-13 23:08:37 +10:00
|
|
|
|
2020-07-09 23:12:17 +10:00
|
|
|
// Validate Email hasnt been used
|
2020-07-13 23:08:37 +10:00
|
|
|
// Validate USER_ID hasnt been used
|
2020-07-09 23:12:17 +10:00
|
|
|
if ((email.indexOf('@') === -1) || ! EMAIL_REGEX.test(email) || (system.matchuserdata(U_NETMAIL,email) !== 0)) {
|
2024-01-01 17:03:25 +11:00
|
|
|
session.baselineSend('INVALID_EMAIL',false);
|
2020-07-09 23:12:17 +10:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-07-18 23:48:51 +10:00
|
|
|
if (! system.check_name(uid)) {
|
|
|
|
log(LOG_DEBUG,' - Cannot use user_id: ('+uid+')');
|
2024-01-01 17:03:25 +11:00
|
|
|
session.baselineSend('INVALID_UID',false);
|
2020-07-09 23:12:17 +10:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var msgbase = new MsgBase('mail');
|
2020-07-13 23:08:37 +10:00
|
|
|
for (var i=0;i<6;i++) {
|
|
|
|
code += cValChars.substr(parseInt(Math.random()*cValChars.length),1);
|
|
|
|
}
|
2020-07-09 23:12:17 +10:00
|
|
|
|
|
|
|
var hdrs = new Object();
|
2024-01-01 17:03:25 +11:00
|
|
|
hdrs.to = name;
|
|
|
|
hdrs.to_net_type = netaddr_type(email);
|
|
|
|
|
2022-04-16 15:36:17 +10:00
|
|
|
if (hdrs.to_net_type !== NET_NONE) {
|
2020-07-09 23:12:17 +10:00
|
|
|
hdrs.to_net_addr = email;
|
|
|
|
} else {
|
2024-01-01 17:03:25 +11:00
|
|
|
session.baselineSend('CANNOT_SEND_TOKEN',false);
|
2020-07-09 23:12:17 +10:00
|
|
|
return;
|
|
|
|
}
|
2024-01-01 17:03:25 +11:00
|
|
|
|
|
|
|
hdrs.from = system.name;
|
|
|
|
hdrs.from_net_addr = 'sysop@'+system.inet_addr;
|
|
|
|
hdrs.from_net_type = NET_INTERNET;
|
|
|
|
hdrs.subject = 'Registration TOKEN for '+system.name;
|
2020-07-09 23:12:17 +10:00
|
|
|
|
2022-04-16 15:36:17 +10:00
|
|
|
if (msgbase.open !== undefined && msgbase.open() === false) {
|
2020-07-09 23:12:17 +10:00
|
|
|
console.print("\r\n\1n\1h\1rERROR: \1y" + msgbase.last_error + "\1n \r\n");
|
|
|
|
console.pause();
|
|
|
|
msgbase.close();
|
|
|
|
bbs.hangup();
|
2020-07-13 23:08:37 +10:00
|
|
|
|
2020-07-09 23:12:17 +10:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var msg="CODE: " + code + "\n\n";
|
|
|
|
msg += 'Please use the above code to validate your login to '+system.name+'.';
|
|
|
|
|
|
|
|
if (! msgbase.save_msg(hdrs,msg)) {
|
|
|
|
console.print("\r\n\1n\1h\1rERROR: \1y" + msgbase.last_error + "\1n \r\n");
|
|
|
|
console.pause();
|
|
|
|
msgbase.close();
|
|
|
|
bbs.hangup();
|
|
|
|
return;
|
|
|
|
}
|
2020-07-13 23:08:37 +10:00
|
|
|
|
2020-07-09 23:12:17 +10:00
|
|
|
msgbase.close();
|
2020-07-08 12:48:13 +10:00
|
|
|
}
|
|
|
|
|
2024-01-01 17:03:25 +11:00
|
|
|
session.baselineSend('TOKEN_SENT',false);
|
2020-07-09 23:12:17 +10:00
|
|
|
log(LOG_DEBUG,'SENT EMAIL TOKEN ('+code+') ['+JSON.stringify(hdrs)+']');
|
|
|
|
}
|
|
|
|
}
|
2020-07-08 12:48:13 +10:00
|
|
|
|
2024-01-01 17:03:25 +11:00
|
|
|
this.process = function() {
|
|
|
|
log(LOG_DEBUG,'Creating user: ['+session.fieldValue('EMAIL')+'] ['+session.fieldValue('USER')+']');
|
2020-07-08 12:48:13 +10:00
|
|
|
|
2020-07-09 23:12:17 +10:00
|
|
|
try {
|
2024-01-01 17:03:25 +11:00
|
|
|
var newuser = system.new_user(session.fieldValue('USER'));
|
2020-07-08 12:48:13 +10:00
|
|
|
|
2020-07-09 23:12:17 +10:00
|
|
|
} catch (e) {
|
2024-01-01 17:03:25 +11:00
|
|
|
session.baselineSend('USER_EXISTS',false);
|
2020-07-09 23:12:17 +10:00
|
|
|
log(LOG_ERROR,"New user couldn't be created (user created while signing up)");
|
|
|
|
log(LOG_ERROR,JSON.stringify(e));
|
2022-05-09 22:24:28 +10:00
|
|
|
processed = true;
|
|
|
|
return this.isComplete;
|
2020-07-09 23:12:17 +10:00
|
|
|
}
|
2020-07-08 12:48:13 +10:00
|
|
|
|
2020-07-09 23:12:17 +10:00
|
|
|
if (typeof newuser === 'number') {
|
2024-01-01 17:03:25 +11:00
|
|
|
session.baselineSend('USER_CREATE_ERROR',false);
|
2020-07-09 23:12:17 +10:00
|
|
|
log(LOG_ERROR,"New user couldn't be created (error code "+newuser+")");
|
2022-05-09 22:24:28 +10:00
|
|
|
processed = true;
|
|
|
|
return this.isComplete;
|
2020-07-09 23:12:17 +10:00
|
|
|
}
|
2020-07-08 12:48:13 +10:00
|
|
|
|
2020-07-09 23:12:17 +10:00
|
|
|
newuser.security.password = '';
|
|
|
|
if (bbs.login(newuser.alias,null)) {
|
|
|
|
user.number = newuser.number;
|
2024-01-01 17:03:25 +11:00
|
|
|
user.security.password = session.fieldValue('PASS');
|
|
|
|
user.name = session.fieldValue('FULLNAME');
|
|
|
|
user.handle = session.fieldValue('USER');
|
|
|
|
user.location = session.fieldValue('CITY')+', '+session.fieldValue('COUNTRY');
|
|
|
|
user.zipcode = session.fieldValue('PCODE');
|
|
|
|
user.netmail = session.fieldValue('EMAIL');
|
2022-12-09 17:19:33 +11:00
|
|
|
user.comment = 'ANSItex registered user';
|
2020-07-09 23:12:17 +10:00
|
|
|
bbs.user_sync();
|
|
|
|
bbs.logon();
|
2020-07-13 23:08:37 +10:00
|
|
|
|
2020-07-09 23:12:17 +10:00
|
|
|
log(LOG_INFO,"Created user record #"+user.number+": "+user.alias);
|
|
|
|
|
|
|
|
action = ACTION_EXIT;
|
2022-05-09 22:24:28 +10:00
|
|
|
processed = true;
|
|
|
|
return this.isComplete;
|
2020-07-09 23:12:17 +10:00
|
|
|
|
|
|
|
} else {
|
2024-01-01 17:03:25 +11:00
|
|
|
session.baselineSend('LOGIN_ERROR',false);
|
2020-07-09 23:12:17 +10:00
|
|
|
log(LOG_INFO,"bbs.login() failed");
|
|
|
|
user.comment = 'Initial login failed!';
|
|
|
|
newuser.settings |= USER_DELETED;
|
|
|
|
delete newuser;
|
2022-05-09 22:24:28 +10:00
|
|
|
processed = true;
|
2020-07-13 23:08:37 +10:00
|
|
|
|
2022-05-09 22:24:28 +10:00
|
|
|
return this.isComplete;
|
2020-07-08 12:48:13 +10:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-01 17:03:25 +11:00
|
|
|
// @todo Doesnt appear to be used
|
|
|
|
this.ready = function() {
|
|
|
|
log(LOG_DEBUG,'register:ready = '+JSON.stringify(ready));
|
|
|
|
return ready;
|
|
|
|
}
|
|
|
|
|
|
|
|
init.apply(this,arguments);
|
|
|
|
}
|