2017-07-28 23:39:39 +02:00
// validation function which checks the proposed file's type, size, and name
2017-11-13 21:25:03 +01:00
const validationFunctions = {
2017-11-02 23:47:55 +01:00
validateChannelName : function ( name ) {
name = name . substring ( name . indexOf ( '@' ) + 1 ) ;
// ensure a name was entered
if ( name . length < 1 ) {
throw new ChannelNameError ( "You must enter a name for your channel" ) ;
2017-09-20 18:49:05 +02:00
}
2017-11-02 23:47:55 +01:00
// validate the characters in the 'name' field
const invalidCharacters = /[^A-Za-z0-9,-,@]/g . exec ( name ) ;
if ( invalidCharacters ) {
throw new ChannelNameError ( '"' + invalidCharacters + '" characters are not allowed' ) ;
2017-09-20 18:49:05 +02:00
}
2017-11-02 23:47:55 +01:00
} ,
validatePassword : function ( password ) {
if ( password . length < 1 ) {
throw new ChannelPasswordError ( "You must enter a password for you channel" ) ;
2017-10-12 23:37:25 +02:00
}
2017-11-02 23:47:55 +01:00
} ,
// validation functions to check claim & channel name eligibility as the inputs change
isNameAvailable : function ( name , apiUrl ) {
const url = apiUrl + name ;
return getRequest ( url )
} ,
showError : function ( errorDisplay , errorMsg ) {
errorDisplay . hidden = false ;
errorDisplay . innerText = errorMsg ;
} ,
hideError : function ( errorDisplay ) {
errorDisplay . hidden = true ;
errorDisplay . innerText = '' ;
} ,
showSuccess : function ( successElement ) {
successElement . hidden = false ;
successElement . innerHTML = "✔" ;
} ,
hideSuccess : function ( successElement ) {
successElement . hidden = true ;
successElement . innerHTML = "" ;
} ,
checkAvailability : function ( name , successDisplayElement , errorDisplayElement , validateName , errorMessage , apiUrl ) {
var that = this ;
2017-10-12 23:37:25 +02:00
try {
2017-11-02 23:47:55 +01:00
// check to make sure the characters are valid
validateName ( name ) ;
// check to make sure it is available
that . isNameAvailable ( name , apiUrl )
. then ( function ( result ) {
if ( result === true ) {
that . hideError ( errorDisplayElement ) ;
that . showSuccess ( successDisplayElement )
} else {
that . hideSuccess ( successDisplayElement ) ;
that . showError ( errorDisplayElement , errorMessage ) ;
}
} )
. catch ( error => {
that . hideSuccess ( successDisplayElement ) ;
that . showError ( errorDisplayElement , error . message ) ;
} ) ;
2017-10-12 23:37:25 +02:00
} catch ( error ) {
2017-11-02 23:47:55 +01:00
that . hideSuccess ( successDisplayElement ) ;
that . showError ( errorDisplayElement , error . message ) ;
2017-10-12 23:37:25 +02:00
}
2017-11-02 23:47:55 +01:00
} ,
checkChannelName : function ( name ) {
const successDisplayElement = document . getElementById ( 'input-success-channel-name' ) ;
const errorDisplayElement = document . getElementById ( 'input-error-channel-name' ) ;
name = ` @ ${ name } ` ;
2017-12-05 19:18:49 +01:00
this . checkAvailability ( name , successDisplayElement , errorDisplayElement , this . validateChannelName , 'Sorry, that name is already taken' , '/api/channel-is-available/' ) ;
2017-11-02 23:47:55 +01:00
} ,
// validation function which checks all aspects of a new channel submission
validateNewChannelSubmission : function ( userName , password ) {
const channelName = ` @ ${ userName } ` ;
var that = this ;
return new Promise ( function ( resolve , reject ) {
// 1. validate name
try {
that . validateChannelName ( channelName ) ;
} catch ( error ) {
return reject ( error ) ;
}
// 2. validate password
try {
that . validatePassword ( password ) ;
} catch ( error ) {
return reject ( error ) ;
}
// 3. if all validation passes, check availability of the name
2017-12-05 19:18:49 +01:00
that . isNameAvailable ( channelName , '/api/channel-is-available/' ) // validate the availability
2017-11-02 23:47:55 +01:00
. then ( function ( result ) {
if ( result ) {
resolve ( ) ;
} else {
reject ( new ChannelNameError ( 'Sorry, that name is already taken' ) ) ;
}
} )
. catch ( function ( error ) {
console . log ( 'error evaluating channel name availability' , error ) ;
reject ( error ) ;
} ) ;
} ) ;
} ,
// validation function which checks all aspects of a new channel login
validateNewChannelLogin : function ( userName , password ) {
const channelName = ` @ ${ userName } ` ;
var that = this ;
return new Promise ( function ( resolve , reject ) {
// 1. validate name
try {
that . validateChannelName ( channelName ) ;
} catch ( error ) {
return reject ( error ) ;
}
// 2. validate password
try {
that . validatePassword ( password ) ;
} catch ( error ) {
return reject ( error ) ;
}
resolve ( ) ;
} ) ;
}
2018-01-06 01:47:55 +01:00
} ;