Coder Social home page Coder Social logo

mgilangjanuar / teledrive Goto Github PK

View Code? Open in Web Editor NEW
2.0K 36.0 955.0 38.14 MB

The Google Drive/OneDrive/etc alternative using Telegram API

Home Page: https://teledriveapp.com

License: GNU General Public License v3.0

JavaScript 0.82% TypeScript 21.05% HTML 0.27% CSS 77.47% Dockerfile 0.02% Shell 0.35% Procfile 0.01%

teledrive's Introduction

img

This is the open source project of Google Drive/OneDrive/iCloud/Dropbox alternative using Telegram API for the free unlimited cloud storage.

img

Motivation

Getting Started

Read here for full instructions: teledriveapp.com

API Documentation

Run in Postman

How to Contribute

  • Fork and clone this repository
  • Commit your changes
  • Create a pull request to the staging branch

Or, just send us an issue for reporting bugs and/or ask the questions, share your ideas, etc in discussions.

Deploy to Heroku

Deploy

If you're experiencing issues check this #373

Deploy to Railway

Deploy

(DrakeTDL's forked Teledrive repo powers the railway template.)

Folder Structure

We using the monorepo structure with yarn workspaces.

.
├── README.md
├── package.json
├── server
│   ├── package.json
│   ├── src
│   │   └── index.ts
│   └── tsconfig.json
├── web
│   ├── package.json
│   ├── public
│   ├── src
│   │   ├── pages
│   │   └── App.tsx
│   ├── tsconfig.json
│   └── yarn.lock
└── yarn.lock

Contributers

All thanks to our contributors

Community

img

img

teledrive's People

Contributors

adrianpaniagualeon avatar albertopasqualetto avatar aqshola avatar birdup000 avatar grgp avatar kalyanimhala avatar kavyakinjalk avatar lambdagg avatar lellisv2 avatar mgilangjanuar avatar ofarukcaki avatar oneandonlyjason avatar oscarcmd avatar prakashdivyy avatar shadowdevfr avatar sprabowo avatar starpunjabi avatar tromcho avatar umarhadi avatar withertick avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

teledrive's Issues

Add Telegram ad to the quick message

Is your feature request related to a problem? Please describe.
Telegram add term: 3.3. Developers must include support for official sponsored messages in Telegram channels and may not interefere with this functionality.

Describe the solution you'd like
Add the sponsored messages to the channel of Quick Message.

Installation on UbuntuServer 20.04.4

Hi, i have a problem with installation on Ubuntu Server 20.04.

I installed every requisite, but when i try

yarn server typeorm schema:sync

i have this error:

yarn run v1.22.17
$ yarn workspace server typeorm schema:sync
error Command "typeorm" not found.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed.
Exit code: 1
Command: /usr/bin/node
Arguments: /usr/lib/node_modules/yarn/lib/cli.js typeorm schema:sync
Directory: /home/etors/teledrive/server
Output:

info Visit https://yarnpkg.com/en/docs/cli/workspace for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Files are not deleted from saved messages

Describe the bug
If you select for deletion a file in the root and an entire folder from teledrive, the files inside that folder in teledrive are not deleted from saved messages. Anyway, the selected things are removed from teledrive.

To Reproduce
Steps to reproduce the behavior:

  1. From teledrive, select a file in the root folder and an entire folder
  2. Click on Delete, checking the flag to delete files in telegram saved messages, too
  3. On teledrive, is all ok
  4. In the saved messages in telegram, the files that were inside the folder, persists
  5. The files that were in the root teledrive folder, are correctly deleted, also from telegram

ps: really thank you for your nice project!

WebDAV Endpoint

Hey,

a WebDAV Endpoint would be really cool.

With a Endpoint like this you could access the Files with different Programms (Like Rclone #205)
and would not need to access the Dashboard for a manuell File Sync all the Time

Cannot install the deps because unauthorized

❯ cd teledrive
❯ yarn install
yarn install v1.22.17
[1/4] Resolving packages...
[2/4] Fetching packages...
error An unexpected error occurred: "https://npm.pkg.github.com/download/@mgilangjanuar/telegram/1.10.2/9cba42737c325e9777d0e4f0fcd5f237cbf928e24518b79f279a62d8a1f9f7c1: Request failed \"401 Unauthorized\"".
info If you think this is a bug, please open a bug report with the information provided in "/home/roby/code/teledrive/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

Problem with file availability

Describe the bug
The problem is that while the account is open on the site, the file can be accessed publicly without any problem, but at the same time, when you log out, it is no longer available.

To Reproduce
Steps to reproduce the behavior:

  1. Login
  2. Upload a file and set it up publicly
  3. Log out
  4. File not available

Expected behavior
Ideally, when validating a session, it should be kept open and the file should be available, since at least in my case I log in 3 times and I always have to log in again for the file to be available.

Screenshots
I didn't get to take a picture, but it included a Cloudflare error where it marked the TeleDrive domain as "host error", but when I logged in, the screen no longer appeared.

Desktop (please complete the following information):

  • OS: All of them
  • Browser All of them
  • Version All of them

Smartphone (please complete the following information):

  • Same as above, all of them

Additional context
It would be excellent if the session could be persistent and only be logged in once, or when manually logging out. Likewise, could you also look at the problem of the videos that when trying to fast forward or rewind they restart? Thanks, excellent project!

Install to home screen

Is your feature request related to a problem? Please describe.
Make users easier to access the app via mobile.

Describe the solution you'd like
Add options to install/add web app to the users home screen in mobile.

Describe alternatives you've considered
Develop mobile app for it?

Improve the login form for input the phone number

Is your feature request related to a problem? Please describe.
Many users forgot to add the country code in the phone number field.

Describe the solution you'd like
Add the dropdown of all countries, so everyone can select the country code before inputting the phone number.

Describe alternatives you've considered
Auto-detect the country of the user's IP, maybe.

Additional context
Nope

Saving TG Session in DB seems Inappropriate?

Is your feature request related to a problem? Please describe.

    if (file.sharing_options?.length && !key) {
      key = AES.encrypt(JSON.stringify({ file: { id: file.id }, session: req.tg.session.save() }), process.env.FILES_JWT_SECRET).toString()
    }

Seems like user`s TG Session will be saved in DB when they share files.This behaviour may lack their credentials and identity with DB hacked...
And the owner may get Telegram credentials of user saved in DB as long as they share files.

Describe the solution you'd like
Forwording files to a certain bot for file sharing and getting them with bot API may avoid lack user credentials.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

The docker container is not starting, throws an error about react-scripts

Describe the bug
The docker container is not starting, throws an error about react-scripts even though it is installed globally. I have all my ENV variables set.

Expected behavior
The docker container should build and be able to run.

Screenshots
image

Machine (please complete the following information):

  • OS: Ubuntu 20.04

Additional context
Yes, I've installed react-scripts globally using npm i react-scripts -g.

Android App

An android version of the app would be nice, with feature like auto backup picture(something like google photos)

Update the bandwidth strategy

Is your feature request related to a problem? Please describe.
Network egress for TeleDrive is very costly. And, sometimes people can't get more than 500kbps even they paid for the Premium package.

Describe the solution you'd like
Change the bandwidth strategy to be fairer. All people (user and anonymous) will have the bandwidth quota per day. So, all users can't abuse to download many files.

Describe alternatives you've considered

Additional context

Docker image

It would be great to have a docker image with configurable env vars, so that you don't need to have the requisites installed on your local machine and get started fast.

Auth key dulicated

Describe the bug
Got an error AUTH_KEY_DUPLICATED

To Reproduce
Steps to reproduce the behavior:

  1. Login
  2. Wait for at least 24h
  3. Hit /users/me endpoint

Expected behavior
No error

Screenshots

{
  "error": "406: AUTH_KEY_DUPLICATED (caused by InvokeWithLayer)",
  "details": {
    "code": 406,
    "errorMessage": "AUTH_KEY_DUPLICATED",
    "name": "RPCError",
    "message": "406: AUTH_KEY_DUPLICATED (caused by InvokeWithLayer)",
    "stack": "RPCError: 406: AUTH_KEY_DUPLICATED (caused by InvokeWithLayer)\n    at RPCMessageToError (/root/teledrive/node_modules/@mgilangjanuar/gramjs/errors/index.ts:23:12)\n    at MTProtoSender._handleRPCResult (/root/teledrive/node_modules/@mgilangjanuar/gramjs/network/MTProtoSender.ts:655:44)\n    at MTProtoSender._processMessage (/root/teledrive/node_modules/@mgilangjanuar/gramjs/network/MTProtoSender.ts:570:15)\n    at runMicrotasks (<anonymous>)\n    at processTicksAndRejections (node:internal/process/task_queues:96:5)\n    at MTProtoSender._recvLoop (/root/teledrive/node_modules/@mgilangjanuar/gramjs/network/MTProtoSender.ts:543:17)"
  }
}
RPCError: 406: AUTH_KEY_DUPLICATED (caused by InvokeWithLayer)
    at RPCMessageToError (/root/teledrive/node_modules/@mgilangjanuar/gramjs/errors/index.ts:23:12)
    at MTProtoSender._handleRPCResult (/root/teledrive/node_modules/@mgilangjanuar/gramjs/network/MTProtoSender.ts:655:44)
    at MTProtoSender._processMessage (/root/teledrive/node_modules/@mgilangjanuar/gramjs/network/MTProtoSender.ts:570:15)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at MTProtoSender._recvLoop (/root/teledrive/node_modules/@mgilangjanuar/gramjs/network/MTProtoSender.ts:543:17)"

Desktop (please complete the following information):

  • All

Smartphone (please complete the following information):

  • All

Additional context

Related issue: #238

Unknown Error: 420 caused by InvokeWithLayer

  "error": "A wait of 401 seconds is required (caused by InvokeWithLayer)",
  "details": {
    "code": 420,
    "errorMessage": "FLOOD",
    "seconds": 401,
    "name": "FloodWaitError",
    "message": "A wait of 401 seconds is required (caused by InvokeWithLayer)",
    "stack": "FloodWaitError: A wait of 401 seconds is required (caused by InvokeWithLayer)\n    at RPCMessageToError (/node_modules/gramjs/errors/index.ts:20:20)\n    at MTProtoSender._handleRPCResult (/node_modules/gramjs/network/MTProtoSender.ts:644:44)\n    at MTProtoSender._processMessage (/node_modules/gramjs/network/MTProtoSender.ts:559:15)\n    at processTicksAndRejections (node:internal/process/task_queues:96:5)\n    at MTProtoSender._recvLoop (/node_modules/gramjs/network/MTProtoSender.ts:532:17)"
  }
}```

Get premium on self hosted instance?

Hi, I've been fiddling with teledrive for a bit and got it working, but i'm trying to find a way to get premium on self hosted instances. Tried to change "free" to "premium" in postgre and changing a few things but nothing seem to be working. Did anyone succeed in doing this?
Thanks.

while running server start I am getting below issue

image

yarn server start
yarn run v1.22.17
$ yarn workspace server start
$ nodemon dist/index.js --watch
[nodemon] 2.0.12
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node dist/index.js`
[
  { path: '/ping', methods: [ 'GET' ], middlewares: [ 'anonymous' ] },
  {
    path: '/security.txt',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous' ]
  },
  {
    path: '/api/v1/auth/sendCode',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/auth/reSendCode',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/auth/login',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/auth/refreshToken',
    methods: [ 'POST' ],
    middlewares: [ 'handler' ]
  },
  {
    path: '/api/v1/auth/qrCode',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/auth/qrCodeSignIn',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/auth/me',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/auth/logout',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/contact/send',
    methods: [ 'POST' ],
    middlewares: [ 'handler' ]
  },
  {
    path: '/api/v1/dialogs/',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/dialogs/:type/:id',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/dialogs/:type/:id/avatar.jpg',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/documents/privacy',
    methods: [ 'GET' ],
    middlewares: [ 'handler' ]
  },
  {
    path: '/api/v1/documents/tos',
    methods: [ 'GET' ],
    middlewares: [ 'handler' ]
  },
  {
    path: '/api/v1/documents/refund',
    methods: [ 'GET' ],
    middlewares: [ 'handler' ]
  },
  {
    path: '/api/v1/files/',
    methods: [ 'GET', 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/files/addFolder',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/files/:id',
    methods: [ 'GET', 'DELETE', 'PATCH' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/files/upload/:id?',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/files/uploadBeta/:id?',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/files/breadcrumbs/:id',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/files/sync',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/files/filesSync',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/github/contributors',
    methods: [ 'GET' ],
    middlewares: [ 'handler' ]
  },
  {
    path: '/api/v1/messages/history/:type/:id',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/messages/sponsoredMessages/:type/:id',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/messages/readSponsoredMessages/:type/:id',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/messages/read/:type/:id',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/messages/send/:type/:id',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/messages/:type/:id/:msgId',
    methods: [ 'PATCH', 'DELETE' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/messages/forward/:msgId',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/messages/search',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/messages/globalSearch',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/messages/:type/:id/avatar.jpg',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/subscriptions/',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/users/search',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/users/me/usage',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/users/',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/users/me/settings',
    methods: [ 'PATCH' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/users/me/delete',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/users/me/paymentSync',
    methods: [ 'POST' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/users/:tgId/payment',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/users/:username/:param?',
    methods: [ 'GET' ],
    middlewares: [ 'anonymous', 'handler' ]
  },
  {
    path: '/api/v1/utils/maintenance',
    methods: [ 'GET' ],
    middlewares: [ 'handler' ]
  },
  {
    path: '/api/v1/utils/ipinfo',
    methods: [ 'GET' ],
    middlewares: [ 'handler' ]
  },
  {
    path: '/api/v1/utils/version',
    methods: [ 'GET' ],
    middlewares: [ 'handler' ]
  },
  {
    path: '/api/v1/utils/simpleAnalytics',
    methods: [ 'GET' ],
    middlewares: [ 'handler' ]
  },
  {
    path: '/api/v1/waitings/',
    methods: [ 'POST' ],
    middlewares: [ 'handler' ]
  }
]
Running at :4000...
[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16)
[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16)
[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16)
[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16)
[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16)

C:\SSK\Projects\teledrive\node_modules\pg-protocol\src\parser.ts:369
      name === 'notice' ? new NoticeMessage(length, messageValue) : new DatabaseError(messageValue, length, name)
                                                                    ^
error: no pg_hba.conf entry for host "123.136.206.55", user "aupacialotpaoa", database "d7hg0srltk3us", SSL off
    at Parser.parseErrorMessage (C:\SSK\Projects\teledrive\node_modules\pg-protocol\src\parser.ts:369:69)
    at Parser.handlePacket (C:\SSK\Projects\teledrive\node_modules\pg-protocol\src\parser.ts:188:21)
    at Parser.parse (C:\SSK\Projects\teledrive\node_modules\pg-protocol\src\parser.ts:103:30)
    at Socket.<anonymous> (C:\SSK\Projects\teledrive\node_modules\pg-protocol\src\index.ts:7:48)
    at Socket.emit (node:events:526:28)
    at addChunk (node:internal/streams/readable:315:12)
    at readableAddChunk (node:internal/streams/readable:289:9)
    at Socket.Readable.push (node:internal/streams/readable:228:10)
    at TCP.onStreamRead (node:internal/stream_base_commons:190:23)
[nodemon] app crashed - waiting for file changes before starting...

CDN integration

Hello, I would like to have a possibility that allows me to use a CDN so that the videos and the static content are loaded via a CDN.

Let's talk about this

Hello,

So this project brought my attention and I like the idea, however let's talk about it for a little while - I know GitHub issues ain't the right place to do that but I thought it'd be the most active discussion station that we can discuss that on.

Alright so you're stating on your website that Telegram promised they'll provide unlimited cloud storage free, forever. I couldn't really find any indication that it was a promise, to me it was just a normal Tweet in which they said that they provide unlimited cloud storage, maybe it's just temporarily?
And let's suppose that they promised, we all know that promises never work in our world (if we're being honest)... Remember how Microsoft promised that Windows 10 was gonna be the last release of Windows? well we have Windows 11 now.
Well and I, I personally provide a free service and in the start we almost promised that we're gonna provide a unique feature in our service (free 24/7 Minecraft hosting), however we couldn't handle this due to the nature of Minecraft servers.. they consume a lot of resources.

I know we can't compare my service with a company like Telegram, but everything has a limit anyway or am I wrong?

Like is Telegram aware of this project? you can't just sell some paid plans already without asking for their permission first. What if Telegram change their "promise" one day? that's gonna be some shocking news to everyone using TeleDrive.

And since I already opened an issue here, there's one more thing that I'd like to report, the file picker doesn't work on phone like I'm unable to upload any files on the phone interface
EDIT: it seems the file uploader is actually a folder uploader, is that the expected behaviour?

Thank you for reading my issue

Need some improvements in page navigation

Thanks for creating awesome service for us.

The thing that I think strange is, when I've logged in and then move away from the dashboard page, I lose my way back to my dashboard quickly. I have to go back to the home page and then back looking for a button to go back to my dashboard. Isn't this a little weird?

Some options that I think could be taken are to display a single button/menu that appears on all pages after the user logs into their account (for example, i add a new menu in navigation).

gambar

I know it not to good, but hope you get my point.

Thanks,
Rania Amina

Integrate with rclone and rsync.

Discussed in #120

Originally posted by grubeli November 26, 2021
Is there a way to integrate with rclone?

Adding this and rsync in the app is a good idea. Many Linux servers use rsync to make backups.

Enable users upload files

Is your feature request related to a problem? Please describe.
The user can't upload the files if the Upload component sets the directory as true.

Describe the solution you'd like
Maybe we can add the toggle to enable/disable users to upload a directory/files.

Describe alternatives you've considered
Find another way to enable users to upload folders and files.

Additional context

Getting error public.user does not exist

Everything is configured properly, and application is running, but I am getting some error while trying to login through otp or through qrcode as well. Please see this small video.
https://www.loom.com/share/b61a3f55058347df999c9c1aad899e77

Error Details:
{"error":"relation "public.users" does not exist","details":{"query":"SELECT "Users"."created_at" AS "Users_created_at", "Users"."updated_at" AS "Users_updated_at", "Users"."id" AS "Users_id", "Users"."username" AS "Users_username", "Users"."name" AS "Users_name", "Users"."tg_id" AS "Users_tg_id", "Users"."plan" AS "Users_plan", "Users"."subscription_id" AS "Users_subscription_id", "Users"."midtrans_id" AS "Users_midtrans_id", "Users"."plan_expired_at" AS "Users_plan_expired_at", "Users"."settings" AS "Users_settings" FROM "public"."users" "Users" WHERE "Users"."tg_id" = $1 LIMIT 1","parameters":["1110868442"],......

Grid Layout

Is your feature request related to a problem? Please describe.
For now, i need to click every file to check detail image which i need to download

Describe the solution you'd like
Better give us option grid layout, like google drive UI do. So we can got all visualize our file

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

can move files using drag and drop

Is your feature request related to a problem? Please describe.
Easy files movement and management between folders.

Describe the solution you'd like
Enable update parent folder using drag and drop.

Describe alternatives you've considered

Additional context

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.