const CONFIG = { client_id: "{{ config.client_id }}", redirect_uri: "{{ config.domain }}", authorization_endpoint: "{{ config.gitea_host }}/login/oauth/authorize", token_endpoint: "{{ config.gitea_host }}/login/oauth/access_token", requested_scopes: "read:repository,write:repository" }; const STATES = { auth: "{{ state.auth }}", error: "{{ state.error }}", loading: "{{ state.loading }}", repoSelected: "{{ state.repo_selected }}", repoCreated: "{{ state.repo_created }}", buttonOn: "{{ state.button_on }}", featureOn: "{{ state.feature_on }}", confirmOn: "{{ state.confirm_on }}", } document.on = document.addEventListener; function sugar(obj) { obj.on = obj.addEventListener; obj.addClass = (x) => obj.classList.add(x); obj.delClass = (x) => obj.classList.remove(x); obj.hasClass = (x) => obj.classList.contains(x); obj.setClass = (x, y) => obj.classList.toggle(x, y); return obj; } function get(s) { let x = [...document.querySelectorAll(s)].map(sugar); return (x.length === 1) ? x[0] : x; } // Check if object is empty. function isEmpty(obj) { for (const prop in obj) { if (Object.hasOwn(obj, prop)) { return false; } } return true; } // Returns error and resolves promise if necessary. function getErr(f) { return (err) => { if (err instanceof Promise) { return err.then(f); } else { return err; } } } // Parse a query string into an object function parseQueryString(string) { if(string == "") { return {}; } var segments = string.split("&").map(s => s.split("=") ); var queryString = {}; segments.forEach(s => queryString[s[0]] = s[1]); return queryString; } get("#login").on("click", async (e) => { e.preventDefault(); if (G_AUTH) { window.localStorage.clear(); document.cookie = ""; window.location = "/"; } else { // Build the authorization URL let url = CONFIG.authorization_endpoint + "?response_type=code" + "&client_id="+encodeURIComponent(CONFIG.client_id) + "&scope="+encodeURIComponent(CONFIG.requested_scopes) + "&redirect_uri="+encodeURIComponent(CONFIG.redirect_uri); // Redirect to the authorization server window.location = url; } }); var G_AUTH = window.localStorage.getItem("token") !== null; get("body").setClass(STATES["auth"], G_AUTH);