Skip to content

Commit

Permalink
Uber 695 (#3567)
Browse files Browse the repository at this point in the history
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
  • Loading branch information
haiodo authored Aug 7, 2023
1 parent afc881a commit 85d0400
Show file tree
Hide file tree
Showing 6 changed files with 164 additions and 141 deletions.
4 changes: 2 additions & 2 deletions packages/core/src/operations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ export class TxOperations implements Omit<Client, 'notify'> {
return new ApplyOperations(this, scope)
}

async diffUpdate (doc: Doc, raw: Doc | Data<Doc>, date: Timestamp): Promise<Doc> {
async diffUpdate (doc: Doc, raw: Doc | Data<Doc>, date: Timestamp, account?: Ref<Account>): Promise<Doc> {
// We need to update fields if they are different.
const documentUpdate: DocumentUpdate<Doc> = {}
for (const [k, v] of Object.entries(raw)) {
Expand All @@ -285,7 +285,7 @@ export class TxOperations implements Omit<Client, 'notify'> {
}
}
if (Object.keys(documentUpdate).length > 0) {
await this.update(doc, documentUpdate, false, date, doc.modifiedBy)
await this.update(doc, documentUpdate, false, date, account ?? doc.modifiedBy)
TxProcessor.applyUpdate(doc, documentUpdate)
}
return doc
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@
export let project: Project | undefined = undefined
export let namePlaceholder: ''
export let descriptionPlaceholder: ''
export let namePlaceholder: string = ''
export let descriptionPlaceholder: string = ''
export let statusFactory: (
client: TxOperations | ApplyOperations,
spaceId: Status['space'],
Expand Down Expand Up @@ -208,6 +208,8 @@
{ _id: { $nin: project ? [project._id] : [] } },
(res) => (projectsIdentifiers = new Set(res.map(({ identifier }) => identifier)))
)
$: identifier = identifier.toLocaleUpperCase().replaceAll('-', '_').replaceAll(' ', '_').substring(0, 5)
</script>

<Card
Expand Down Expand Up @@ -237,7 +239,7 @@
autoFocus
on:input={() => {
if (isNew) {
identifier = name.toLocaleUpperCase().replaceAll(' ', '_').substring(0, 5)
identifier = name.toLocaleUpperCase().replaceAll('-', '_').replaceAll(' ', '_').substring(0, 5)
color = isColorSelected ? color : getColorNumberByText(name)
}
}}
Expand All @@ -253,7 +255,6 @@
<div bind:this={changeIdentityRef} class="padding flex-row-center relative">
<EditBox
bind:value={identifier}
on:input
disabled={!isNew}
placeholder={tracker.string.ProjectIdentifierPlaceholder}
kind={'large-style'}
Expand Down
133 changes: 2 additions & 131 deletions server/front/src/__start.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,134 +14,5 @@
// limitations under the License.
//

import { MinioService } from '@hcengineering/minio'
import { setMetadata } from '@hcengineering/platform'
import serverToken from '@hcengineering/server-token'
import { start } from '.'

const defaultLanguage = process.env.DEFAULT_LANGUAGE ?? 'en'
const SERVER_PORT = parseInt(process.env.SERVER_PORT ?? '8080')

const transactorEndpoint = process.env.TRANSACTOR_URL
if (transactorEndpoint === undefined) {
console.error('please provide transactor url')
process.exit(1)
}

const elasticUrl = process.env.ELASTIC_URL
if (elasticUrl === undefined) {
console.error('please provide elastic url')
process.exit(1)
}

const minioEndpoint = process.env.MINIO_ENDPOINT
if (minioEndpoint === undefined) {
console.error('please provide minio endpoint')
process.exit(1)
}

const minioAccessKey = process.env.MINIO_ACCESS_KEY
if (minioAccessKey === undefined) {
console.error('please provide minio access key')
process.exit(1)
}

const minioSecretKey = process.env.MINIO_SECRET_KEY
if (minioSecretKey === undefined) {
console.error('please provide minio secret key')
process.exit(1)
}

const minio = new MinioService({
endPoint: minioEndpoint,
port: 9000,
useSSL: false,
accessKey: minioAccessKey,
secretKey: minioSecretKey
})

const accountsUrl = process.env.ACCOUNTS_URL
if (accountsUrl === undefined) {
console.error('please provide accounts url')
process.exit(1)
}

const uploadUrl = process.env.UPLOAD_URL
if (uploadUrl === undefined) {
console.error('please provide upload url')
process.exit(1)
}

const collaboratorUrl = process.env.COLLABORATOR_URL
if (collaboratorUrl === undefined) {
console.error('please provide collaborator url')
process.exit(1)
}

const gmailUrl = process.env.GMAIL_URL
if (gmailUrl === undefined) {
console.error('please provide gmail url')
process.exit(1)
}

const calendarUrl = process.env.CALENDAR_URL
if (calendarUrl === undefined) {
console.error('please provide calendar service url')
process.exit(1)
}

const telegramUrl = process.env.TELEGRAM_URL
if (telegramUrl === undefined) {
console.error('please provide telegram url')
process.exit(1)
}

const rekoniUrl = process.env.REKONI_URL
if (rekoniUrl === undefined) {
console.error('please provide rekoni url')
process.exit(1)
}

const modelVersion = process.env.MODEL_VERSION
if (modelVersion === undefined) {
console.error('please provide model version requirement')
process.exit(1)
}

const serverSecret = process.env.SERVER_SECRET
if (serverSecret === undefined) {
console.log('Please provide server secret')
process.exit(1)
}

const title = process.env.TITLE

setMetadata(serverToken.metadata.Secret, serverSecret)

const config = {
transactorEndpoint,
elasticUrl,
minio,
accountsUrl,
uploadUrl,
modelVersion,
collaboratorUrl,
gmailUrl,
telegramUrl,
rekoniUrl,
calendarUrl,
title,
defaultLanguage
}
console.log('Starting Front service with', config)
const shutdown = start(config, SERVER_PORT)

const close = (): void => {
console.trace('Exiting from server')
console.log('Shutdown request accepted')
shutdown()
process.exit(0)
}

process.on('SIGINT', close)
process.on('SIGTERM', close)
import { startFront } from './starter'
startFront()
6 changes: 4 additions & 2 deletions server/front/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@ export function start (
title?: string
defaultLanguage: string
},
port: number
port: number,
extraConfig?: Record<string, string>
): () => void {
const app = express()

Expand Down Expand Up @@ -181,7 +182,8 @@ export function start (
GMAIL_URL: config.gmailUrl,
CALENDAR_URL: config.calendarUrl,
TITLE: config.title,
DEFAULT_LANGUAGE: config.defaultLanguage
DEFAULT_LANGUAGE: config.defaultLanguage,
...(extraConfig ?? {})
})
})

