Merge pull request #3269 from specklesystems/fabians/core-ioc-50
chore(server): core IoC #50 - getTokenAppInfoFactory
This commit is contained in:
@@ -105,3 +105,8 @@ export type PassportAuthenticateHandlerBuilder = (
|
||||
strategy: Strategy | string,
|
||||
options?: Optional<AuthenticateOptions>
|
||||
) => Handler
|
||||
|
||||
export type GetTokenAppInfo = (params: {
|
||||
token: string
|
||||
appId?: string
|
||||
}) => Promise<ServerAppRecord | undefined>
|
||||
|
||||
@@ -13,6 +13,7 @@ import {
|
||||
GetApp,
|
||||
GetAuthorizationCode,
|
||||
GetRefreshToken,
|
||||
GetTokenAppInfo,
|
||||
RegisterDefaultApp,
|
||||
RevokeExistingAppCredentials,
|
||||
RevokeExistingAppCredentialsForUser,
|
||||
@@ -412,3 +413,31 @@ export const getRefreshTokenFactory =
|
||||
async ({ id }) => {
|
||||
return await tables.refreshTokens(deps.db).select('*').where({ id }).first()
|
||||
}
|
||||
|
||||
export const getTokenAppInfoFactory =
|
||||
(deps: { db: Knex }): GetTokenAppInfo =>
|
||||
async (params: { token: string; appId?: string }) => {
|
||||
const { token, appId } = params
|
||||
const tokenId = token.slice(0, 10)
|
||||
|
||||
const q = tables
|
||||
.apiTokens(deps.db)
|
||||
.select<ServerAppRecord[]>(ServerApps.cols)
|
||||
.where({
|
||||
[ApiTokens.col.id]: tokenId,
|
||||
...(appId
|
||||
? {
|
||||
[UserServerAppTokens.col.appId]: appId
|
||||
}
|
||||
: {})
|
||||
})
|
||||
.innerJoin(
|
||||
UserServerAppTokens.name,
|
||||
ApiTokens.col.id,
|
||||
UserServerAppTokens.col.tokenId
|
||||
)
|
||||
.innerJoin(ServerApps.name, ServerApps.col.id, UserServerAppTokens.col.appId)
|
||||
.first()
|
||||
|
||||
return await q
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { db } from '@/db/knex'
|
||||
import { getTokenAppInfoFactory } from '@/modules/auth/repositories/apps'
|
||||
import { Resolvers } from '@/modules/core/graph/generated/graphql'
|
||||
import { canCreateAppToken } from '@/modules/core/helpers/token'
|
||||
import { getTokenAppInfo } from '@/modules/core/repositories/tokens'
|
||||
import { createAppToken } from '@/modules/core/services/tokens'
|
||||
|
||||
const getTokenAppInfo = getTokenAppInfoFactory({ db })
|
||||
|
||||
export = {
|
||||
Query: {
|
||||
async authenticatedAsApp(_parent, _args, ctx) {
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
import { ApiTokens, ServerApps, UserServerAppTokens } from '@/modules/core/dbSchema'
|
||||
import { ServerAppRecord } from '@/modules/core/helpers/types'
|
||||
|
||||
export async function getTokenAppInfo(params: { token: string; appId?: string }) {
|
||||
const { token, appId } = params
|
||||
const tokenId = token.slice(0, 10)
|
||||
|
||||
const q = ApiTokens.knex()
|
||||
.select<ServerAppRecord[]>(ServerApps.cols)
|
||||
.where({
|
||||
[ApiTokens.col.id]: tokenId,
|
||||
...(appId
|
||||
? {
|
||||
[UserServerAppTokens.col.appId]: appId
|
||||
}
|
||||
: {})
|
||||
})
|
||||
.innerJoin(
|
||||
UserServerAppTokens.name,
|
||||
ApiTokens.col.id,
|
||||
UserServerAppTokens.col.tokenId
|
||||
)
|
||||
.innerJoin(ServerApps.name, ServerApps.col.id, UserServerAppTokens.col.appId)
|
||||
.first()
|
||||
|
||||
return await q
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import bcrypt from 'bcrypt'
|
||||
import crs from 'crypto-random-string'
|
||||
import knex from '@/db/knex'
|
||||
import knex, { db } from '@/db/knex'
|
||||
import {
|
||||
ServerAcl,
|
||||
ApiTokens,
|
||||
@@ -13,10 +13,10 @@ import {
|
||||
TokenResourceAccessRecord,
|
||||
TokenValidationResult
|
||||
} from '@/modules/core/helpers/types'
|
||||
import { getTokenAppInfo } from '@/modules/core/repositories/tokens'
|
||||
import { Optional, ServerRoles } from '@speckle/shared'
|
||||
import { TokenResourceIdentifierInput } from '@/modules/core/graph/generated/graphql'
|
||||
import { UserInputError } from '@/modules/core/errors/userinput'
|
||||
import { getTokenAppInfoFactory } from '@/modules/auth/repositories/apps'
|
||||
|
||||
/*
|
||||
Tokens
|
||||
@@ -130,6 +130,7 @@ export async function validateToken(
|
||||
return { valid: false }
|
||||
}
|
||||
|
||||
const getTokenAppInfo = getTokenAppInfoFactory({ db })
|
||||
const valid = await bcrypt.compare(tokenContent, token.tokenDigest)
|
||||
|
||||
if (valid) {
|
||||
|
||||
Reference in New Issue
Block a user