-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathauth.js
99 lines (92 loc) · 2.37 KB
/
auth.js
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
const { UniqueConstraintError } = require("sequelize");
const { sequelize, Auth } = require("./db");
const {
generateSnowflake,
generateToken,
generateHandle,
generateDiscriminator,
formatName,
} = require("./utils");
const { green } = require("./words.json");
const { logger } = require("./log");
const authenticate = async function (token) {
const result = await Auth.findOne({
where: {
token,
},
});
if (result) {
result.lastSeenAt = Date.now();
await result.save();
const { snowflake, handle, discriminator, lastSeenAt } = result;
logger.info(
`[authenticate] Authenticating ${handle}#${discriminator}, snowflake ID: ${snowflake}`
);
return { snowflake, handle, discriminator };
}
return undefined;
};
const newUser = async function (tries = process.env.MAX_UNIQUE_ATTEMPTS) {
try {
const newUser = {
snowflake: generateSnowflake(),
token: generateToken(),
handle: generateHandle(),
discriminator: generateDiscriminator(),
};
const newModel = await Auth.create(newUser);
return newUser;
} catch (e) {
if (e instanceof UniqueConstraintError) {
if (tries) {
return await newUser(tries - 1);
}
}
throw e;
}
};
const getUser = async function (snowflake) {
const model = await Auth.findOne({ where: { snowflake } });
return {
snowflake,
handle: model.handle,
discriminator: model.discriminator,
};
};
const changeHandle = async function (
snowflake,
tries = process.env.MAX_UNIQUE_ATTEMPTS
) {
try {
const result = await Auth.findOne({
where: {
snowflake,
},
});
if (result) {
const { handle, discriminator } = result;
result.handle = generateHandle();
result.discriminator = generateDiscriminator();
await result.save();
logger.info(
`[changeHandle] Changed handle of ${formatName(
handle,
discriminator
)} to ${formatName(result.handle, result.discriminator)}`
);
return {
snowflake: result.snowflake,
handle: result.handle,
discriminator: result.discriminator,
};
}
} catch (e) {
if (e instanceof UniqueConstraintError) {
if (tries) {
return await changeHandle(snowflake, tries - 1);
}
}
throw e;
}
};
module.exports = { authenticate, newUser, getUser, changeHandle };