mirror of
https://github.com/standardnotes/server
synced 2026-10-18 15:03:08 -04:00
fix: controller naming (#678)
* fix: rename home server controllers to base controllers * fix: rename inversify express controllers to annotated controllers
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
import { ControllerContainerInterface, MapperInterface, Validator } from '@standardnotes/domain-core'
|
||||
import { BaseHttpController, results } from 'inversify-express-utils'
|
||||
import { Request, Response } from 'express'
|
||||
|
||||
import { Item } from '../../../Domain/Item/Item'
|
||||
import { SyncResponseFactoryResolverInterface } from '../../../Domain/Item/SyncResponse/SyncResponseFactoryResolverInterface'
|
||||
import { CheckIntegrity } from '../../../Domain/UseCase/Syncing/CheckIntegrity/CheckIntegrity'
|
||||
import { GetItem } from '../../../Domain/UseCase/Syncing/GetItem/GetItem'
|
||||
import { ApiVersion } from '../../../Domain/Api/ApiVersion'
|
||||
import { SyncItems } from '../../../Domain/UseCase/Syncing/SyncItems/SyncItems'
|
||||
import { HttpStatusCode } from '@standardnotes/responses'
|
||||
import { ItemHttpRepresentation } from '../../../Mapping/Http/ItemHttpRepresentation'
|
||||
import { ItemHash } from '../../../Domain/Item/ItemHash'
|
||||
|
||||
export class BaseItemsController extends BaseHttpController {
|
||||
constructor(
|
||||
protected syncItems: SyncItems,
|
||||
protected checkIntegrity: CheckIntegrity,
|
||||
protected getItem: GetItem,
|
||||
protected itemHttpMapper: MapperInterface<Item, ItemHttpRepresentation>,
|
||||
protected syncResponseFactoryResolver: SyncResponseFactoryResolverInterface,
|
||||
private controllerContainer?: ControllerContainerInterface,
|
||||
) {
|
||||
super()
|
||||
|
||||
if (this.controllerContainer !== undefined) {
|
||||
this.controllerContainer.register('sync.items.sync', this.sync.bind(this))
|
||||
this.controllerContainer.register('sync.items.check_integrity', this.checkItemsIntegrity.bind(this))
|
||||
this.controllerContainer.register('sync.items.get_item', this.getSingleItem.bind(this))
|
||||
}
|
||||
}
|
||||
|
||||
async sync(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const itemHashes: ItemHash[] = []
|
||||
if ('items' in request.body) {
|
||||
for (const itemHashInput of request.body.items) {
|
||||
const itemHashOrError = ItemHash.create({
|
||||
...itemHashInput,
|
||||
user_uuid: response.locals.user.uuid,
|
||||
key_system_identifier: itemHashInput.key_system_identifier ?? null,
|
||||
shared_vault_uuid: itemHashInput.shared_vault_uuid ?? null,
|
||||
})
|
||||
|
||||
if (itemHashOrError.isFailed()) {
|
||||
return this.json({ error: { message: itemHashOrError.getError() } }, HttpStatusCode.BadRequest)
|
||||
}
|
||||
|
||||
itemHashes.push(itemHashOrError.getValue())
|
||||
}
|
||||
}
|
||||
|
||||
let sharedVaultUuids: string[] | undefined = undefined
|
||||
if ('shared_vault_uuids' in request.body) {
|
||||
const sharedVaultUuidsValidation = Validator.isNotEmpty(request.body.shared_vault_uuids)
|
||||
if (!sharedVaultUuidsValidation.isFailed()) {
|
||||
sharedVaultUuids = request.body.shared_vault_uuids
|
||||
}
|
||||
}
|
||||
|
||||
const syncResult = await this.syncItems.execute({
|
||||
userUuid: response.locals.user.uuid,
|
||||
itemHashes,
|
||||
computeIntegrityHash: request.body.compute_integrity === true,
|
||||
syncToken: request.body.sync_token,
|
||||
cursorToken: request.body.cursor_token,
|
||||
limit: request.body.limit,
|
||||
contentType: request.body.content_type,
|
||||
apiVersion: request.body.api ?? ApiVersion.v20161215,
|
||||
snjsVersion: <string>request.headers['x-snjs-version'],
|
||||
readOnlyAccess: response.locals.readOnlyAccess,
|
||||
sessionUuid: response.locals.session ? response.locals.session.uuid : null,
|
||||
sharedVaultUuids,
|
||||
})
|
||||
if (syncResult.isFailed()) {
|
||||
return this.json({ error: { message: syncResult.getError() } }, HttpStatusCode.BadRequest)
|
||||
}
|
||||
|
||||
const syncResponse = await this.syncResponseFactoryResolver
|
||||
.resolveSyncResponseFactoryVersion(request.body.api)
|
||||
.createResponse(syncResult.getValue())
|
||||
|
||||
return this.json(syncResponse)
|
||||
}
|
||||
|
||||
async checkItemsIntegrity(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
let integrityPayloads = []
|
||||
if ('integrityPayloads' in request.body) {
|
||||
integrityPayloads = request.body.integrityPayloads
|
||||
}
|
||||
|
||||
const result = await this.checkIntegrity.execute({
|
||||
userUuid: response.locals.user.uuid,
|
||||
integrityPayloads,
|
||||
freeUser: response.locals.freeUser,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json({ error: { message: result.getError() } }, HttpStatusCode.BadRequest)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
mismatches: result.getValue(),
|
||||
})
|
||||
}
|
||||
|
||||
async getSingleItem(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.getItem.execute({
|
||||
userUuid: response.locals.user.uuid,
|
||||
itemUuid: request.params.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: { message: 'Item not found' },
|
||||
},
|
||||
404,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({ item: this.itemHttpMapper.toProjection(result.getValue()) })
|
||||
}
|
||||
}
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
import { Request, Response } from 'express'
|
||||
import { BaseHttpController, results } from 'inversify-express-utils'
|
||||
import { HttpStatusCode } from '@standardnotes/responses'
|
||||
import { ControllerContainerInterface, MapperInterface } from '@standardnotes/domain-core'
|
||||
import { GetMessagesSentToUser } from '../../../Domain/UseCase/Messaging/GetMessagesSentToUser/GetMessagesSentToUser'
|
||||
import { MessageHttpRepresentation } from '../../../Mapping/Http/MessageHttpRepresentation'
|
||||
import { Message } from '../../../Domain/Message/Message'
|
||||
import { SendMessageToUser } from '../../../Domain/UseCase/Messaging/SendMessageToUser/SendMessageToUser'
|
||||
import { DeleteAllMessagesSentToUser } from '../../../Domain/UseCase/Messaging/DeleteAllMessagesSentToUser/DeleteAllMessagesSentToUser'
|
||||
import { DeleteMessage } from '../../../Domain/UseCase/Messaging/DeleteMessage/DeleteMessage'
|
||||
import { GetMessagesSentByUser } from '../../../Domain/UseCase/Messaging/GetMessagesSentByUser/GetMessagesSentByUser'
|
||||
|
||||
export class BaseMessagesController extends BaseHttpController {
|
||||
constructor(
|
||||
protected getMessageSentToUserUseCase: GetMessagesSentToUser,
|
||||
protected getMessagesSentByUserUseCase: GetMessagesSentByUser,
|
||||
protected sendMessageToUserUseCase: SendMessageToUser,
|
||||
protected deleteMessagesSentToUserUseCase: DeleteAllMessagesSentToUser,
|
||||
protected deleteMessageUseCase: DeleteMessage,
|
||||
protected messageHttpMapper: MapperInterface<Message, MessageHttpRepresentation>,
|
||||
private controllerContainer?: ControllerContainerInterface,
|
||||
) {
|
||||
super()
|
||||
|
||||
if (this.controllerContainer !== undefined) {
|
||||
this.controllerContainer.register('sync.messages.get-received', this.getMessages.bind(this))
|
||||
this.controllerContainer.register('sync.messages.get-sent', this.getMessagesSent.bind(this))
|
||||
this.controllerContainer.register('sync.messages.send', this.sendMessage.bind(this))
|
||||
this.controllerContainer.register('sync.messages.delete-all', this.deleteMessagesSentToUser.bind(this))
|
||||
this.controllerContainer.register('sync.messages.delete', this.deleteMessage.bind(this))
|
||||
}
|
||||
}
|
||||
|
||||
async getMessages(_request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.getMessageSentToUserUseCase.execute({
|
||||
recipientUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
messages: result.getValue().map((message) => this.messageHttpMapper.toProjection(message)),
|
||||
})
|
||||
}
|
||||
|
||||
async getMessagesSent(_request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.getMessagesSentByUserUseCase.execute({
|
||||
senderUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
messages: result.getValue().map((message) => this.messageHttpMapper.toProjection(message)),
|
||||
})
|
||||
}
|
||||
|
||||
async sendMessage(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.sendMessageToUserUseCase.execute({
|
||||
senderUuid: response.locals.user.uuid,
|
||||
recipientUuid: request.body.recipient_uuid,
|
||||
encryptedMessage: request.body.encrypted_message,
|
||||
replaceabilityIdentifier: request.body.replaceability_identifier,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
message: this.messageHttpMapper.toProjection(result.getValue()),
|
||||
})
|
||||
}
|
||||
|
||||
async deleteMessagesSentToUser(_request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.deleteMessagesSentToUserUseCase.execute({
|
||||
recipientUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({ success: true })
|
||||
}
|
||||
|
||||
async deleteMessage(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.deleteMessageUseCase.execute({
|
||||
messageUuid: request.params.messageUuid,
|
||||
originatorUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({ success: true })
|
||||
}
|
||||
}
|
||||
+307
@@ -0,0 +1,307 @@
|
||||
import { Request, Response } from 'express'
|
||||
import { BaseHttpController, results } from 'inversify-express-utils'
|
||||
import { HttpStatusCode } from '@standardnotes/responses'
|
||||
import { ControllerContainerInterface, MapperInterface } from '@standardnotes/domain-core'
|
||||
|
||||
import { InviteUserToSharedVault } from '../../../Domain/UseCase/SharedVaults/InviteUserToSharedVault/InviteUserToSharedVault'
|
||||
import { SharedVaultInvite } from '../../../Domain/SharedVault/User/Invite/SharedVaultInvite'
|
||||
import { SharedVaultInviteHttpRepresentation } from '../../../Mapping/Http/SharedVaultInviteHttpRepresentation'
|
||||
import { UpdateSharedVaultInvite } from '../../../Domain/UseCase/SharedVaults/UpdateSharedVaultInvite/UpdateSharedVaultInvite'
|
||||
import { AcceptInviteToSharedVault } from '../../../Domain/UseCase/SharedVaults/AcceptInviteToSharedVault/AcceptInviteToSharedVault'
|
||||
import { DeclineInviteToSharedVault } from '../../../Domain/UseCase/SharedVaults/DeclineInviteToSharedVault/DeclineInviteToSharedVault'
|
||||
import { DeleteSharedVaultInvitesToUser } from '../../../Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesToUser/DeleteSharedVaultInvitesToUser'
|
||||
import { GetSharedVaultInvitesSentByUser } from '../../../Domain/UseCase/SharedVaults/GetSharedVaultInvitesSentByUser/GetSharedVaultInvitesSentByUser'
|
||||
import { DeleteSharedVaultInvitesSentByUser } from '../../../Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesSentByUser/DeleteSharedVaultInvitesSentByUser'
|
||||
import { GetSharedVaultInvitesSentToUser } from '../../../Domain/UseCase/SharedVaults/GetSharedVaultInvitesSentToUser/GetSharedVaultInvitesSentToUser'
|
||||
|
||||
export class BaseSharedVaultInvitesController extends BaseHttpController {
|
||||
constructor(
|
||||
protected inviteUserToSharedVaultUseCase: InviteUserToSharedVault,
|
||||
protected updateSharedVaultInviteUseCase: UpdateSharedVaultInvite,
|
||||
protected acceptSharedVaultInviteUseCase: AcceptInviteToSharedVault,
|
||||
protected declineSharedVaultInviteUseCase: DeclineInviteToSharedVault,
|
||||
protected deleteSharedVaultInvitesToUserUseCase: DeleteSharedVaultInvitesToUser,
|
||||
protected deleteSharedVaultInvitesSentByUserUseCase: DeleteSharedVaultInvitesSentByUser,
|
||||
protected getSharedVaultInvitesSentByUserUseCase: GetSharedVaultInvitesSentByUser,
|
||||
protected getSharedVaultInvitesSentToUserUseCase: GetSharedVaultInvitesSentToUser,
|
||||
protected sharedVaultInviteHttpMapper: MapperInterface<SharedVaultInvite, SharedVaultInviteHttpRepresentation>,
|
||||
private controllerContainer?: ControllerContainerInterface,
|
||||
) {
|
||||
super()
|
||||
|
||||
if (this.controllerContainer !== undefined) {
|
||||
this.controllerContainer.register('sync.shared-vault-invites.create', this.createSharedVaultInvite.bind(this))
|
||||
this.controllerContainer.register('sync.shared-vault-invites.update', this.updateSharedVaultInvite.bind(this))
|
||||
this.controllerContainer.register('sync.shared-vault-invites.accept', this.acceptSharedVaultInvite.bind(this))
|
||||
this.controllerContainer.register('sync.shared-vault-invites.decline', this.declineSharedVaultInvite.bind(this))
|
||||
this.controllerContainer.register(
|
||||
'sync.shared-vault-invites.delete-inbound',
|
||||
this.deleteInboundUserInvites.bind(this),
|
||||
)
|
||||
this.controllerContainer.register(
|
||||
'sync.shared-vault-invites.delete-outbound',
|
||||
this.deleteOutboundUserInvites.bind(this),
|
||||
)
|
||||
this.controllerContainer.register(
|
||||
'sync.shared-vault-invites.get-outbound',
|
||||
this.getOutboundUserInvites.bind(this),
|
||||
)
|
||||
this.controllerContainer.register('sync.shared-vault-invites.get-user-invites', this.getUserInvites.bind(this))
|
||||
this.controllerContainer.register(
|
||||
'sync.shared-vault-invites.get-vault-invites',
|
||||
this.getSharedVaultInvites.bind(this),
|
||||
)
|
||||
this.controllerContainer.register(
|
||||
'sync.shared-vault-invites.delete-invite',
|
||||
this.deleteSharedVaultInvite.bind(this),
|
||||
)
|
||||
this.controllerContainer.register(
|
||||
'sync.shared-vault-invites.delete-all',
|
||||
this.deleteAllSharedVaultInvites.bind(this),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
async createSharedVaultInvite(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.inviteUserToSharedVaultUseCase.execute({
|
||||
sharedVaultUuid: request.params.sharedVaultUuid,
|
||||
senderUuid: response.locals.user.uuid,
|
||||
recipientUuid: request.body.recipient_uuid,
|
||||
encryptedMessage: request.body.encrypted_message,
|
||||
permission: request.body.permission,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
invite: this.sharedVaultInviteHttpMapper.toProjection(result.getValue()),
|
||||
})
|
||||
}
|
||||
|
||||
async updateSharedVaultInvite(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.updateSharedVaultInviteUseCase.execute({
|
||||
encryptedMessage: request.body.encrypted_message,
|
||||
inviteUuid: request.params.inviteUuid,
|
||||
senderUuid: response.locals.user.uuid,
|
||||
permission: request.body.permission,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
invite: this.sharedVaultInviteHttpMapper.toProjection(result.getValue()),
|
||||
})
|
||||
}
|
||||
|
||||
async acceptSharedVaultInvite(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.acceptSharedVaultInviteUseCase.execute({
|
||||
inviteUuid: request.params.inviteUuid,
|
||||
originatorUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
success: true,
|
||||
})
|
||||
}
|
||||
|
||||
async declineSharedVaultInvite(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.declineSharedVaultInviteUseCase.execute({
|
||||
inviteUuid: request.params.inviteUuid,
|
||||
userUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
success: true,
|
||||
})
|
||||
}
|
||||
|
||||
async deleteInboundUserInvites(_request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.deleteSharedVaultInvitesToUserUseCase.execute({
|
||||
userUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
success: true,
|
||||
})
|
||||
}
|
||||
|
||||
async deleteOutboundUserInvites(_request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.deleteSharedVaultInvitesSentByUserUseCase.execute({
|
||||
userUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
success: true,
|
||||
})
|
||||
}
|
||||
|
||||
async getOutboundUserInvites(_request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.getSharedVaultInvitesSentByUserUseCase.execute({
|
||||
senderUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
invites: result.getValue().map((invite) => this.sharedVaultInviteHttpMapper.toProjection(invite)),
|
||||
})
|
||||
}
|
||||
|
||||
async getSharedVaultInvites(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.getSharedVaultInvitesSentByUserUseCase.execute({
|
||||
senderUuid: response.locals.user.uuid,
|
||||
sharedVaultUuid: request.params.sharedVaultUuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
invites: result.getValue().map((invite) => this.sharedVaultInviteHttpMapper.toProjection(invite)),
|
||||
})
|
||||
}
|
||||
|
||||
async getUserInvites(_request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.getSharedVaultInvitesSentToUserUseCase.execute({
|
||||
userUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
invites: result.getValue().map((invite) => this.sharedVaultInviteHttpMapper.toProjection(invite)),
|
||||
})
|
||||
}
|
||||
|
||||
async deleteSharedVaultInvite(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.declineSharedVaultInviteUseCase.execute({
|
||||
inviteUuid: request.params.inviteUuid,
|
||||
userUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
success: true,
|
||||
})
|
||||
}
|
||||
|
||||
async deleteAllSharedVaultInvites(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.deleteSharedVaultInvitesSentByUserUseCase.execute({
|
||||
userUuid: response.locals.user.uuid,
|
||||
sharedVaultUuid: request.params.sharedVaultUuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
success: true,
|
||||
})
|
||||
}
|
||||
}
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
import { Request, Response } from 'express'
|
||||
import { BaseHttpController, results } from 'inversify-express-utils'
|
||||
import { HttpStatusCode } from '@standardnotes/responses'
|
||||
import { ControllerContainerInterface, MapperInterface } from '@standardnotes/domain-core'
|
||||
|
||||
import { SharedVaultUser } from '../../../Domain/SharedVault/User/SharedVaultUser'
|
||||
import { SharedVaultUserHttpRepresentation } from '../../../Mapping/Http/SharedVaultUserHttpRepresentation'
|
||||
import { GetSharedVaultUsers } from '../../../Domain/UseCase/SharedVaults/GetSharedVaultUsers/GetSharedVaultUsers'
|
||||
import { RemoveUserFromSharedVault } from '../../../Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault'
|
||||
|
||||
export class BaseSharedVaultUsersController extends BaseHttpController {
|
||||
constructor(
|
||||
protected getSharedVaultUsersUseCase: GetSharedVaultUsers,
|
||||
protected removeUserFromSharedVaultUseCase: RemoveUserFromSharedVault,
|
||||
protected sharedVaultUserHttpMapper: MapperInterface<SharedVaultUser, SharedVaultUserHttpRepresentation>,
|
||||
private controllerContainer?: ControllerContainerInterface,
|
||||
) {
|
||||
super()
|
||||
|
||||
if (this.controllerContainer !== undefined) {
|
||||
this.controllerContainer.register('sync.shared-vault-users.get-users', this.getSharedVaultUsers.bind(this))
|
||||
this.controllerContainer.register(
|
||||
'sync.shared-vault-users.remove-user',
|
||||
this.removeUserFromSharedVault.bind(this),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
async getSharedVaultUsers(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.getSharedVaultUsersUseCase.execute({
|
||||
originatorUuid: response.locals.user.uuid,
|
||||
sharedVaultUuid: request.params.sharedVaultUuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
users: result.getValue().map((sharedVault) => this.sharedVaultUserHttpMapper.toProjection(sharedVault)),
|
||||
})
|
||||
}
|
||||
|
||||
async removeUserFromSharedVault(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.removeUserFromSharedVaultUseCase.execute({
|
||||
sharedVaultUuid: request.params.sharedVaultUuid,
|
||||
userUuid: request.params.userUuid,
|
||||
originatorUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
success: true,
|
||||
})
|
||||
}
|
||||
}
|
||||
+128
@@ -0,0 +1,128 @@
|
||||
import { Request, Response } from 'express'
|
||||
import { BaseHttpController, results } from 'inversify-express-utils'
|
||||
import { HttpStatusCode } from '@standardnotes/responses'
|
||||
import { ControllerContainerInterface, MapperInterface } from '@standardnotes/domain-core'
|
||||
|
||||
import { GetSharedVaults } from '../../../Domain/UseCase/SharedVaults/GetSharedVaults/GetSharedVaults'
|
||||
import { SharedVault } from '../../../Domain/SharedVault/SharedVault'
|
||||
import { SharedVaultHttpRepresentation } from '../../../Mapping/Http/SharedVaultHttpRepresentation'
|
||||
import { CreateSharedVault } from '../../../Domain/UseCase/SharedVaults/CreateSharedVault/CreateSharedVault'
|
||||
import { SharedVaultUser } from '../../../Domain/SharedVault/User/SharedVaultUser'
|
||||
import { SharedVaultUserHttpRepresentation } from '../../../Mapping/Http/SharedVaultUserHttpRepresentation'
|
||||
import { DeleteSharedVault } from '../../../Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault'
|
||||
import { CreateSharedVaultFileValetToken } from '../../../Domain/UseCase/SharedVaults/CreateSharedVaultFileValetToken/CreateSharedVaultFileValetToken'
|
||||
|
||||
export class BaseSharedVaultsController extends BaseHttpController {
|
||||
constructor(
|
||||
protected getSharedVaultsUseCase: GetSharedVaults,
|
||||
protected createSharedVaultUseCase: CreateSharedVault,
|
||||
protected deleteSharedVaultUseCase: DeleteSharedVault,
|
||||
protected createSharedVaultFileValetTokenUseCase: CreateSharedVaultFileValetToken,
|
||||
protected sharedVaultHttpMapper: MapperInterface<SharedVault, SharedVaultHttpRepresentation>,
|
||||
protected sharedVaultUserHttpMapper: MapperInterface<SharedVaultUser, SharedVaultUserHttpRepresentation>,
|
||||
private controllerContainer?: ControllerContainerInterface,
|
||||
) {
|
||||
super()
|
||||
|
||||
if (this.controllerContainer !== undefined) {
|
||||
this.controllerContainer.register('sync.shared-vaults.get-vaults', this.getSharedVaults.bind(this))
|
||||
this.controllerContainer.register('sync.shared-vaults.create-vault', this.createSharedVault.bind(this))
|
||||
this.controllerContainer.register('sync.shared-vaults.delete-vault', this.deleteSharedVault.bind(this))
|
||||
this.controllerContainer.register(
|
||||
'sync.shared-vaults.create-file-valet-token',
|
||||
this.createValetTokenForSharedVaultFile.bind(this),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
async getSharedVaults(_request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.getSharedVaultsUseCase.execute({
|
||||
userUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
sharedVaults: result.getValue().map((sharedVault) => this.sharedVaultHttpMapper.toProjection(sharedVault)),
|
||||
})
|
||||
}
|
||||
|
||||
async createSharedVault(_request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.createSharedVaultUseCase.execute({
|
||||
userUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
sharedVault: this.sharedVaultHttpMapper.toProjection(result.getValue().sharedVault),
|
||||
sharedVaultUser: this.sharedVaultUserHttpMapper.toProjection(result.getValue().sharedVaultUser),
|
||||
})
|
||||
}
|
||||
|
||||
async deleteSharedVault(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.deleteSharedVaultUseCase.execute({
|
||||
sharedVaultUuid: request.params.sharedVaultUuid,
|
||||
originatorUuid: response.locals.user.uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({ success: true })
|
||||
}
|
||||
|
||||
async createValetTokenForSharedVaultFile(request: Request, response: Response): Promise<results.JsonResult> {
|
||||
const result = await this.createSharedVaultFileValetTokenUseCase.execute({
|
||||
userUuid: response.locals.user.uuid,
|
||||
sharedVaultUuid: request.params.sharedVaultUuid,
|
||||
fileUuid: request.body.file_uuid,
|
||||
remoteIdentifier: request.body.remote_identifier,
|
||||
operation: request.body.operation,
|
||||
unencryptedFileSize: request.body.unencrypted_file_size,
|
||||
moveOperationType: request.body.move_operation_type,
|
||||
sharedVaultToSharedVaultMoveTargetUuid: request.body.shared_vault_to_shared_vault_move_target_uuid,
|
||||
})
|
||||
|
||||
if (result.isFailed()) {
|
||||
return this.json(
|
||||
{
|
||||
error: {
|
||||
message: result.getError(),
|
||||
},
|
||||
},
|
||||
HttpStatusCode.BadRequest,
|
||||
)
|
||||
}
|
||||
|
||||
return this.json({
|
||||
valetToken: result.getValue(),
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user