Skip to content

Commit

Permalink
Signer mock interfaces (#10510)
Browse files Browse the repository at this point in the history
add mock signer interfaces
  • Loading branch information
alecps authored Aug 22, 2023
1 parent 5f61a5b commit 3abfd6b
Show file tree
Hide file tree
Showing 8 changed files with 251 additions and 213 deletions.
2 changes: 1 addition & 1 deletion packages/phone-number-privacy/signer/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@celo/phone-number-privacy-signer",
"version": "3.0.0-beta.12",
"version": "3.0.0-beta.13",
"description": "Signing participator of ODIS",
"author": "Celo",
"license": "Apache-2.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,81 +1,78 @@
// import { ErrorMessage } from '@celo/phone-number-privacy-common'
import { ErrorMessage } from '@celo/phone-number-privacy-common'
import Logger from 'bunyan'
import { Knex } from 'knex'
// import { config } from '../../../config'
// import { AccountRecord, ACCOUNTS_COLUMNS, ACCOUNTS_TABLE, toAccountRecord } from '../models/account'
// import { doMeteredSql } from '../utils'
import { config } from '../../../config'
import { AccountRecord, ACCOUNTS_COLUMNS, ACCOUNTS_TABLE, toAccountRecord } from '../models/account'
import { doMeteredSql } from '../utils'

/*
* Returns how many queries the account has already performed.
*/
export async function getPerformedQueryCount(
_db: Knex,
_account: string,
_logger: Logger
db: Knex,
account: string,
logger: Logger
): Promise<number> {
return Promise.resolve(0)
// logger.debug({ account }, 'Getting performed query count')
// return doMeteredSql(
// 'getPerformedQueryCount',
// ErrorMessage.DATABASE_GET_FAILURE,
// logger,
// async () => {
// const queryCounts = await db<AccountRecord>(ACCOUNTS_TABLE)
// .where(ACCOUNTS_COLUMNS.address, account)
// .select(ACCOUNTS_COLUMNS.numLookups)
// .first()
// .timeout(config.db.timeout)
// return queryCounts === undefined ? 0 : queryCounts[ACCOUNTS_COLUMNS.numLookups]
// }
// )
logger.debug({ account }, 'Getting performed query count')
return doMeteredSql(
'getPerformedQueryCount',
ErrorMessage.DATABASE_GET_FAILURE,
logger,
async () => {
const queryCounts = await db<AccountRecord>(ACCOUNTS_TABLE)
.where(ACCOUNTS_COLUMNS.address, account)
.select(ACCOUNTS_COLUMNS.numLookups)
.first()
.timeout(config.db.timeout)
return queryCounts === undefined ? 0 : queryCounts[ACCOUNTS_COLUMNS.numLookups]
}
)
}

// async function getAccountExists(
// db: Knex,
// account: string,
// logger: Logger,
// trx?: Knex.Transaction
// ): Promise<boolean> {
// return Promise.resolve(true)
// return doMeteredSql('getAccountExists', ErrorMessage.DATABASE_GET_FAILURE, logger, async () => {
// const sql = db<AccountRecord>(ACCOUNTS_TABLE)
// .where(ACCOUNTS_COLUMNS.address, account)
// .first()
// .timeout(config.db.timeout)
async function getAccountExists(
db: Knex,
account: string,
logger: Logger,
trx?: Knex.Transaction
): Promise<boolean> {
return doMeteredSql('getAccountExists', ErrorMessage.DATABASE_GET_FAILURE, logger, async () => {
const sql = db<AccountRecord>(ACCOUNTS_TABLE)
.where(ACCOUNTS_COLUMNS.address, account)
.first()
.timeout(config.db.timeout)

// const accountRecord = await (trx != null ? sql.transacting(trx) : sql)
// return !!accountRecord
// })
// }
const accountRecord = await (trx != null ? sql.transacting(trx) : sql)
return !!accountRecord
})
}

/*
* Increments query count in database. If record doesn't exist, create one.
*/
export async function incrementQueryCount(
_db: Knex,
_account: string,
_logger: Logger,
_trx?: Knex.Transaction
db: Knex,
account: string,
logger: Logger,
trx?: Knex.Transaction
): Promise<void> {
return
// logger.debug({ account }, 'Incrementing query count')
// return doMeteredSql(
// 'incrementQueryCount',
// ErrorMessage.DATABASE_INSERT_FAILURE,
// logger,
// async () => {
// if (await getAccountExists(db, account, logger, trx)) {
// const sql = db<AccountRecord>(ACCOUNTS_TABLE)
// .where(ACCOUNTS_COLUMNS.address, account)
// .increment(ACCOUNTS_COLUMNS.numLookups, 1)
// .timeout(config.db.timeout)
// await (trx != null ? sql.transacting(trx) : sql)
// } else {
// const sql = db<AccountRecord>(ACCOUNTS_TABLE)
// .insert(toAccountRecord(account, 1))
// .timeout(config.db.timeout)
// await (trx != null ? sql.transacting(trx) : sql)
// }
// }
// )
logger.debug({ account }, 'Incrementing query count')
return doMeteredSql(
'incrementQueryCount',
ErrorMessage.DATABASE_INSERT_FAILURE,
logger,
async () => {
if (await getAccountExists(db, account, logger, trx)) {
const sql = db<AccountRecord>(ACCOUNTS_TABLE)
.where(ACCOUNTS_COLUMNS.address, account)
.increment(ACCOUNTS_COLUMNS.numLookups, 1)
.timeout(config.db.timeout)
await (trx != null ? sql.transacting(trx) : sql)
} else {
const sql = db<AccountRecord>(ACCOUNTS_TABLE)
.insert(toAccountRecord(account, 1))
.timeout(config.db.timeout)
await (trx != null ? sql.transacting(trx) : sql)
}
}
)
}
Original file line number Diff line number Diff line change
@@ -1,48 +1,46 @@
// import { ErrorMessage } from '@celo/phone-number-privacy-common'
import { ErrorMessage } from '@celo/phone-number-privacy-common'
import Logger from 'bunyan'
import { Knex } from 'knex'
// import { config } from '../../../config'
// import {
// PnpSignRequestRecord,
// // REQUESTS_COLUMNS,
// REQUESTS_TABLE,
// toPnpSignRequestRecord,
// } from '../models/request'
// import { doMeteredSql } from '../utils'
import { config } from '../../../config'
import {
PnpSignRequestRecord,
REQUESTS_COLUMNS,
REQUESTS_TABLE,
toPnpSignRequestRecord,
} from '../models/request'
import { doMeteredSql } from '../utils'

export async function getRequestExists( // TODO try insert, if primary key error, then duplicate request
_db: Knex,
_account: string,
_blindedQuery: string,
_logger: Logger
db: Knex,
account: string,
blindedQuery: string,
logger: Logger
): Promise<boolean> {
return Promise.resolve(false)
// logger.debug(`Checking if request exists for account: ${account}, blindedQuery: ${blindedQuery}`)
// return doMeteredSql('getRequestExists', ErrorMessage.DATABASE_GET_FAILURE, logger, async () => {
// const existingRequest = await db<PnpSignRequestRecord>(REQUESTS_TABLE)
// .where({
// [REQUESTS_COLUMNS.address]: account,
// [REQUESTS_COLUMNS.blindedQuery]: blindedQuery, // TODO are we using the primary key correctly??
// })
// .first()
// .timeout(config.db.timeout)
// return !!existingRequest // TODO use EXISTS query??
// })
logger.debug(`Checking if request exists for account: ${account}, blindedQuery: ${blindedQuery}`)
return doMeteredSql('getRequestExists', ErrorMessage.DATABASE_GET_FAILURE, logger, async () => {
const existingRequest = await db<PnpSignRequestRecord>(REQUESTS_TABLE)
.where({
[REQUESTS_COLUMNS.address]: account,
[REQUESTS_COLUMNS.blindedQuery]: blindedQuery, // TODO are we using the primary key correctly??
})
.first()
.timeout(config.db.timeout)
return !!existingRequest // TODO use EXISTS query??
})
}

export async function insertRequest(
_db: Knex,
_account: string,
_blindedQuery: string,
_logger: Logger,
_trx?: Knex.Transaction
db: Knex,
account: string,
blindedQuery: string,
logger: Logger,
trx?: Knex.Transaction
): Promise<void> {
return
// logger.debug(`Storing salt request for: ${account}, blindedQuery: ${blindedQuery}`)
// return doMeteredSql('insertRequest', ErrorMessage.DATABASE_INSERT_FAILURE, logger, async () => {
// const sql = db<PnpSignRequestRecord>(REQUESTS_TABLE)
// .insert(toPnpSignRequestRecord(account, blindedQuery))
// .timeout(config.db.timeout)
// await (trx != null ? sql.transacting(trx) : sql)
// })
logger.debug(`Storing salt request for: ${account}, blindedQuery: ${blindedQuery}`)
return doMeteredSql('insertRequest', ErrorMessage.DATABASE_INSERT_FAILURE, logger, async () => {
const sql = db<PnpSignRequestRecord>(REQUESTS_TABLE)
.insert(toPnpSignRequestRecord(account, blindedQuery))
.timeout(config.db.timeout)
await (trx != null ? sql.transacting(trx) : sql)
})
}
8 changes: 8 additions & 0 deletions packages/phone-number-privacy/signer/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ export interface SignerConfig {
fullNodeTimeoutMs: number
fullNodeRetryCount: number
fullNodeRetryDelayMs: number
shouldMockAccountService: boolean
mockDek: string
mockTotalQuota: number
shouldMockRequestService: boolean
}

const env = process.env as any
Expand Down Expand Up @@ -175,4 +179,8 @@ export const config: SignerConfig = {
fullNodeTimeoutMs: Number(env.TIMEOUT_MS ?? FULL_NODE_TIMEOUT_IN_MS),
fullNodeRetryCount: Number(env.RETRY_COUNT ?? RETRY_COUNT),
fullNodeRetryDelayMs: Number(env.RETRY_DELAY_IN_MS ?? RETRY_DELAY_IN_MS),
shouldMockAccountService: toBool(env.SHOULD_MOCK_ACCOUNT_SERVICE, false),
mockDek: env.MOCK_DEK,
mockTotalQuota: Number(env.MOCK_TOTAL_QUOTA ?? 10),
shouldMockRequestService: toBool(env.SHOULD_MOCK_REQUEST_SERVICE, false),
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ import {
WarningMessage,
} from '@celo/phone-number-privacy-common'
import { Request } from 'express'
import { Knex } from 'knex'
import { computeBlindedSignature } from '../../../common/bls/bls-cryptography-client'
import { getRequestExists } from '../../../common/database/wrappers/request'
import { DefaultKeyName, Key, KeyProvider } from '../../../common/key-management/key-provider-base'
import { Counters, Histograms } from '../../../common/metrics'
import { getSignerVersion, SignerConfig } from '../../../config'
Expand All @@ -28,7 +26,6 @@ import { AccountService } from '../../services/account-service'
import { PnpRequestService } from '../../services/request-service'

export function pnpSign(
db: Knex,
config: SignerConfig,
requestService: PnpRequestService,
accountService: AccountService,
Expand Down Expand Up @@ -60,11 +57,10 @@ export function pnpSign(

let usedQuota = await requestService.getUsedQuotaForAccount(request.body.account, ctx)

const duplicateRequest = await isDuplicateRequest(
db,
const duplicateRequest = await requestService.isDuplicateRequest(
request.body.account,
request.body.blindedQueryPhoneNumber,
logger
ctx
)

Histograms.userRemainingQuotaAtRequest
Expand Down Expand Up @@ -134,18 +130,6 @@ export function pnpSign(
}
}

function isDuplicateRequest(
db: Knex<any, any[]>,
account: string,
blindedQueryPhoneNumber: string,
logger: any
): Promise<boolean> {
return getRequestExists(db, account, blindedQueryPhoneNumber, logger).catch((err) => {
logger.error(err, 'Failed to check if request already exists in db')
return false
})
}

async function sign(
blindedMessage: string,
key: Key,
Expand Down
Loading

0 comments on commit 3abfd6b

Please sign in to comment.