-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathroutes.js
More file actions
126 lines (123 loc) · 3.67 KB
/
routes.js
File metadata and controls
126 lines (123 loc) · 3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
const { required, oneOf, optional, between } = require('4k/route-helper')
const {
mailgun,
github,
dns,
users,
server,
} = require('./handlers')
const game01 = require('./game01/game01')
const isArrayOfArray = value => {
if (!Array.isArray(value) || !value.every(Array.isArray)) {
throw Error("Array of Array expected")
}
return value
}
module.exports = {
OAUTH: {
github: github.oauth,
},
GET: {
'/session': {
description: 'log user data',
handler: ({ session }) => session,
},
'/game01/start': {
description: 'Init game session & return initial (or current) level data',
handler: game01.start,
},
'/users/locations': {
description: 'Get all user locations',
noSession: true, // should be authenticated
handler: users.getLocations,
},
'/server/alive': {
description: 'Get server alive status',
noSession: true,
handler: server.isAlive,
},
},
POST: {
'/session': { // TODO: rm
description: 'create a session (used for debug)',
params: { session: String, login: String, id: String, email: String, token: String },
handler: ({ session, login, id, email, token }) => Promise.all([
db.set(session, id),
db.set(id, JSON.stringify({ login, id, email, token })),
]).then(() => res => {
const cookie = require('cookie')
res.setHeader('Set-Cookie',
cookie.serialize('4k', session, { path: '/', maxAge: 60*60*24*7 }))
res.end('"OK"')
}),
},
'/users/locations': {
description: 'Set a user location',
noSession: true, // should be authenticated
params: { login: required(String), location: required(String) },
handler: users.setLocation,
},
'/server/alive': {
description: 'Set server is alive',
noSession: true, // should be authenticated
handler: server.alive,
},
'/game01/next': {
description: 'Submit answer & return next level data',
params: { answer: isArrayOfArray },
handler: game01.next,
},
'/email': {
description: 'Add an email to the list',
noSession: true,
params: { email: String, sub: Boolean },
handler: ({ email, sub }) => mailgun.addEmail(email, sub),
},
'/dns/delete': {
description: 'Delete DNS record',
params: { record: required(String) },
handler: dns.delete,
},
'/dns/details': {
description: 'DNS record details',
params: { record: required(String) },
handler: dns.details,
},
'/dns/update': {
description: 'Update DNS record',
params: {
name: required(String),
content: required(String),
type: required(oneOf('A AAAA CNAME TXT SRV LOC MX NS SPF'.split(' '))),
proxied: optional(Boolean),
ttl: between(120, 2147483647),
},
handler: dns.update,
},
'/dns/create': {
description: 'Create DNS record',
params: {
name: required(String),
content: required(String),
type: required(oneOf('A AAAA CNAME TXT SRV LOC MX NS SPF'.split(' '))),
proxied: optional(Boolean),
ttl: optional(between(120, 2147483647)),
},
handler: dns.create,
},
'/dns/list': {
description: 'List DNS Records',
params: {
name: required(String),
type: optional(String),
content: optional(String),
page: optional(Number),
per_page: optional(between(5, 1000)),
order: optional(oneOf([ 'type', 'name', 'content', 'ttl', 'proxied' ])),
direction: optional(oneOf([ 'asc', 'desc' ])),
match: optional(oneOf([ 'any', 'all' ]))
},
handler: dns.list,
},
},
}