Skip to content
Snippets Groups Projects
Commit 1558d5d3 authored by Richard Fernando Heise Ferreira's avatar Richard Fernando Heise Ferreira
Browse files

Merge branch 'issue-43/delete-reset-ticket-after-use' into 'develop'

issue #43: delete reset ticket after use

See merge request !38
parents 9c8c377b a2bed0ac
Branches
No related tags found
1 merge request!38issue #43: delete reset ticket after use
import { integer, pgTable, serial } from "drizzle-orm/pg-core"; import { integer, numeric, pgTable, serial } from "drizzle-orm/pg-core";
import { createInsertSchema, createSelectSchema } from "drizzle-zod"; import { createInsertSchema, createSelectSchema } from "drizzle-zod";
import type { z } from "zod"; import type { z } from "zod";
...@@ -6,9 +6,9 @@ const userStatsTable = pgTable('user_stats', { ...@@ -6,9 +6,9 @@ const userStatsTable = pgTable('user_stats', {
id: serial('id').primaryKey() id: serial('id').primaryKey()
.unique() .unique()
.notNull(), .notNull(),
score: integer('score') score: numeric('score')
.notNull() .notNull()
.default(0), .default('0.0'),
likes: integer('likes').notNull() likes: integer('likes').notNull()
.default(0), .default(0),
likes_received: integer('likes_received').notNull() likes_received: integer('likes_received').notNull()
......
...@@ -27,14 +27,14 @@ export const passRouter = new Hono() ...@@ -27,14 +27,14 @@ export const passRouter = new Hono()
if(user == null) if(user == null)
throw new Error(); throw new Error();
let resetTickets = await passwordRecoveryService.findByUserId(user.id) const resetTickets = await passwordRecoveryService.findByUserId(user.id)
if(resetTickets == null) if(resetTickets == null)
throw new Error(); throw new Error();
/* /*
* Find reset ticket in database * Find reset ticket in database
*/ */
var resetTicket: PasswordRecoveryModel | any = null let resetTicket: PasswordRecoveryModel | any = null
resetTickets.forEach(element => { resetTickets.forEach(element => {
if(element.tokenHash == token[0]) if(element.tokenHash == token[0])
resetTicket = element resetTicket = element
...@@ -55,13 +55,7 @@ export const passRouter = new Hono() ...@@ -55,13 +55,7 @@ export const passRouter = new Hono()
await userService.update(user) await userService.update(user)
) )
/* await passwordRecoveryService.delete(resetTicket.id)
* Set this ticket as used and not valid
*/
resetTicket.validToken = false;
resetTicket.tokenUsed = true;
await passwordRecoveryService.update(resetTicket)
return c.json({ ret }) return c.json({ ret })
} catch (e) { } catch (e) {
...@@ -87,14 +81,13 @@ export const passRouter = new Hono() ...@@ -87,14 +81,13 @@ export const passRouter = new Hono()
) )
/* /*
* When a ticket is generated, the last one is set as invalid * When a ticket is generated, the last one is deleted
*/ */
const ticketList = await passwordRecoveryService.findByUserId(user.id) const ticketList = await passwordRecoveryService.findByUserId(user.id)
if(ticketList?.length != 0){ if(ticketList?.length != 0){
let lastTicket = ticketList![ticketList!.length - 1] const lastTicket = ticketList![ticketList!.length - 1]
if(lastTicket.validToken){ if(lastTicket.validToken){
lastTicket.validToken = false await passwordRecoveryService.delete(lastTicket.id)
await passwordRecoveryService.update(lastTicket)
} }
} }
......
...@@ -14,7 +14,7 @@ export class PasswordRecoveryService { ...@@ -14,7 +14,7 @@ export class PasswordRecoveryService {
isNotValidTicket(resetTicket: PasswordRecoveryModel): boolean { isNotValidTicket(resetTicket: PasswordRecoveryModel): boolean {
if(resetTicket == null) return true if(resetTicket == null) return true
let is_expired: boolean = Date.parse(resetTicket.expirationDate) < Date.now() const is_expired: boolean = Date.parse(resetTicket.expirationDate) < Date.now()
if(!resetTicket.validToken || is_expired || resetTicket.tokenUsed) if(!resetTicket.validToken || is_expired || resetTicket.tokenUsed)
return true return true
return false return false
...@@ -36,13 +36,13 @@ export class PasswordRecoveryService { ...@@ -36,13 +36,13 @@ export class PasswordRecoveryService {
emailTemplatePasswordRecovery(resetTicket: PasswordRecoveryModel): string{ emailTemplatePasswordRecovery(resetTicket: PasswordRecoveryModel): string{
let recover_link: string = process.env["URL"] + '/reset-password/'+resetTicket.tokenHash const recover_link: string = process.env["URL"] + '/reset-password/'+resetTicket.tokenHash
let token_link: string = recover_link + "?token=" + resetTicket.tokenHash const token_link: string = recover_link + "?token=" + resetTicket.tokenHash
let expirationDate = new Date(resetTicket.expirationDate) const expirationDate = new Date(resetTicket.expirationDate)
expirationDate.setHours(expirationDate.getHours() - 1) expirationDate.setHours(expirationDate.getHours() - 1)
let requestedDate = expirationDate.toLocaleString('pt-br', { timeZone: 'America/Sao_Paulo'}) const requestedDate = expirationDate.toLocaleString('pt-br', { timeZone: 'America/Sao_Paulo'})
let text = ` const text = `
<head> <head>
<style> <style>
...@@ -109,9 +109,9 @@ export class PasswordRecoveryService { ...@@ -109,9 +109,9 @@ export class PasswordRecoveryService {
}*/ }*/
async create(user: UserDto, tx?: db): Promise<PasswordRecoveryModel>{ async create(user: UserDto, tx?: db): Promise<PasswordRecoveryModel>{
let tokenExpirationDate = this.generateExpirationDate() const tokenExpirationDate = this.generateExpirationDate()
let newTokenHash = this.generateToken(user?.email, tokenExpirationDate) const newTokenHash = this.generateToken(user?.email, tokenExpirationDate)
let resetTicket = { const resetTicket = {
userId: user!.id, userId: user!.id,
tokenHash: newTokenHash, tokenHash: newTokenHash,
expirationDate: tokenExpirationDate, expirationDate: tokenExpirationDate,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment