/* (1) Initialise ---------------------------------------------------------*/ /* (1) Default data structure */ gs.set('register', { // fields mail: { model: '', timeout: '', error: '', validate: (_mail) => true // validate: (_mail) => /^[\w\.]+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/i.test(_mail) }, username: { model: '', timeout: '', error: '', validate: (_username) => /^[a-z0-9_-]{3,20}$/i.test(_username) }, password: { model: '', timeout: '', error: '', validate: (_password) => /^[^<>\/\\]{8,50}$/.test(_password) }, // functions func: { print_err(_field, _message, _duration){}, register(){}, press_enter(){} } }); /* (2) Manage error messages * * @_field Field to print errors to * @_message Error message to print * @_duration Durations (sec) for the message to be displayed * ---------------------------------------------------------*/ gs.get.register.func.print_err = function(_field, _message='error', _duration=null){ /* (1) Fail: invalid _field */ if( typeof _field !== 'string' || this[_field] == null ) return false; /* (2) Fail: invalid _message */ if( typeof _message !== 'string' ) return false; /* (3) Fail: invalid _message */ if( isNaN(_duration) ) return false; /* (4) Clear timeout if exists */ !isNaN(this[_field].err_to) && clearTimeout(this[_field].err_to); /* (5) Display error */ this[_field].error = _message; /* (6) No timeout if _duration if null */ if( _duration === null ) return true; /* (7) Setup Timeout */ this[_field].err_to = setTimeout( function(){ this.error = ''; }.bind(this[_field]), _duration*1000); return true; }.bind(gs.get.register); /* (3) Login attempt * ---------------------------------------------------------*/ gs.get.register.func.register = function(){ /* (1) Cache fields' values */ let mail = this.mail.model; let username = this.username.model; let password = this.password.model; /* (2) Manage errors */ let errors = false; // mail error if( !this.mail.validate(mail) ){ errors = true; this.func.print_err('mail', 'This field is required'); }else this.func.print_err('mail', '', 0); // username error if( !this.username.validate(username) ){ errors = true; this.func.print_err('username', '3 characters are required: letters, numbers, dot'); }else this.func.print_err('username', '', 0); // password error if( !this.password.validate(password) ){ errors = true; this.func.print_err('password', '8 characters are required'); }else this.func.print_err('password', '', 0); // if errors -> fail if( errors ) return false; /* (3) API bindings */ api.call('POST /user', { username: username, password: password }, function(rs){ // manage error if( rs.error !== 0 || rs.uid == null || rs.token == null ) return gs.get.router.push('register'); // manage login auth.token = rs.token; auth.user = { uid: rs.uid, username: username }; document.location = ''; }); }.bind(gs.get.register); /* (4) Manage pressing on enter * ---------------------------------------------------------*/ gs.get.register.func.press_enter = function(e){ // if enter -> launch register if( e.keyCode === 13 ) this.func.register(); }.bind(gs.get.register);