TS conversion
This commit is contained in:
234
webpage/login.ts
Normal file
234
webpage/login.ts
Normal file
@@ -0,0 +1,234 @@
|
||||
const mobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
|
||||
export {mobile, getBulkUsers,getBulkInfo,setTheme,Specialuser}
|
||||
function setTheme(){
|
||||
const name=localStorage.getItem("theme");
|
||||
if(!name){
|
||||
document.body.className="Dark-theme";
|
||||
localStorage.setItem("theme","Dark");
|
||||
}
|
||||
document.body.className=name+"-theme";
|
||||
}
|
||||
setTheme();
|
||||
function getBulkUsers(){
|
||||
const json=getBulkInfo()
|
||||
for(const thing in json.users){
|
||||
json.users[thing]=new Specialuser(json.users[thing]);
|
||||
}
|
||||
return json;
|
||||
}
|
||||
function getBulkInfo(){
|
||||
return JSON.parse(localStorage.getItem("userinfos"));
|
||||
}
|
||||
function setDefaults(){
|
||||
let userinfos=getBulkInfo()
|
||||
if(!userinfos){
|
||||
localStorage.setItem("userinfos",JSON.stringify({
|
||||
currentuser:null,
|
||||
users:{},
|
||||
preferances:
|
||||
{
|
||||
theme:"Dark",
|
||||
notifcations:false,
|
||||
notisound:"three",
|
||||
},
|
||||
}));
|
||||
}
|
||||
if(userinfos.users===undefined){
|
||||
userinfos.users={};
|
||||
}
|
||||
if(userinfos.preferances===undefined){
|
||||
userinfos.preferances={
|
||||
theme:"Dark",
|
||||
notifcations:false,
|
||||
notisound:"three",
|
||||
}
|
||||
}
|
||||
if(userinfos.preferances&&(userinfos.preferances.notisound===undefined)){
|
||||
userinfos.preferances.notisound="three";
|
||||
}
|
||||
localStorage.setItem("userinfos",JSON.stringify(userinfos));
|
||||
}
|
||||
setDefaults();
|
||||
class Specialuser{
|
||||
serverurls;
|
||||
email:string;
|
||||
token:string;
|
||||
loggedin;
|
||||
json;
|
||||
constructor(json){
|
||||
if(json instanceof Specialuser){
|
||||
console.error("specialuser can't construct from another specialuser");
|
||||
}
|
||||
this.serverurls=json.serverurls;
|
||||
this.serverurls.api=new URL(this.serverurls.api);
|
||||
this.serverurls.cdn=new URL(this.serverurls.cdn);
|
||||
this.serverurls.gateway=new URL(this.serverurls.gateway);
|
||||
this.serverurls.wellknown=new URL(this.serverurls.wellknown);
|
||||
this.email=json.email;
|
||||
this.token=json.token;
|
||||
this.loggedin=json.loggedin;
|
||||
this.json=json;
|
||||
if(!this.serverurls||!this.email||!this.token){
|
||||
console.error("There are fundamentally missing pieces of info missing from this user");
|
||||
}
|
||||
}
|
||||
set pfpsrc(e){
|
||||
console.log("this ran fr")
|
||||
this.json.pfpsrc=e;
|
||||
this.updateLocal();
|
||||
}
|
||||
get pfpsrc(){
|
||||
return this.json.pfpsrc;
|
||||
}
|
||||
set username(e){
|
||||
this.json.username=e;
|
||||
this.updateLocal();
|
||||
}
|
||||
get username(){
|
||||
return this.json.username;
|
||||
}
|
||||
get uid(){
|
||||
return this.email+this.serverurls.wellknown;
|
||||
}
|
||||
toJSON(){
|
||||
return this.json;
|
||||
}
|
||||
updateLocal(){
|
||||
const info=getBulkInfo();
|
||||
info.users[this.uid]=this.toJSON();
|
||||
localStorage.setItem("userinfos",JSON.stringify(info));
|
||||
}
|
||||
}
|
||||
function adduser(user){
|
||||
user=new Specialuser(user);
|
||||
const info=getBulkInfo();
|
||||
info.users[user.uid]=user;
|
||||
info.currentuser=user.uid;
|
||||
localStorage.setItem("userinfos",JSON.stringify(info));
|
||||
}
|
||||
const instancein=document.getElementById("instancein");
|
||||
let timeout;
|
||||
let instanceinfo;
|
||||
async function checkInstance(e){
|
||||
const verify=document.getElementById("verify");;
|
||||
try{
|
||||
verify.textContent="Checking Instance";
|
||||
const instanceinfo=await setInstance((instancein as HTMLInputElement).value);
|
||||
localStorage.setItem("instanceinfo",JSON.stringify(instanceinfo));
|
||||
verify.textContent="Instance is all good"
|
||||
if(checkInstance["alt"]){checkInstance["alt"]();}
|
||||
setTimeout(_=>{
|
||||
console.log(verify.textContent)
|
||||
verify.textContent="";
|
||||
},3000);
|
||||
|
||||
}catch(e){
|
||||
console.log("catch")
|
||||
verify.textContent="Invalid Instance, try again"
|
||||
}
|
||||
}
|
||||
if(instancein){
|
||||
console.log(instancein)
|
||||
instancein.addEventListener("keydown",e=>{
|
||||
const verify=document.getElementById("verify");
|
||||
verify.textContent="Waiting to check Instance"
|
||||
clearTimeout(timeout);
|
||||
timeout=setTimeout(checkInstance,1000);
|
||||
});
|
||||
if(localStorage.getItem("instanceinfo")){
|
||||
(instancein as HTMLInputElement).value=JSON.parse(localStorage.getItem("instanceinfo")).wellknown
|
||||
}else{
|
||||
checkInstance("https://spacebar.chat/");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function login(username, password){
|
||||
const options={
|
||||
method: "POST",
|
||||
body:JSON.stringify({
|
||||
"login": username,
|
||||
"password": password,
|
||||
"undelete":false
|
||||
}),
|
||||
headers: {
|
||||
"Content-type": "application/json; charset=UTF-8",
|
||||
}}
|
||||
try{
|
||||
const info=JSON.parse(localStorage.getItem("instanceinfo"));
|
||||
const url=new URL(info.login);
|
||||
return await fetch(url.origin+'/api/auth/login',options).then(responce=>responce.json())
|
||||
.then((response) => {
|
||||
console.log(response,response.message)
|
||||
if("Invalid Form Body"===response.message){
|
||||
return response.errors.login._errors[0].message;
|
||||
console.log("test")
|
||||
}
|
||||
//this.serverurls||!this.email||!this.token
|
||||
adduser({serverurls:JSON.parse(localStorage.getItem("instanceinfo")),email:username,token:response.token});
|
||||
window.location.href = '/channels/@me';
|
||||
return response.token;
|
||||
})
|
||||
}catch(error){
|
||||
console.error('Error:', error);
|
||||
};
|
||||
}
|
||||
async function setInstance(url){
|
||||
url=new URL(url);
|
||||
async function attempt(aurl){
|
||||
const info=await fetch(`${aurl.toString()}${aurl.pathname.includes("api") ? "" : "api"}/policies/instance/domains`)
|
||||
.then((x) => x.json());
|
||||
return {
|
||||
api: info.apiEndpoint,
|
||||
gateway: info.gateway,
|
||||
cdn: info.cdn,
|
||||
wellknown: url,
|
||||
login:aurl.toString()
|
||||
}
|
||||
}
|
||||
try{
|
||||
return await attempt(url);
|
||||
}catch(e){
|
||||
|
||||
}
|
||||
const wellKnown = await fetch(`${url.origin}/.well-known/spacebar`)
|
||||
.then((x) => x.json())
|
||||
.then((x) => new URL(x.api));
|
||||
return await attempt(wellKnown);
|
||||
}
|
||||
|
||||
|
||||
async function check(e){
|
||||
|
||||
e.preventDefault();
|
||||
let h=await login(e.srcElement[1].value,e.srcElement[2].value);
|
||||
document.getElementById("wrong").textContent=h;
|
||||
console.log(h);
|
||||
}
|
||||
if(document.getElementById("form")){
|
||||
document.getElementById("form").addEventListener("submit", check);
|
||||
}
|
||||
//Service workers :3
|
||||
if ("serviceWorker" in navigator){
|
||||
navigator.serviceWorker.register("/service.js", {
|
||||
scope: "/",
|
||||
}).then((registration) => {
|
||||
let serviceWorker;
|
||||
if (registration.installing) {
|
||||
serviceWorker = registration.installing;
|
||||
console.log("installing");
|
||||
} else if (registration.waiting) {
|
||||
serviceWorker = registration.waiting;
|
||||
console.log("waiting");
|
||||
} else if (registration.active) {
|
||||
serviceWorker = registration.active;
|
||||
console.log("active");
|
||||
}
|
||||
if (serviceWorker) {
|
||||
console.log(serviceWorker.state);
|
||||
serviceWorker.addEventListener("statechange", (e) => {
|
||||
console.log(e.target.state);
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user