From 87be2d0af42377c88379eeabbeaba4fbea62f5ff Mon Sep 17 00:00:00 2001 From: M Gilang Januar Date: Wed, 8 Dec 2021 11:32:32 +0700 Subject: [PATCH 1/6] update press release --- ....pdf => (EN) Press Release_ TeleDrive.pdf} | Bin 1067593 -> 1067939 bytes ....pdf => (ID) Press Release_ TeleDrive.pdf} | Bin 1080174 -> 1080229 bytes 2 files changed, 0 insertions(+), 0 deletions(-) rename press/{(EN) Press Release TeleDrive.pdf => (EN) Press Release_ TeleDrive.pdf} (96%) rename press/{(ID) Press Release TeleDrive.pdf => (ID) Press Release_ TeleDrive.pdf} (99%) diff --git a/press/(EN) Press Release TeleDrive.pdf b/press/(EN) Press Release_ TeleDrive.pdf similarity index 96% rename from press/(EN) Press Release TeleDrive.pdf rename to press/(EN) Press Release_ TeleDrive.pdf index d9fedd714a1bca1ea3a8ff6156d8b8144cc33d84..148f750a7307cad67883499d22d657794db2297c 100644 GIT binary patch delta 32598 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 EKYsuO_y7O^ delta 32249 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 M;$-~%D!Quw2fYisLI3~& delta 5939 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 quMqs7j{Ybs1(TG3{Dnave?AN;7z`?vZs-qCC6 Date: Wed, 8 Dec 2021 16:59:23 +0700 Subject: [PATCH 2/6] feature/sponsored messages (#134) * add api sponsored messages * try to show sponsored messages in quick message * fix append sponsored messages --- server/src/api/v1/Messages.ts | 41 +++++++++++++++++++ .../pages/dashboard/components/Messaging.tsx | 39 ++++++++++++++---- 2 files changed, 73 insertions(+), 7 deletions(-) diff --git a/server/src/api/v1/Messages.ts b/server/src/api/v1/Messages.ts index f99f9d935..9e16e0344 100644 --- a/server/src/api/v1/Messages.ts +++ b/server/src/api/v1/Messages.ts @@ -37,6 +37,47 @@ export class Messages { return res.send({ messages: result }) } + @Endpoint.GET('/sponsoredMessages/:type/:id', { middlewares: [Auth] }) + public async sponsoredMessages(req: Request, res: Response): Promise { + const { type, id } = req.params + const { accessHash } = req.query + + let peer: Api.InputPeerChannel + if (type === 'channel') { + peer = new Api.InputPeerChannel({ + channelId: bigInt(id), + accessHash: bigInt(accessHash as string) }) + } else { + return res.send({ messages: { + messages: [], + chats: [], + users: [] + } }) + } + const messages = await req.tg.invoke(new Api.channels.GetSponsoredMessages({ channel: peer })) + return res.send({ messages }) + } + + @Endpoint.POST('/readSponsoredMessages/:type/:id', { middlewares: [Auth] }) + public async readSponsoredMessages(req: Request, res: Response): Promise { + const { type, id } = req.params + const { accessHash } = req.query + const { random_id: randomId } = req.body + + let peer: Api.InputPeerChannel + if (type === 'channel') { + peer = new Api.InputPeerChannel({ + channelId: bigInt(id), + accessHash: bigInt(accessHash as string) }) + } else { + return res.status(202).send({ accepted: true }) + } + const accepted = await req.tg.invoke(new Api.channels.ViewSponsoredMessage({ + channel: peer, randomId: Buffer.from(randomId) + })) + return res.status(202).send({ accepted }) + } + @Endpoint.POST('/read/:type/:id', { middlewares: [Auth] }) public async read(req: Request, res: Response): Promise { const { type, id } = req.params diff --git a/web/src/pages/dashboard/components/Messaging.tsx b/web/src/pages/dashboard/components/Messaging.tsx index ecebb87c5..c58c37344 100644 --- a/web/src/pages/dashboard/components/Messaging.tsx +++ b/web/src/pages/dashboard/components/Messaging.tsx @@ -120,7 +120,7 @@ const Messaging: React.FC = ({ me, collapsed, parent, setCollapsed }) => }, [messageHistory]) useEffect(() => { - const setDataMessages = (dialog?: any) => { + const setDataMessages = (dialog?: any, sponsoredMessages?: { messages: any[], chats: any[], users: any[] }) => { setMessagesParsed(messages?.messages.reduce((res: any[], msg: any) => { let user = messages?.users.find((user: any) => user.id === (msg.fromId || msg.peerId)?.userId) if (!user) { @@ -197,16 +197,41 @@ const Messaging: React.FC = ({ me, collapsed, parent, setCollapsed }) => } : undefined } : null ] - }, []).filter(Boolean).sort((a: any, b: any) => a.date - b.date) || []) + }, sponsoredMessages?.messages?.map((msg: any) => { + let user = sponsoredMessages?.users.find((user: any) => user.id === (msg.fromId || msg.peerId)?.userId) + if (!user) { + user = sponsoredMessages?.chats.find((user: any) => user.id === (msg.fromId || msg.peerId)?.channelId) + } + return { + id: `${message?.id.replace(/\?.*$/gi, '')}/sponsor`, + messageId: message?.id, + key: 'sponsor', + position: 'left', + type: 'text', + // status: me?.user.tg_id == user?.id ? msg.id <= dialog?.dialog?.readOutboxMaxId ? 'read' : 'received' : undefined, + title: user ? user.title || `${user.firstName || ''} ${user.lastName || ''}`.trim() : 'Unknown', + text: {msg.message ? `${msg.message.replaceAll('\n', ' \n')}\n\n_(sponsored message)_` : 'Unknown message'}, + message: msg.message, + fwdFrom: msg.fwdFrom, + date: new Date().getTime(), + titleColor: `#${`${user?.id.toString(16)}000000`.slice(0, 6)}`, + user + } + }) || []).filter(Boolean).sort((a: any, b: any) => a.date - b.date) || []) // messageList.current?.scrollToRow = 50 } if (message) { req.get(`/dialogs/${message.id}`).then(({ data }) => { - setDataMessages(data.dialog) - // const sidebar = document.querySelector('.ant-layout-sider.ant-layout-sider-light.messaging') - // if (sidebar) { - // sidebar.scroll({ top: sidebar.scrollHeight, behavior: 'smooth' }) - // } + req.get(`/messages/sponsoredMessages/${message.id}`).then(({ data: sponsoredData }) => { + setDataMessages(data.dialog, sponsoredData?.messages) + sponsoredData.messages?.messages.map((msg: any) => req.post(`/messages/readSponsoredMessages/${message.id}`, { random_id: msg.randomId?.data })) + // const sidebar = document.querySelector('.ant-layout-sider.ant-layout-sider-light.messaging') + // if (sidebar) { + // sidebar.scroll({ top: sidebar.scrollHeight, behavior: 'smooth' }) + // } + }).catch(_ => { + setDataMessages(data.dialog) + }) }) } else { setDataMessages() From b2507cde39e134db5fc33f753ba4ac758959ba9f Mon Sep 17 00:00:00 2001 From: M Gilang Januar Date: Wed, 8 Dec 2021 17:30:10 +0700 Subject: [PATCH 3/6] upgrade telegram deps --- server/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/server/package.json b/server/package.json index fb4900332..89e365cd9 100644 --- a/server/package.json +++ b/server/package.json @@ -9,7 +9,7 @@ "build": "rimraf dist && eslint --fix -c .eslintrc.js --ext .ts . && tsc" }, "dependencies": { - "@mgilangjanuar/telegram": "2.0.9", + "@mgilangjanuar/telegram": "2.0.11", "@sentry/node": "^6.14.1", "@sentry/tracing": "^6.14.1", "@types/moment": "^2.13.0", diff --git a/yarn.lock b/yarn.lock index 6146b9816..664bc4cde 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1544,10 +1544,10 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@mgilangjanuar/telegram@2.0.9": - version "2.0.9" - resolved "https://npm.pkg.github.com/download/@mgilangjanuar/telegram/2.0.9/7de66d2ca37cf1bed8f889157d8e6c07cc53fc6477a2cfcf6e68ee7c839c0514#0087d944d7d1ed8bd4db9e580d43148d8580a7f0" - integrity sha512-COHrncMWDFdmUhWQUAODs7AtcSPw9ngMXzULdmf9cYlxDrX+mOh8boyl2js/nIdRl2U2hKxq9HwmVz13DBDovw== +"@mgilangjanuar/telegram@2.0.11": + version "2.0.11" + resolved "https://npm.pkg.github.com/download/@mgilangjanuar/telegram/2.0.11/2b252136afa7cdbda3db412e39793132577da961dfc2f652ca59a2cfe88f1151#3f80099404c5c62bd5bcd30b0a2c5f4aec4a71d8" + integrity sha512-g/OnlhULvwUenJYrJzk/NUywA/QEa5UgPLdHbFtFIemXpbx+ULuR+kOI8HR9Yf7jJH3VXA63zMHr/vrn6RTvGg== dependencies: "@cryptography/aes" "^0.1.1" async-mutex "^0.3.0" From 32d98354a3e160e4e46c247d1fa000233cd68759 Mon Sep 17 00:00:00 2001 From: M Gilang Januar Date: Fri, 10 Dec 2021 10:00:00 +0700 Subject: [PATCH 4/6] feature/forward files (#135) * initialize menu for forward file * finalize send file to other users * prevent modal close after send --- server/src/api/v1/Messages.ts | 16 ++-- web/src/pages/dashboard/components/Share.tsx | 88 +++++++++++++------ .../pages/dashboard/components/TableFiles.tsx | 9 +- web/src/pages/dashboard/index.tsx | 4 +- 4 files changed, 82 insertions(+), 35 deletions(-) diff --git a/server/src/api/v1/Messages.ts b/server/src/api/v1/Messages.ts index 9e16e0344..308767d65 100644 --- a/server/src/api/v1/Messages.ts +++ b/server/src/api/v1/Messages.ts @@ -196,7 +196,7 @@ export class Messages { @Endpoint.POST('/forward/:msgId', { middlewares: [Auth] }) public async forward(req: Request, res: Response): Promise { const { msgId } = req.params - const { from, to } = req.body as { from: { + const { from, to } = req.body as { from?: { type: string, id: number, accessHash?: string @@ -204,11 +204,13 @@ export class Messages { type: string, id: number, accessHash?: string - } } + } | string } - let fromPeer: Api.InputPeerChannel | Api.InputPeerUser | Api.InputPeerChat - let toPeer: Api.InputPeerChannel | Api.InputPeerUser | Api.InputPeerChat - if (from.type === 'channel') { + let fromPeer: Api.InputPeerChannel | Api.InputPeerUser | Api.InputPeerChat | 'me' + let toPeer: Api.InputPeerChannel | Api.InputPeerUser | Api.InputPeerChat | string + if (!from) { + fromPeer = 'me' + } else if (from.type === 'channel') { fromPeer = new Api.InputPeerChannel({ channelId: bigInt(from.id), accessHash: bigInt(from.accessHash as string) }) @@ -222,7 +224,9 @@ export class Messages { accessHash: bigInt(from.accessHash as string) }) } - if (to.type === 'channel') { + if (typeof to === 'string') { + toPeer = to + } else if (to.type === 'channel') { toPeer = new Api.InputPeerChannel({ channelId: bigInt(to.id), accessHash: bigInt(to.accessHash as string) }) diff --git a/web/src/pages/dashboard/components/Share.tsx b/web/src/pages/dashboard/components/Share.tsx index 2f3468380..602d09b4f 100644 --- a/web/src/pages/dashboard/components/Share.tsx +++ b/web/src/pages/dashboard/components/Share.tsx @@ -1,4 +1,4 @@ -import { CopyOutlined, InfoCircleOutlined, LinkOutlined, MinusCircleOutlined, PlusOutlined } from '@ant-design/icons' +import { ArrowRightOutlined, CopyOutlined, InfoCircleOutlined, LinkOutlined, MinusCircleOutlined, PlusOutlined, WarningOutlined } from '@ant-design/icons' import { AutoComplete, Button, Col, Divider, Empty, Form, Input, message, Modal, notification, Row, Spin, Switch, Typography } from 'antd' import { useForm } from 'antd/lib/form/Form' import * as clipboardy from 'clipboardy' @@ -10,7 +10,7 @@ interface Props { me: any, dataSource?: [any[], (data: any[]) => void], onFinish?: () => void, - dataSelect: [any, (data: any) => void] + dataSelect: [{ row: any, action: string }, (data?: { row: any, action: string }) => void] } const Share: React.FC = ({ @@ -41,15 +41,16 @@ const Share: React.FC = ({ useEffect(() => { if (selectShare) { - const isPublic = (selectShare.sharing_options || [])?.includes('*') + const isPublic = (selectShare.row.sharing_options || [])?.includes('*') setIsPublic(isPublic) - setSharingOptions(selectShare.sharing_options) + setSharingOptions(selectShare.row.sharing_options) formShare.setFieldsValue({ - id: selectShare.id, + id: selectShare.row.id, message: 'Hey, please check this out! 👆', public: isPublic, - sharing_options: selectShare.sharing_options?.length ? selectShare.sharing_options.filter((opt: string) => opt !== '*') : [''], - link: selectShare.type === 'folder' ? `${window.location.origin}/dashboard/shared?parent=${selectShare.id}` : `${window.location.origin}/view/${selectShare.id}` + sharing_options: selectShare.row.sharing_options?.length ? selectShare.row.sharing_options.filter((opt: string) => opt !== '*') : [''], + link: selectShare.row.type === 'folder' ? `${window.location.origin}/dashboard/shared?parent=${selectShare.row.id}` : `${window.location.origin}/view/${selectShare.row.id}`, + username: null }) } else { formShare.resetFields() @@ -58,17 +59,36 @@ const Share: React.FC = ({ const share = async () => { setLoadingShare(true) - const { id, public: isPublic, sharing_options: sharingOpts } = formShare.getFieldsValue() + const { id, public: isPublic, sharing_options: sharingOpts, username } = formShare.getFieldsValue() - const sharing = [ + const sharing = sharingOpts?.length ? [ ...new Set([...sharingOpts === undefined ? sharingOptions : sharingOpts, isPublic ? '*' : null] .filter(sh => isPublic ? sh : sh !== '*').filter(Boolean)) as any - ] + ] : [] setSharingOptions(sharing) try { - await req.patch(`/files/${id}`, { file: { sharing_options: sharing } }) - dataSource?.[1](dataSource?.[0].map(file => file.id === id ? { ...file, sharing_options: sharing } : file)) + if (selectShare?.action === 'share') { + await req.patch(`/files/${id}`, { file: { sharing_options: sharing } }) + dataSource?.[1](dataSource?.[0].map(file => file.id === id ? { ...file, sharing_options: sharing } : file)) + } else { + const [type, peerId, _id, accessHash] = selectShare.row.forward_info?.split('/') || [null, null, null, null] + await req.post(`/messages/forward/${selectShare.row.message_id}`, { + ...selectShare.row.forward_info ? { + from: { + id: peerId, + type, + accessHash + } + } : {}, + to: username + }) + notification.success({ + message: 'Success', + description: `${selectShare?.row.name} sent to @${username} successfully` + }) + formShare.setFieldsValue({ username: null }) + } } catch (error: any) { if (error?.response?.status === 402) { notification.error({ @@ -77,6 +97,7 @@ const Share: React.FC = ({ }) setSelectShare(undefined) } + setLoadingShare(false) } setLoadingShare(false) onFinish?.() @@ -87,21 +108,21 @@ const Share: React.FC = ({ return message.info('Copied!') } - return setSelectShare(undefined)} footer={null} - title={`Share ${selectShare?.name}`}> -
+ title={`${selectShare?.action === 'share' ? 'Share' : 'Send'} ${selectShare?.row.name}`}> + - {selectShare?.type !== 'folder' ? + {selectShare?.row.type !== 'folder' && selectShare?.action === 'share' ? { setIsPublic(val) share() }} /> : ''} - {!isPublic && + {!isPublic && selectShare?.action === 'share' && {(fields, { add, remove }) => <> {fields.map((field, i) => @@ -126,16 +147,33 @@ const Share: React.FC = ({ } } + {selectShare?.action === 'forward' && <> + + } options={users?.map((user: any) => ({ value: user.username }))}> + setUsername(e.target.value)} /> + + + + + + } + {selectShare?.action === 'share' && + Your encrypted session will be saved for downloading this file + } - - You are shared {isPublic ? 'with anyone.' : - `with ${formShare.getFieldValue('sharing_options')?.[0] || 'no one'} - ${formShare.getFieldValue('sharing_options')?.filter(Boolean).length > 1 ? ` and ${formShare.getFieldValue('sharing_options')?.filter(Boolean).length - 1} people` : ''}`} - - {sharingOptions?.[0] ?  Share URL} name="link"> - } onSearch={copy} /> - : ''} + {selectShare?.action === 'share' ? <> + + You are shared {isPublic ? 'with anyone.' : + `with ${formShare.getFieldValue('sharing_options')?.[0] || 'no one'} + ${formShare.getFieldValue('sharing_options')?.filter(Boolean).length > 1 ? ` and ${formShare.getFieldValue('sharing_options')?.filter(Boolean).length - 1} people` : ''}`} + + {sharingOptions?.[0] ?  Share URL} name="link"> + } onSearch={copy} /> + : ''} + : + You will send this file to the user directly + }
diff --git a/web/src/pages/dashboard/components/TableFiles.tsx b/web/src/pages/dashboard/components/TableFiles.tsx index 98ff6af47..de5cb5615 100644 --- a/web/src/pages/dashboard/components/TableFiles.tsx +++ b/web/src/pages/dashboard/components/TableFiles.tsx @@ -12,6 +12,7 @@ import { GlobalOutlined, ScissorOutlined, ShareAltOutlined, + ArrowRightOutlined, SnippetsOutlined, TeamOutlined, VideoCameraOutlined @@ -29,7 +30,7 @@ interface Props { onChange: (...args: any[]) => void, onDelete: (row: any) => void, onRename: (row: any) => void, - onShare: (row: any) => void, + onShare: (row: any, action: string) => void, onRowClick: (row: any) => void, onCut?: (row: any) => void, onCopy?: (row: any) => void, @@ -107,7 +108,11 @@ const TableFiles: React.FC = ({ } key="share" - onClick={() => onShare(popup?.row)}>Share + onClick={() => onShare(popup?.row, 'share')}>Share + {popup?.row.type !== 'folder' ? } + key="send" + onClick={() => onShare(popup?.row, 'forward')}>Send to : ''} {popup?.row.type !== 'folder' ? } key="download" diff --git a/web/src/pages/dashboard/index.tsx b/web/src/pages/dashboard/index.tsx index 2b7b08771..d0ca3ef9a 100644 --- a/web/src/pages/dashboard/index.tsx +++ b/web/src/pages/dashboard/index.tsx @@ -356,9 +356,9 @@ const Dashboard: React.FC = ({ match }) => { setSelected([row]) setFileRename(row) }} - onShare={row => { + onShare={(row, action) => { setSelected([row]) - setSelectShare(row) + setSelectShare({ row, action }) }} onRowClick={row => { if (row.type === 'folder') { From 188a22af1d85d717a8d30a6ef55b2a3fbf1a2b86 Mon Sep 17 00:00:00 2001 From: M Gilang Januar Date: Fri, 10 Dec 2021 21:25:15 +0700 Subject: [PATCH 5/6] update signed key to null if no sharing options --- server/src/api/v1/Files.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/api/v1/Files.ts b/server/src/api/v1/Files.ts index ed00eb772..5feecd4fc 100644 --- a/server/src/api/v1/Files.ts +++ b/server/src/api/v1/Files.ts @@ -203,6 +203,10 @@ export class Files { key = AES.encrypt(JSON.stringify({ file: { id: file.id }, session: req.tg.session.save() }), process.env.FILES_JWT_SECRET).toString() } + if (!file.sharing_options?.length && !currentFile.sharing_options?.length) { + key = null + } + const { affected } = await Model.createQueryBuilder('files') .update({ ...file.name ? { name: file.name } : {}, From da347c9e551e268c995e659929a1cfe32f89af5b Mon Sep 17 00:00:00 2001 From: M Gilang Januar Date: Sat, 11 Dec 2021 09:26:24 +0700 Subject: [PATCH 6/6] 1.0.0 --- package.json | 2 +- server/package.json | 4 ++-- upgrade.js | 22 ++++++++++++++++++++++ web/package.json | 4 ++-- 4 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 upgrade.js diff --git a/package.json b/package.json index 92b1f18ef..12d8222e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "teledrive", - "version": "0.1.0", + "version": "1.0.0", "repository": "git@github.com:mgilangjanuar/teledrive.git", "author": "M Gilang Januar ", "license": "MIT", diff --git a/server/package.json b/server/package.json index 89e365cd9..ca6fa8191 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "server", - "version": "0.1.0", + "version": "1.0.0", "main": "dist/index.js", "license": "MIT", "private": true, @@ -76,4 +76,4 @@ "rimraf": "^3.0.2", "typescript": "^4.4.2" } -} +} \ No newline at end of file diff --git a/upgrade.js b/upgrade.js new file mode 100644 index 000000000..def6fe546 --- /dev/null +++ b/upgrade.js @@ -0,0 +1,22 @@ +const fs = require('fs') +const { execSync } = require('child_process') + +const root = fs.readFileSync('./package.json', 'utf-8') +const rootObj = JSON.parse(root) +rootObj.version = process.argv[2] +fs.writeFileSync('./package.json', JSON.stringify(rootObj, null, 2)) + +const api = fs.readFileSync('./server/package.json', 'utf-8') +const apiObj = JSON.parse(api) +apiObj.version = process.argv[2] +fs.writeFileSync('./server/package.json', JSON.stringify(apiObj, null, 2)) +// execSync('cd ./server && yarn install && cd ..') + +const web = fs.readFileSync('./web/package.json', 'utf-8') +const webObj = JSON.parse(web) +webObj.version = process.argv[2] +fs.writeFileSync('./web/package.json', JSON.stringify(webObj, null, 2)) +// execSync('cd ./web && yarn install && cd ..') + +execSync('yarn install && yarn workspaces run build') +execSync(`git add . && git commit -m "${process.argv[2]}"`) \ No newline at end of file diff --git a/web/package.json b/web/package.json index 1b8ea14b9..439518751 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "web", - "version": "0.1.0", + "version": "1.0.0", "private": true, "dependencies": { "@craco/craco": "^6.3.0", @@ -87,4 +87,4 @@ "workbox-strategies": "^5.1.3", "workbox-streams": "^5.1.3" } -} +} \ No newline at end of file