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

86 lines
2.6 KiB
JavaScript

import mysql from 'mysql2';
import {Keypair, Connection, PublicKey} from '@solana/web3.js';
import {createAssociatedTokenAccount} from '@solana/spl-token';
import bs58 from 'bs58';
import {GenerateATAs} from './sol.js';
import dotenv from 'dotenv';
dotenv.config();
const pool = mysql.createPool({
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE
}).promise();
export async function RegisterNewUser(email,password){
const existingUser = await GetUserFromEmail(email);
if(existingUser){
return undefined;
}
const newWallet = Keypair.generate();
const pubKey=newWallet.publicKey.toBase58();
//GenerateATAs(newWallet);
await pool.query(`INSERT INTO Users (pub_key, email,password) VALUES(?, ?, ?)`, [pubKey, email, password]);
await pool.query(`INSERT INTO PrivateKeys (pub_key, private_key) VALUES(?, ?)`, [pubKey, bs58.encode(newWallet.secretKey)]);
return {
email: email,
publicKey: pubKey
}
}
export async function GetUserFromEmail(email){
const [rows] = await pool.query("SELECT pub_key,email FROM Users WHERE email=?", [email]);
return rows[0];
}
export async function GetUserFromPubkey(pubkey){
const [rows] = await pool.query("SELECT pub_key,email FROM Users WHERE pub_key=?", [pubkey]);
return rows[0];
}
export async function Authneticate(email, password){
const [rows] = await pool.query("SELECT pub_key,email FROM Users WHERE email=? AND password=?", [email, password]);
return rows.length >0;
}
export async function GetPrivateKey(pubkey){
const [rows] = await pool.query("SELECT private_key FROM PrivateKeys WHERE pub_key=?", [pubkey]);
return rows[0];
}
export async function GetKeypairFromEmail(email){
const [rows] = await pool.query("SELECT Users.pub_key,Users.email, PrivateKeys.private_key FROM Users JOIN PrivateKeys ON Users.pub_key = PrivateKeys.pub_key WHERE email=?", [email]);
return rows[0];
}
export async function CreateNewRequest(){
const id = uuidv4();
await pool.query(`INSERT INTO Requests (id) VALUES(?)`, [id]);
return id;
}
export async function SetRequestResult(id,result){
const [rows] = await pool.query("UPDATE Requests SET result=?, status=1 WHERE id=?", [result,id]);
return rows.length;
}
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
.replace(/[xy]/g, function (c) {
const r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}