auth.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /* eslint-disable import/no-cycle */
  2. import Toast from "toasters";
  3. import ws from "@/ws";
  4. // when Vuex needs to interact with websockets
  5. export default {
  6. register(user) {
  7. return new Promise((resolve, reject) => {
  8. const { username, email, password, recaptchaToken } = user;
  9. ws.socket.dispatch(
  10. "users.register",
  11. username,
  12. email,
  13. password,
  14. recaptchaToken,
  15. res => {
  16. if (res.status === "success") {
  17. if (res.SID) {
  18. return lofig.get("cookie").then(cookie => {
  19. const date = new Date();
  20. date.setTime(
  21. new Date().getTime() +
  22. 2 * 365 * 24 * 60 * 60 * 1000
  23. );
  24. const secure = cookie.secure
  25. ? "secure=true; "
  26. : "";
  27. let domain = "";
  28. if (cookie.domain !== "localhost")
  29. domain = ` domain=${cookie.domain};`;
  30. document.cookie = `${cookie.SIDname}=${
  31. res.SID
  32. }; expires=${date.toGMTString()}; ${domain}${secure}path=/`;
  33. return resolve({
  34. status: "success",
  35. message: "Account registered!"
  36. });
  37. });
  38. }
  39. return reject(new Error("You must login"));
  40. }
  41. return reject(new Error(res.message));
  42. }
  43. );
  44. });
  45. },
  46. login(user) {
  47. return new Promise((resolve, reject) => {
  48. const { email, password } = user;
  49. ws.socket.dispatch("users.login", email, password, res => {
  50. if (res.status === "success") {
  51. return lofig.get("cookie").then(cookie => {
  52. const date = new Date();
  53. date.setTime(
  54. new Date().getTime() + 2 * 365 * 24 * 60 * 60 * 1000
  55. );
  56. const secure = cookie.secure ? "secure=true; " : "";
  57. let domain = "";
  58. if (cookie.domain !== "localhost")
  59. domain = ` domain=${cookie.domain};`;
  60. document.cookie = `${cookie.SIDname}=${
  61. res.data.SID
  62. }; expires=${date.toGMTString()}; ${domain}${secure}path=/`;
  63. return resolve({ status: "success" });
  64. });
  65. }
  66. return reject(new Error(res.message));
  67. });
  68. });
  69. },
  70. logout() {
  71. return new Promise((resolve, reject) => {
  72. ws.socket.dispatch("users.logout", res => {
  73. if (res.status === "success") {
  74. return lofig.get("cookie").then(cookie => {
  75. document.cookie = `${cookie.SIDname}=;expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
  76. return window.location.reload();
  77. });
  78. }
  79. new Toast(res.message);
  80. return reject(new Error(res.message));
  81. });
  82. });
  83. }
  84. };