From bb0bfb50650f9248db8be8bb4a344cf455cbd170 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 25 Mar 2018 14:49:59 +0200 Subject: [PATCH] ported [vue.noauth.login] into [vue.noauth.register], same for [page.noauth.register] --- webpack/page/noauth/login.js | 5 -- webpack/page/noauth/register.js | 152 ++++++++++++++++++++++++++++++++ webpack/vue/noauth/register.vue | 16 ++-- 3 files changed, 160 insertions(+), 13 deletions(-) diff --git a/webpack/page/noauth/login.js b/webpack/page/noauth/login.js index 39d1efd..c746844 100644 --- a/webpack/page/noauth/login.js +++ b/webpack/page/noauth/login.js @@ -131,9 +131,4 @@ gs.get.login.func.login = function(){ http_token: encodeURI(`${username}:${password}`) }); - - - - - }.bind(gs.get.login); \ No newline at end of file diff --git a/webpack/page/noauth/register.js b/webpack/page/noauth/register.js index 8b13789..e957e6f 100644 --- a/webpack/page/noauth/register.js +++ b/webpack/page/noauth/register.js @@ -1 +1,153 @@ +/* (1) Initialise +---------------------------------------------------------*/ +/* (1) Default data structure */ +gs.set('register', { + // fields + mail: { + model: '', + timeout: '', + error: '', + 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){}, + login(){}, + forgot_pass(){} + } + +}); + + + + +/* (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', 'This field is required'); + }else + this.func.print_err('username', '', 0); + + + // password error + if( !this.password.validate(password) ){ + errors = true; + this.func.print_err('password', 'This field is required'); + }else + this.func.print_err('password', '', 0); + + // if errors -> fail + if( errors ) + return false; + + /* (3) Create API instance */ + let api = new xhrcd('douscord-srv.xdrm.io'); + + /* (4) API bindings */ + api.onreceive = function(_response){ + + // manage error + if( _response.error !== 0 || _response.token == null ) + return gs.get.router.push('register'); + + // manage login + auth.token = _response.token; + document.location = ''; + + }; + + api.onclose = function(){ return gs.get.router.push('register'); }; + + /* (5) API call */ + api.send({ + path: 'POST /user', + form: { + username: username, + mail: mail, + password: password + } + }); + +}.bind(gs.get.register); \ No newline at end of file diff --git a/webpack/vue/noauth/register.vue b/webpack/vue/noauth/register.vue index 820c086..509fe2d 100644 --- a/webpack/vue/noauth/register.vue +++ b/webpack/vue/noauth/register.vue @@ -6,14 +6,14 @@

Create an account

- - - - - - + + + + + + - + By registering, you agree to Discord's Terms of Service and Privacy Policy
Already have an account? Login @@ -24,7 +24,7 @@