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
- };
|