Files
sologin_node/index.js
2024-12-23 18:00:19 +08:00

187 lines
4.8 KiB
JavaScript

import express from 'express';
import dotenv from 'dotenv';
import { RegisterNewUser, GetUserFromEmail, GetUserFromPubkey, GetKeypairFromEmail, Authneticate, CreateNewRequest, SetRequestResult } from './database.js';
import { verifyFirebaseToken } from './firebase.js';
dotenv.config();
const app = express();
import cors from 'cors';
app.use(cors());
app.use((err,req,res,next)=>{
console.error(err.stack);
res.status(500).send("Something went wrong!");
})
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
app.get("/registerv1", async (req,res)=>{
const {email, password} = req.query;
if(!email || !password){
res.status(403).json({error: "Missing credentials"});
return;
}
const newUser = await RegisterNewUser(email,password);
if(!newUser){
res.status(403).json({error: "Email exists"});
}
res.status(201).json(newUser);
})
app.get("/register", async (req,res)=>{
const {tokenId} = req.query;
if(!tokenId){
res.status(403).json({error: "Missing tokenId"});
return;
}
const user = await verifyFirebaseToken(tokenId);
if(!user){
res.status(403).json({error:"Invalid tokenId. Auth failed"});
return;
}
const newUser = await RegisterNewUser(user.uid,user.uid);
if(!newUser){
res.status(403).json({error: "User exists"});
}
res.status(201).json(newUser);
})
app.get("/login", async(req,res)=>{
const {tokenId} = req.query;
if(!tokenId){
res.status(403).json({error:"Missing tokenId"})
return;
}
const fuser = await verifyFirebaseToken(tokenId);
if(!fuser){
res.status(403).json({error:"Invalid tokenId. Auth failed"});
return;
}
const email = fuser.uid;
if(email){
const user = await GetUserFromEmail(email);
if(user){
res.status(200).json(user);
}else{
res.status(404).json({error:"User couldnt be found"})
}
}
})
app.get("/authenticate", async(req,res)=>{
const {email, password} = req.query;
if(!email || !password){
res.status(403).json({error:"Credentials missing"})
return;
}
const authResult = await Authneticate(email,password);
if(authResult){
res.status(200).json({authenticated: true})
}else{
res.status(403).json({authenticated: false})
}
})
app.get("/getKeypairWithToken", async(req,res)=>{
const {tokenId} = req.query;
if(!tokenId){
res.status(403).json({error:"tokenId missing"})
return;
}
const fuser = await verifyFirebaseToken(tokenId);
if(!fuser){
res.status(403).json({error:"Invalid tokenId. Auth failed"});
return;
}
const user = await GetKeypairFromEmail(fuser.uid);
res.status(200).json(user);
})
app.get("/getPubkey", async(req,res)=>{
const {email}= req.query;
if(!email){
res.status(403).json({error: "Missing credentials"});
return;
}
const user = await GetUserFromEmail(email);
res.status(200).json(user);
})
app.get("/getKeypair", async(req,res)=>{
const {email, apiKey}= req.query;
if(!email || !apiKey){
res.status(403).json({error: "Missing credentials"});
return;
}
if(apiKey!= process.env.API_KEY){
res.status(403).json({error: `Invalid Api Key`});
console.log(`Provided api key: ${apiKey}`);
console.log(`Correcte api key: ${process.env.API_KEY}`);
return;
}
const user = await GetKeypairFromEmail(email);
res.status(200).json(user);
})
app.get("/firebaseAuth", async (req,res)=>{
const {tokenId} = req.query;
if(!tokenId){
res.status(403).json({error: "Invalid tokenID"});
return;
}
const user = await verifyFirebaseToken(tokenId);
if(user){
res.status(200).json({status:"Success", user: user});
}else{
res.status(403).json({status:"Failed", user:null});
}
})
app.get("/createNewRequest", async(req,res)=>{
const id = await CreateNewRequest();
res.status(200).json({id:id});
})
app.get("/completeRequest", async(req,res)=>{
const {id,result}=req.query;
if(!id || !result){
res.status(403).json({error:"Missing parameters, need id and result"});
return;
}
await SetRequestResult(id,result);
res.status(200).json({status:"Success"});
})
app.get("/status", async(req,res)=>{
res.status(200).json({status:"Running"});
})
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
app.listen(process.env.EXPRESS_PORT, ()=>{
console.log(`Server is listening on Port ${process.env.EXPRESS_PORT}`);
})