1 changed files with 57 additions and 0 deletions
@ -0,0 +1,57 @@ |
|||||
|
class Server { |
||||
|
async getEnv(variables) { |
||||
|
return Object.fromEntries( |
||||
|
await Promise.all( |
||||
|
variables.map(async variable => { |
||||
|
const {state} = await Deno.permissions.query({ |
||||
|
name: 'env', variable |
||||
|
}) |
||||
|
if (state === 'granted') { |
||||
|
return [variable, Deno.env.get(variable)] |
||||
|
} else { |
||||
|
return [variable, undefined] |
||||
|
} |
||||
|
}) |
||||
|
) |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
async configure() { |
||||
|
const env = await this.getEnv([ |
||||
|
'PORT', 'BASE_URL' |
||||
|
]) |
||||
|
this.port = env.PORT ?? 3000 |
||||
|
this.baseUrl = env.BASE_URL ?? '/macchiato' |
||||
|
} |
||||
|
|
||||
|
async serveRequest(event) { |
||||
|
const {pathname} = new URL(event.request.url) |
||||
|
if (pathname === `${this.baseUrl}/api/auth`) { |
||||
|
event.respondWith(new Response( |
||||
|
'extract query and redirect', {status: 200} |
||||
|
)) |
||||
|
} else { |
||||
|
event.respondWith(new Response( |
||||
|
'here', {status: 404} |
||||
|
)) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
async serveConn(conn) { |
||||
|
console.log({conn}) |
||||
|
const httpConn = Deno.serveHttp(conn) |
||||
|
for await (const event of httpConn) { |
||||
|
this.serveRequest(event) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
async serve() { |
||||
|
await this.configure() |
||||
|
this.server = Deno.listen({ |
||||
|
port: this.port, |
||||
|
}) |
||||
|
for await (const conn of this.server) { |
||||
|
this.serveConn(conn) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue