Skip to content

Commit

Permalink
fix: Use the correct defaults for the invite token expiry
Browse files Browse the repository at this point in the history
  • Loading branch information
sradevski committed Nov 28, 2024
1 parent 3b1a63e commit 75d060c
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 8 deletions.
29 changes: 29 additions & 0 deletions integration-tests/http/__tests__/invite/admin/invite.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,35 @@ medusaIntegrationTestRunner({
expect(e.response.data.message).toEqual("Unauthorized")
})
})

it("should fail to accept with an expired token", async () => {
jest.useFakeTimers()

const signup = await api.post("/auth/user/emailpass/register", {
email: "[email protected]",
password: "secret_password",
})

// Advance time by 25 hours
jest.advanceTimersByTime(25 * 60 * 60 * 1000)

await api
.post(
`/admin/invites/accept?token=${invite.token}`,
{
first_name: "Another Test",
last_name: "User",
},
{
headers: { authorization: `Bearer ${signup.data.token}` },
}
)
.catch((e) => {
expect(e.response.status).toEqual(401)
expect(e.response.data.message).toEqual("Unauthorized")
})
})

it("should resend an invite", async () => {
const resendResponse = (
await api.post(`/admin/invites/${invite.id}/resend`, {}, adminHeaders)
Expand Down
13 changes: 10 additions & 3 deletions packages/modules/user/integration-tests/__tests__/invite.spec.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import { IUserModuleService } from "@medusajs/framework/types/dist/user"
import { IUserModuleService } from "@medusajs/framework/types"
import { Modules, UserEvents } from "@medusajs/framework/utils"
import {
MockEventBusService,
moduleIntegrationTestRunner,
} from "@medusajs/test-utils"
import jwt, { JwtPayload } from "jsonwebtoken"

jest.setTimeout(30000)

const today = new Date()
const expireDate = new Date(today.setDate(today.getDate() + 10))
const expireDate = new Date().setMilliseconds(
new Date().getMilliseconds() + 60 * 60 * 24
)

const defaultInviteData = [
{
Expand Down Expand Up @@ -111,6 +113,11 @@ moduleIntegrationTestRunner<IUserModuleService>({
id,
})
)

const tokenContent = jwt.decode(invite.token) as JwtPayload
expect(tokenContent.exp).toBeLessThanOrEqual(
Date.now() / 1000 + 60 * 60 * 24
)
})

it("should throw an error when an invite with the given id does not exist", async () => {
Expand Down
9 changes: 4 additions & 5 deletions packages/modules/user/src/services/user-module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ type InjectedDependencies = {
inviteService: ModulesSdkTypes.IMedusaInternalService<any>
}

// 1 day
const DEFAULT_VALID_INVITE_DURATION = 60 * 60 * 24 * 1000
const DEFAULT_VALID_INVITE_DURATION_SECONDS = 60 * 60 * 24
export default class UserModuleService
extends MedusaService<{
User: {
Expand Down Expand Up @@ -60,7 +59,7 @@ export default class UserModuleService
jwtSecret: moduleDeclaration["jwt_secret"],
expiresIn:
parseInt(moduleDeclaration["valid_duration"]) ||
DEFAULT_VALID_INVITE_DURATION,
DEFAULT_VALID_INVITE_DURATION_SECONDS,
}

if (!this.config.jwtSecret) {
Expand Down Expand Up @@ -153,7 +152,7 @@ export default class UserModuleService
return {
id: invite.id,
expires_at: new Date().setMilliseconds(
new Date().getMilliseconds() + this.config.expiresIn
new Date().getMilliseconds() + this.config.expiresIn * 1000
),
token: this.generateToken({ id: invite.id, email: invite.email }),
}
Expand Down Expand Up @@ -325,7 +324,7 @@ export default class UserModuleService
return {
id: invite.id,
expires_at: new Date().setMilliseconds(
new Date().getMilliseconds() + this.config.expiresIn
new Date().getMilliseconds() + this.config.expiresIn * 1000
),
token: this.generateToken({ id: invite.id, email: invite.email }),
}
Expand Down

0 comments on commit 75d060c

Please sign in to comment.