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
|
2018-01-25 20:37:11 +01:00
|
|
|
isChannelNameAvailable: function (name) {
|
|
|
|
return this.isNameAvailable(name, '/api/channel-is-available/');
|
|
|
|
},
|
2017-11-02 23:47:55 +01:00
|
|
|
isNameAvailable: function (name, apiUrl) {
|
2018-01-25 20:37:11 +01:00
|
|
|
console.log('isNameAvailable?', name);
|
2017-11-02 23:47:55 +01:00
|
|
|
const url = apiUrl + name;
|
2018-01-25 20:37:11 +01:00
|
|
|
return fetch(url)
|
|
|
|
.then(function (response) {
|
|
|
|
return response.json();
|
|
|
|
})
|
|
|
|
.catch(error => {
|
|
|
|
console.log('isNameAvailable error', error);
|
|
|
|
throw error;
|
|
|
|
})
|
2017-11-02 23:47:55 +01:00
|
|
|
},
|
|
|
|
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 = "";
|
|
|
|
},
|
2018-01-25 20:37:11 +01:00
|
|
|
checkChannelName: function (name) {
|
|
|
|
var successDisplayElement = document.getElementById('input-success-channel-name');
|
|
|
|
var errorDisplayElement = document.getElementById('input-error-channel-name');
|
|
|
|
var channelName = `@${name}`;
|
2017-11-02 23:47:55 +01:00
|
|
|
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
|
2018-01-25 20:37:11 +01:00
|
|
|
that.validateChannelName(channelName);
|
2017-11-02 23:47:55 +01:00
|
|
|
// check to make sure it is available
|
2018-01-25 20:37:11 +01:00
|
|
|
that.isChannelNameAvailable(channelName)
|
|
|
|
.then(function(isAvailable){
|
|
|
|
console.log('isChannelNameAvailable:', isAvailable);
|
|
|
|
if (isAvailable) {
|
|
|
|
that.hideError(errorDisplayElement);
|
|
|
|
that.showSuccess(successDisplayElement)
|
|
|
|
} else {
|
|
|
|
that.hideSuccess(successDisplayElement);
|
|
|
|
that.showError(errorDisplayElement, 'Sorry, that name is already taken');
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.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
|
|
|
},
|
|
|
|
// 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
|
2018-01-25 20:37:11 +01:00
|
|
|
that.isChannelNameAvailable(channelName)
|
|
|
|
.then(function(isAvailable) {
|
|
|
|
if (isAvailable) {
|
2017-11-02 23:47:55 +01:00
|
|
|
resolve();
|
|
|
|
} else {
|
|
|
|
reject(new ChannelNameError('Sorry, that name is already taken'));
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(function(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
|
|
|
};
|