openAo.js
1 import express from 'express' 2 const router = express.Router() 3 4 import state from './state.js' 5 import cryptoUtils from '../crypto.js' 6 import events from './events.js' 7 import validators from './validators.js' 8 9 router.get('/newaccount/:name', async (req, res) => { 10 let errRes = [] 11 if (validators.isValidName(req.params.name, errRes)){ 12 13 // Default password is the same as the name 14 const session = crypto.randomUUID() 15 const hashpass = cryptoUtils.buf2hex(await cryptoUtils.createHash(req.params.name)) 16 const sessionKey = cryptoUtils.buf2hex(await cryptoUtils.createHash(session + hashpass)) 17 const token = await cryptoUtils.HMAC(sessionKey, session) 18 19 events.memberCreated(req.params.name, '', hashpass, (err2, res2) => { 20 let ownerId 21 state.serverState.members.some(m => { 22 if (m.name === req.params.name){ 23 ownerId = m.memberId 24 } 25 }) 26 state.serverState.sessions.some(x => { 27 if (x.session === session){ 28 ownerId = x.ownerId 29 return true 30 } 31 }) 32 33 events.sessionCreated(ownerId, session, token, (err3, res3)=>{ 34 res.json({token, session}) 35 }) 36 }) 37 } else { 38 console.error('validation error: ', errRes) 39 } 40 }) 41 42 export default router