1 // import Cookies from 'js-cookie';
2 import { isAuthPath } from "@utils/app";
3 import { isBrowser } from "@utils/browser";
4 import { isHttps } from "@utils/env";
5 import * as cookie from "cookie";
6 import jwt_decode from "jwt-decode";
7 import { LoginResponse, MyUserInfo } from "lemmy-js-client";
8 import { toast } from "../toast";
9 import { I18NextService } from "./I18NextService";
22 export class UserService {
23 static #instance: UserService;
24 public myUserInfo?: MyUserInfo;
25 public jwtInfo?: JwtInfo;
27 private constructor() {
31 public login(res: LoginResponse) {
32 const expires = new Date();
33 expires.setDate(expires.getDate() + 365);
34 if (isBrowser() && res.jwt) {
35 toast(I18NextService.i18n.t("logged_in"));
36 document.cookie = cookie.serialize("jwt", res.jwt, {
39 domain: location.hostname,
48 this.jwtInfo = undefined;
49 this.myUserInfo = undefined;
51 document.cookie = cookie.serialize("jwt", "", {
54 domain: location.hostname,
58 if (isAuthPath(location.pathname)) {
59 location.replace("/");
65 public auth(throwErr = false): string | undefined {
66 const jwt = this.jwtInfo?.jwt;
70 const msg = "No JWT cookie found";
71 if (throwErr && isBrowser()) {
73 toast(I18NextService.i18n.t("not_logged_in"), "danger");
82 const { jwt } = cookie.parse(document.cookie);
84 this.jwtInfo = { jwt, claims: jwt_decode(jwt) };
89 public static get Instance() {
90 return this.#instance || (this.#instance = new this());