Expand Down
149 changes: 149 additions & 0 deletions server/front/src/starter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
//
// Copyright © 2020, 2021 Anticrm Platform Contributors.
// Copyright © 2021 Hardcore Engineering Inc.
//
// Licensed under the Eclipse Public License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. You may
// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//

import { MinioService } from '@hcengineering/minio'
import { setMetadata } from '@hcengineering/platform'
import serverToken from '@hcengineering/server-token'
import { start } from '.'

export function startFront (extraConfig?: Record<string, string>): void {
const defaultLanguage = process.env.DEFAULT_LANGUAGE ?? 'en'
const SERVER_PORT = parseInt(process.env.SERVER_PORT ?? '8080')

const transactorEndpoint = process.env.TRANSACTOR_URL
if (transactorEndpoint === undefined) {
console.error('please provide transactor url')
process.exit(1)
}

const elasticUrl = process.env.ELASTIC_URL
if (elasticUrl === undefined) {
console.error('please provide elastic url')
process.exit(1)
}

const minioEndpoint = process.env.MINIO_ENDPOINT
if (minioEndpoint === undefined) {
console.error('please provide minio endpoint')
process.exit(1)
}

const minioAccessKey = process.env.MINIO_ACCESS_KEY
if (minioAccessKey === undefined) {
console.error('please provide minio access key')
process.exit(1)
}

const minioSecretKey = process.env.MINIO_SECRET_KEY
if (minioSecretKey === undefined) {
console.error('please provide minio secret key')
process.exit(1)
}

const minio = new MinioService({
endPoint: minioEndpoint,
port: 9000,
useSSL: false,
accessKey: minioAccessKey,
secretKey: minioSecretKey
})

const accountsUrl = process.env.ACCOUNTS_URL
if (accountsUrl === undefined) {
console.error('please provide accounts url')
process.exit(1)
}

const uploadUrl = process.env.UPLOAD_URL
if (uploadUrl === undefined) {
console.error('please provide upload url')
process.exit(1)
}

const collaboratorUrl = process.env.COLLABORATOR_URL
if (collaboratorUrl === undefined) {
console.error('please provide collaborator url')
process.exit(1)
}

const gmailUrl = process.env.GMAIL_URL
if (gmailUrl === undefined) {
console.error('please provide gmail url')
process.exit(1)
}

const calendarUrl = process.env.CALENDAR_URL
if (calendarUrl === undefined) {
console.error('please provide calendar service url')
process.exit(1)
}

const telegramUrl = process.env.TELEGRAM_URL
if (telegramUrl === undefined) {
console.error('please provide telegram url')
process.exit(1)
}

const rekoniUrl = process.env.REKONI_URL
if (rekoniUrl === undefined) {
console.error('please provide rekoni url')
process.exit(1)
}

const modelVersion = process.env.MODEL_VERSION
if (modelVersion === undefined) {
console.error('please provide model version requirement')
process.exit(1)
}

const serverSecret = process.env.SERVER_SECRET
if (serverSecret === undefined) {
console.log('Please provide server secret')
process.exit(1)
}

const title = process.env.TITLE

setMetadata(serverToken.metadata.Secret, serverSecret)

const config = {
transactorEndpoint,
elasticUrl,
minio,
accountsUrl,
uploadUrl,
modelVersion,
collaboratorUrl,
gmailUrl,
telegramUrl,
rekoniUrl,
calendarUrl,
title,
defaultLanguage
}
console.log('Starting Front service with', config)
const shutdown = start(config, SERVER_PORT, extraConfig)

const close = (): void => {
console.trace('Exiting from server')
console.log('Shutdown request accepted')
shutdown()
process.exit(0)
}

process.on('SIGINT', close)
process.on('SIGTERM', close)
}
4 changes: 2 additions & 2 deletions server/middleware/src/modified.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
// limitations under the License.
//

import core, { MeasureContext, ServerStorage, Tx } from '@hcengineering/core'
import core, { MeasureContext, ServerStorage, Tx, systemAccountEmail } from '@hcengineering/core'
import { BroadcastFunc, Middleware, SessionContext, TxMiddlewareResult } from '@hcengineering/server-core'
import { BaseMiddleware } from './base'

Expand All @@ -35,7 +35,7 @@ export class ModifiedMiddleware extends BaseMiddleware implements Middleware {
}

async tx (ctx: SessionContext, tx: Tx): Promise<TxMiddlewareResult> {
if (tx.modifiedBy !== core.account.System) {
if (tx.modifiedBy !== core.account.System && ctx.userEmail !== systemAccountEmail) {
tx.modifiedOn = Date.now()
tx.createdOn = tx.createdOn ?? tx.modifiedOn
}
Expand Down

0 comments on commit 85d0400

Please sign in to comment.