| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 | 
							- /* eslint no-param-reassign: 0 */
 
- import auth from "../../api/auth";
 
- import io from "../../io";
 
- import validation from "../../validation";
 
- const state = {};
 
- const getters = {};
 
- const actions = {};
 
- const mutations = {};
 
- const modules = {
 
- 	auth: {
 
- 		namespaced: true,
 
- 		state: {
 
- 			userIdMap: {},
 
- 			userIdRequested: {},
 
- 			pendingUserIdCallbacks: {},
 
- 			loggedIn: false,
 
- 			role: "",
 
- 			username: "",
 
- 			userId: "",
 
- 			banned: false,
 
- 			ban: {},
 
- 			gotData: false
 
- 		},
 
- 		actions: {
 
- 			/* eslint-disable-next-line no-unused-vars */
 
- 			register: ({ commit }, user) => {
 
- 				return new Promise((resolve, reject) => {
 
- 					const { username, email, password } = user;
 
- 					if (!email || !username || !password)
 
- 						return reject(new Error("Please fill in all fields"));
 
- 					if (!validation.isLength(email, 3, 254))
 
- 						return reject(
 
- 							new Error(
 
- 								"Email must have between 3 and 254 characters."
 
- 							)
 
- 						);
 
- 					if (
 
- 						email.indexOf("@") !== email.lastIndexOf("@") ||
 
- 						!validation.regex.emailSimple.test(email)
 
- 					)
 
- 						return reject(new Error("Invalid email format."));
 
- 					if (!validation.isLength(username, 2, 32))
 
- 						return reject(
 
- 							new Error(
 
- 								"Username must have between 2 and 32 characters."
 
- 							)
 
- 						);
 
- 					if (!validation.regex.azAZ09_.test(username))
 
- 						return reject(
 
- 							new Error(
 
- 								"Invalid username format. Allowed characters: a-z, A-Z, 0-9 and _."
 
- 							)
 
- 						);
 
- 					if (!validation.isLength(password, 6, 200))
 
- 						return reject(
 
- 							new Error(
 
- 								"Password must have between 6 and 200 characters."
 
- 							)
 
- 						);
 
- 					if (!validation.regex.password.test(password))
 
- 						return reject(
 
- 							new Error(
 
- 								"Invalid password format. Must have one lowercase letter, one uppercase letter, one number and one special character."
 
- 							)
 
- 						);
 
- 					return auth
 
- 						.register(user)
 
- 						.then(res => {
 
- 							return resolve(res);
 
- 						})
 
- 						.catch(err => {
 
- 							return reject(new Error(err.message));
 
- 						});
 
- 				});
 
- 			},
 
- 			/* eslint-disable-next-line no-unused-vars */
 
- 			login: ({ commit }, user) => {
 
- 				return new Promise((resolve, reject) => {
 
- 					auth.login(user)
 
- 						.then(() => {
 
- 							return resolve({
 
- 								status: "success",
 
- 								message: "Logged in!"
 
- 							});
 
- 						})
 
- 						.catch(err => {
 
- 							return reject(new Error(err.message));
 
- 						});
 
- 				});
 
- 			},
 
- 			logout: () => {
 
- 				return new Promise((resolve, reject) => {
 
- 					return auth
 
- 						.logout()
 
- 						.then(() => {
 
- 							return resolve();
 
- 						})
 
- 						.catch(() => {
 
- 							return reject();
 
- 						});
 
- 				});
 
- 			},
 
- 			getUsernameFromId: ({ commit, state }, userId) => {
 
- 				return new Promise(resolve => {
 
- 					if (typeof state.userIdMap[`Z${userId}`] !== "string") {
 
- 						if (state.userIdRequested[`Z${userId}`] !== true) {
 
- 							commit("requestingUserId", userId);
 
- 							io.getSocket(socket => {
 
- 								socket.emit(
 
- 									"users.getUsernameFromId",
 
- 									userId,
 
- 									res => {
 
- 										if (res.status === "success") {
 
- 											commit("mapUserId", {
 
- 												userId,
 
- 												username: res.data
 
- 											});
 
- 											state.pendingUserIdCallbacks[
 
- 												`Z${userId}`
 
- 											].forEach(cb => cb(res.data));
 
- 											commit(
 
- 												"clearPendingCallbacks",
 
- 												userId
 
- 											);
 
- 											return resolve(res.data);
 
- 										}
 
- 										return resolve();
 
- 									}
 
- 								);
 
- 							});
 
- 						} else {
 
- 							commit("pendingUsername", {
 
- 								userId,
 
- 								callback: username => {
 
- 									return resolve(username);
 
- 								}
 
- 							});
 
- 						}
 
- 					} else {
 
- 						resolve(state.userIdMap[`Z${userId}`]);
 
- 					}
 
- 				});
 
- 			},
 
- 			authData: ({ commit }, data) => {
 
- 				commit("authData", data);
 
- 			},
 
- 			banUser: ({ commit }, ban) => {
 
- 				commit("banUser", ban);
 
- 			},
 
- 			updateUsername: ({ commit }, username) => {
 
- 				commit("updateUsername", username);
 
- 			}
 
- 		},
 
- 		mutations: {
 
- 			mapUserId(state, data) {
 
- 				state.userIdMap[`Z${data.userId}`] = data.username;
 
- 				state.userIdRequested[`Z${data.userId}`] = false;
 
- 			},
 
- 			requestingUserId(state, userId) {
 
- 				state.userIdRequested[`Z${userId}`] = true;
 
- 				if (!state.pendingUserIdCallbacks[`Z${userId}`])
 
- 					state.pendingUserIdCallbacks[`Z${userId}`] = [];
 
- 			},
 
- 			pendingUsername(state, data) {
 
- 				state.pendingUserIdCallbacks[`Z${data.userId}`].push(
 
- 					data.callback
 
- 				);
 
- 			},
 
- 			clearPendingCallbacks(state, userId) {
 
- 				state.pendingUserIdCallbacks[`Z${userId}`] = [];
 
- 			},
 
- 			authData(state, data) {
 
- 				state.loggedIn = data.loggedIn;
 
- 				state.role = data.role;
 
- 				state.username = data.username;
 
- 				state.userId = data.userId;
 
- 				state.gotData = true;
 
- 			},
 
- 			banUser(state, ban) {
 
- 				state.banned = true;
 
- 				state.ban = ban;
 
- 			},
 
- 			updateUsername(state, username) {
 
- 				state.username = username;
 
- 			}
 
- 		}
 
- 	},
 
- 	playlists: {
 
- 		namespaced: true,
 
- 		state: {
 
- 			editing: ""
 
- 		},
 
- 		getters: {},
 
- 		actions: {
 
- 			editPlaylist: ({ commit }, id) => commit("editPlaylist", id)
 
- 		},
 
- 		mutations: {
 
- 			editPlaylist(state, id) {
 
- 				state.editing = id;
 
- 			}
 
- 		}
 
- 	},
 
- 	preferences: {
 
- 		namespaced: true,
 
- 		state: {
 
- 			nightmode: true
 
- 		},
 
- 		actions: {
 
- 			changeNightmode: ({ commit }, nightmode) => {
 
- 				commit("changeNightmode", nightmode);
 
- 			}
 
- 		},
 
- 		mutations: {
 
- 			changeNightmode(state, nightmode) {
 
- 				state.nightmode = nightmode;
 
- 			}
 
- 		}
 
- 	}
 
- };
 
- export default {
 
- 	namespaced: true,
 
- 	state,
 
- 	getters,
 
- 	actions,
 
- 	mutations,
 
- 	modules
 
- };
 
 
  |