Skip to content

Commit

Permalink
JWT 관련 테스트 제거
Browse files Browse the repository at this point in the history
  • Loading branch information
tirr-c committed Aug 10, 2023
1 parent 07267c1 commit 3bd5d76
Showing 1 changed file with 0 additions and 221 deletions.
221 changes: 0 additions & 221 deletions test/api/login.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@ import * as request from 'supertest'
import * as tweetnacl from 'tweetnacl'
import { v4 as uuid } from 'uuid'
import moment from 'moment'
import { jwtVerify } from 'jose'
import { createPublicKey } from 'crypto'
import { app, model, config } from '../_setup'
import { createUser, createGroup, createPermission, createGroupRelation } from '../_test_utils'

test('test login with credential', async t => {
let username = ''
Expand Down Expand Up @@ -317,221 +314,3 @@ test('test legacy login', async t => {
})
t.is(response.status, 200)
})

/* eslint-enable @typescript-eslint/naming-convention */

test('test jwt', async t => {
let username = ''
let password = ''
let userIdx = -1

await model.pgDo(async tr => {
username = uuid()
password = uuid()
userIdx = await model.users.create(
tr, username, password, uuid(), '/bin/bash', 'en')
}, ['users'])

const agent = request.agent(app)

let response

response = await agent.post('/api/issue-jwt').send()
t.is(response.status, 401)

response = await agent.post('/api/login').send({
username,
password,
})
t.is(response.status, 200)

// test expiry
{
response = await agent.post('/api/issue-jwt').send()
t.is(response.status, 200)
const token = response.body.token as string

const futureDate = new Date()
futureDate.setSeconds(futureDate.getSeconds() + config.jwt.expirySec + 20)

const publicKey = createPublicKey({
key: config.jwt.privateKey,
format: 'pem',
})
t.throwsAsync(() => jwtVerify(
token,
publicKey,
{
algorithms: ['ES256'],
audience: config.jwt.audience,
issuer: config.jwt.issuer,
currentDate: futureDate,
},
))
}

// with no permission check
{
response = await agent.post('/api/issue-jwt').send()
t.is(response.status, 200)
const token = response.body.token as string
t.falsy(response.body.hasPermission)

const publicKey = createPublicKey({
key: config.jwt.privateKey,
format: 'pem',
})
const { payload } = await jwtVerify(
token,
publicKey,
{
algorithms: ['ES256'],
audience: config.jwt.audience,
issuer: config.jwt.issuer,
currentDate: new Date(),
},
)

t.is(payload.userIdx, userIdx)
t.is(payload.username, username)
t.is(payload.permissionIdx, -1)
}

// with permission check, but has no permission
let groupIdx = -1
let permissionIdx = -1
{
await model.pgDo(async tr => {
groupIdx = await createGroup(tr, model)
permissionIdx = await createPermission(tr, model)
await model.permissions.addPermissionRequirement(tr, groupIdx, permissionIdx)
}, ['group_reachable_cache'])
response = await agent.post('/api/issue-jwt').send({
permissionIdx,
})
t.is(response.status, 200)
const token = response.body.token as string
t.false(response.body.hasPermission)

const publicKey = createPublicKey({
key: config.jwt.privateKey,
format: 'pem',
})
const { payload } = await jwtVerify(
token,
publicKey,
{
algorithms: ['ES256'],
audience: config.jwt.audience,
issuer: config.jwt.issuer,
currentDate: new Date(),
},
)

t.is(payload.userIdx, userIdx)
t.is(payload.username, username)
t.is(payload.permissionIdx, -1)
}

// with permission check, and has permission
{
await model.pgDo(async tr => {
await model.users.addUserMembership(tr, userIdx, groupIdx)
})
response = await agent.post('/api/issue-jwt').send({
permissionIdx,
})
t.is(response.status, 200)
const token = response.body.token as string
t.true(response.body.hasPermission)

const publicKey = createPublicKey({
key: config.jwt.privateKey,
format: 'pem',
})
const { payload } = await jwtVerify(
token,
publicKey,
{
algorithms: ['ES256'],
audience: config.jwt.audience,
issuer: config.jwt.issuer,
currentDate: new Date(),
},
)

t.is(payload.userIdx, userIdx)
t.is(payload.username, username)
t.is(payload.permissionIdx, permissionIdx)
}

// cross origin
{
response = await agent.options('/api/issue-jwt').send()
t.falsy(response.header['access-control-allow-origin'])

response = await agent.options('/api/issue-jwt')
.set('origin', 'https://reservation.snucse.org')
.set('access-control-request-method', 'POST')
.send()
t.is(response.status, 204)
t.is(response.header['access-control-allow-origin'], 'https://reservation.snucse.org')
t.is(response.header['access-control-allow-methods'], 'POST')
t.is(response.header['access-control-allow-credentials'], 'true')

response = await agent.post('/api/issue-jwt')
.set('origin', 'https://reservation.snucse.org')
.set('access-control-request-method', 'POST')
.send()
t.is(response.status, 200)
}

response = await agent.post('/api/logout').send()
t.is(response.status, 200)

response = await agent.post('/api/issue-jwt').send()
t.is(response.status, 401)
})

test('login and jwt', async t => {
let username = ''
let password = ''
let userIdx = -1

await model.pgDo(async tr => {
username = uuid()
password = uuid()
userIdx = await model.users.create(
tr, username, password, uuid(), '/bin/bash', 'en')
}, ['users'])

const agent = request.agent(app)
let response

{
response = await agent.post('/api/login/jwt').send({ username, password })
t.is(response.status, 200)
const token = response.body.token as string
t.falsy(response.body.hasPermission)

const publicKey = createPublicKey({
key: config.jwt.privateKey,
format: 'pem',
})

const { payload } = await jwtVerify(
token,
publicKey,
{
algorithms: ['ES256'],
audience: config.jwt.audience,
issuer: config.jwt.issuer,
currentDate: new Date(),
},
)

t.is(payload.userIdx, userIdx)
t.is(payload.username, username)
t.is(payload.permissionIdx, -1)
}
})

0 comments on commit 3bd5d76

Please sign in to comment.