implement basic decode

This commit is contained in:
SrGooglo 2025-02-25 23:07:45 +00:00
parent be0c61a028
commit 35282dc1cd

View File

@ -19,15 +19,13 @@ export default class Token {
}
static async signToken(payload, strategy = "authStrategy") {
const { secret, expiresIn, algorithm } = Token[strategy] ?? Token.authStrategy
const { secret, expiresIn, algorithm } =
Token[strategy] ?? Token.authStrategy
const token = jwt.sign(payload,
secret,
{
const token = jwt.sign(payload, secret, {
expiresIn: expiresIn,
algorithm: algorithm
}
)
algorithm: algorithm,
})
return token
}
@ -43,6 +41,7 @@ export default class Token {
ip_address: payload.ip_address,
client: payload.client,
date: new Date().getTime(),
created_at: new Date().getTime(),
})
await session.save()
@ -51,9 +50,12 @@ export default class Token {
}
static async createRefreshToken(user_id, authToken) {
const jwt_token = await this.signToken({
const jwt_token = await this.signToken(
{
user_id,
}, "refreshStrategy")
},
"refreshStrategy",
)
const refreshRegistry = new RefreshToken({
authToken: authToken,
@ -65,6 +67,20 @@ export default class Token {
return jwt_token
}
static async basicDecode(token) {
const { secret } = Token.authStrategy
return new Promise((resolve, reject) => {
jwt.verify(token, secret, async (err, decoded) => {
if (err) {
reject(err)
}
resolve(decoded)
})
})
}
static async validate(token) {
let result = {
expired: false,
@ -97,7 +113,9 @@ export default class Token {
result.data = decoded
// check account tos violation
const violation = await TosViolations.findOne({ user_id: decoded.user_id })
const violation = await TosViolations.findOne({
user_id: decoded.user_id,
})
if (violation) {
console.log("violation", violation)
@ -112,7 +130,9 @@ export default class Token {
}
const sessions = await Session.find({ user_id: decoded.user_id })
const currentSession = sessions.find((session) => session.token === token)
const currentSession = sessions.find(
(session) => session.token === token,
)
if (!currentSession) {
result.valid = false
@ -120,7 +140,8 @@ export default class Token {
} else {
result.session = currentSession
result.valid = true
result.user = async () => await User.findOne({ _id: decoded.user_id })
result.user = async () =>
await User.findOne({ _id: decoded.user_id })
}
})
@ -140,7 +161,10 @@ export default class Token {
refreshToken: undefined,
}
await jwt.verify(refreshToken, Token.refreshStrategy.secret, async (err, decoded) => {
await jwt.verify(
refreshToken,
Token.refreshStrategy.secret,
async (err, decoded) => {
if (err) {
result.error = err.message
return false
@ -153,7 +177,7 @@ export default class Token {
let currentSession = await Session.findOne({
user_id: decoded.user_id,
token: authToken
token: authToken,
}).catch((err) => {
return null
})
@ -165,16 +189,22 @@ export default class Token {
currentSession = currentSession.toObject()
await Session.findOneAndDelete({ _id: currentSession._id.toString() })
await Session.findOneAndDelete({
_id: currentSession._id.toString(),
})
result.token = await this.createAuthToken({
...currentSession,
date: new Date().getTime(),
})
result.refreshToken = await this.createRefreshToken(decoded.user_id, result.token)
result.refreshToken = await this.createRefreshToken(
decoded.user_id,
result.token,
)
return true
})
},
)
if (result.error) {
throw new OperationError(401, result.error)