Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat] : Permission System #19

Merged
merged 11 commits into from
Sep 21, 2023
88 changes: 65 additions & 23 deletions whiteboard/WhiteboardApp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,15 @@ import { excalidrawContent } from "./assets/excalidrawContent";
import { ExecuteActionButtonHandler } from "./handlers/ExecuteActionButtonHandler";
import {
getBoardRecord,
getBoardRecordByMessageId,
storeBoardRecord,
} from "./persistence/boardInteraction";
import { UIActionButtonContext } from "@rocket.chat/apps-engine/definition/ui";
import { UtilityEnum } from "./enum/uitlityEnum";
import { ExecuteViewSubmitHandler } from "./handlers/ExecuteViewSubmitHandler";
import { AppEnum } from "./enum/App";
import { getDirect } from "./lib/messages";
import { IUser } from "@rocket.chat/apps-engine/definition/users";
export class WhiteboardApp extends App implements IUIKitInteractionHandler {
constructor(info: IAppInfo, logger: ILogger, accessors: IAppAccessors) {
super(info, logger, accessors);
Expand Down Expand Up @@ -228,33 +231,72 @@ export class UpdateBoardEndpoint extends ApiEndpoint {
const cover = request.content.cover;
const title = request.content.title;

const boardata = await getBoardRecord(
const savedBoardata = await getBoardRecord(
read.getPersistenceReader(),
boardId
);
const msgId = boardata.messageId;
await storeBoardRecord(persis, boardId, boardData, msgId, cover, title);

const user = (await read.getMessageReader().getSenderUser(msgId))!;
const room = await read.getMessageReader().getRoom(msgId);

const { messageId, privateMessageId, status } = savedBoardata;
const user = (await read.getMessageReader().getSenderUser(messageId))!;
const room = await read.getMessageReader().getRoom(messageId);
const AppSender = (await read.getUserReader().getAppUser()) as IUser;
const directRoom = await getDirect(
read,
modify,
AppSender,
user.username
);
if (room) {
const previewMsg = (await modify.getUpdater().message(msgId, user))
.setEditor(user)
.setSender(user)
.setRoom(room)
.setParseUrls(true)
.setUsernameAlias(AppEnum.APP_NAME)
.setAttachments([
{
collapsed: true,
color: "#00000000",
imageUrl: cover,
type: "image",
},
]);

await modify.getUpdater().finish(previewMsg);
await storeBoardRecord(
persis,
boardId,
boardData,
messageId,
cover,
title,
privateMessageId,
status
);
if (privateMessageId.length > 0 && status == UtilityEnum.PRIVATE) {
if (directRoom) {
const previewMsg = (
await modify
.getUpdater()
.message(privateMessageId, user)
)
.setEditor(AppSender)
.setRoom(directRoom)
.setSender(AppSender)
.setParseUrls(true)
.setUsernameAlias(AppEnum.APP_NAME)
.setAttachments([
{
collapsed: true,
color: "#00000000",
imageUrl: cover,
type: "image",
},
]);
await modify.getUpdater().finish(previewMsg);
}
} else {
const previewMsg = (
await modify.getUpdater().message(messageId, user)
)
.setEditor(user)
.setSender(user)
.setRoom(room)
.setParseUrls(true)
.setUsernameAlias(AppEnum.APP_NAME)
.setAttachments([
{
collapsed: true,
color: "#00000000",
imageUrl: cover,
type: "image",
},
]);
await modify.getUpdater().finish(previewMsg);
}
}

return this.json({
Expand Down
2 changes: 1 addition & 1 deletion whiteboard/enum/App.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export enum AppEnum {
APP_NAME = "Whiteboard",
APP_NAME = "Whiteboard App",
APP_DESCRIPTION = "A whiteboard app for Rocket.Chat",
MARKBOARD_HOST = "http://localhost:4000",
}
7 changes: 6 additions & 1 deletion whiteboard/enum/uitlityEnum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,10 @@ export enum UtilityEnum {
ATTACHMENTS_ACTION_ID = "ATTACHMENTS_ACTION_ID",
ATTACHMENTS_BLOCK_ID = "ATTACHMENTS_BLOCK_ID",
ATTACHMENTS = "Download Assets ⬇",
ATTACHMENTS_LABEL = "ATTACHMENTS_LABEL"
ATTACHMENTS_LABEL = "ATTACHMENTS_LABEL",
BOARD_SELECT_LABEL = "Select Public or Private Board",
BOARD_SELECT_BLOCK_ID = "board-select-block-id",
BOARD_SELECT_ACTION_ID = "board-select-action-id",
PRIVATE = "PRIVATE",
PUBLIC = "PUBLIC",
}
6 changes: 4 additions & 2 deletions whiteboard/handlers/ExecuteActionButtonHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export class ExecuteActionButtonHandler {
case UtilityEnum.CREATE_WHITEBOARD_MESSAGE_BOX_ACTION_ID:
const room = context.getInteractionData().room;
const sender = context.getInteractionData().user;
const appId= this.app.getID();
const appId = this.app.getID();
if (room) {
const endpoints =
this.app.getAccessors().providedApiEndpoints;
Expand Down Expand Up @@ -77,7 +77,9 @@ export class ExecuteActionButtonHandler {
},
messageId,
"",
"Untitled Whiteboard"
"Untitled Whiteboard",
"",
"Public"
);
}

Expand Down
2 changes: 1 addition & 1 deletion whiteboard/handlers/ExecuteBlockActionHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ export class ExecuteBlockActionHandler {
.getAppUser()) as IUser;
switch (actionId) {
case UtilityEnum.SETTINGS_BUTTON_ACTION_ID:
console.log("Settings button clicked");
if (messageId) {
const modal = await SettingsModal(appId, messageId);
await Promise.all([
Expand All @@ -52,6 +51,7 @@ export class ExecuteBlockActionHandler {
return this.context
.getInteractionResponder()
.successResponse();

default:
return this.context
.getInteractionResponder()
Expand Down
Loading