/ src / server / openAo.js
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