Giter VIP home page Giter VIP logo

pingvin-share's People

Contributors

adriadam10 avatar dmytroonopa avatar fusengum avatar imgbotapp avatar ivanli-cn avatar konradfuchs avatar maurxce avatar mayunfei avatar mochman avatar neyxo avatar nosolohacking avatar pierrbt avatar rooyca avatar sevenflanks avatar stautonico avatar stonith404 avatar yuaanlin avatar zz5840 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

pingvin-share's Issues

๐Ÿ› Bug Report: Upload returns 413 with cloudlfare tunnel

๐Ÿ‘Ÿ Reproduction steps

When I try to upload larger file it will just stop after few seconds.
I've set the maximum upload 10GB.
I've tried to send 2.4GB file, ISO and I get the errors 403 and 413 in console.
Using chrome to upload.

๐Ÿ‘ Expected behavior

Upload normally.

๐Ÿ‘Ž Actual Behavior

image
image

๐ŸŒ Browser

Chrome

"Reverse" shares (URL for file upload)

A feature that I would really like to see is the ability to generate a URL which allows for a one time file upload. This could be used in cases where you want someone to send you a file, but it is large so hard to send over discord/email.

It would work as such:

  1. The authenticated user generates a URL that leads to a file upload. (can have expiration, use count, etc.)
  2. The user sends the link to someone
  3. The other person can upload a file (ability to limit to specific size/mime type/file count, etc)
  4. The authenticated user can view all the files uploaded to that specific URL via the shares dashboard, or possibly another dashboard.

This feature should be limited to authenticated users only.

This missing feature is the only thing stopping me from deploying this on my own server, and I would love to see it.

If this is something that you would like implemented into the program, I don't mind doing it myself and opening a PR.

Feature: Allow unauthenticated uploads

There should be an option that allows to upload files without authentication.
This option can be enabled/disabled with an environment variable e.g ALLOW_ANONYMOUS_SHARES

๐Ÿ› Bug report: Database resets after upgrade

๐Ÿ‘Ÿ Reproduction steps

I don't know if anyone else has this problem and if anyone can help me find the problem. I have installed Pingvin on my Synology. The Docker containers are automatically updated via Watchtower. Every time Watchtower Pingvin I lose all my settings in Pingvin.
App url and accounts are all gone then.
And I have to set up everything again

๐Ÿ‘ Expected behavior

I don't know if it's my synology or the settings. All other containers are updated normally and do not lose their settings

๐Ÿ‘Ž Actual Behavior

BF39E363-C82E-4C0F-9359-5B7DFCD24068

๐ŸŒ Browser

Firefox, Safari

SQLite database is locked

Getting error see bellow:

Error: SQLite database error
database is locked
0: migration_core::state::ApplyMigrations
at migration-engine/core/src/state.rs:186
ready - started server on 0.0.0.0:3000, url: http://localhost:3000

[email protected] prod
prisma migrate deploy && prisma db seed && node dist/src/main
Prisma schema loaded from prisma/schema.prisma
Datasource "db": SQLite database "pingvin-share.db" at "file:../data/pingvin-share.db"
6 migrations found in prisma/migrations
Error: SQLite database error
database is locked
0: migration_core::state::ApplyMigrations
at migration-engine/core/src/state.rs:186

๐Ÿ› Bug Report: Login with mobile Firefox not possible (nginx + ssl)

๐Ÿ‘Ÿ Reproduction steps

๐Ÿ‘ Expected behavior

Get passed login and open upload page

๐Ÿ‘Ž Actual Behavior

  • Login does not work
  • no error
  • stays on login form

Only happens with domain AND (!) an my mobile Firefox (iOS).
Safari ist fine! Also mobile Firefox via IP.

๐ŸŒ Browser

Mobile Firefox iOS

๐Ÿง‘โ€๐Ÿ’ป Nginx Config

{
  "id": 18,
  "created_on": "2021-10-08T10:31:05.000Z",
  "modified_on": "2022-12-16T09:45:13.000Z",
  "owner_user_id": 1,
  "domain_names": [
    "pingvin.domain.com"
  ],
  "forward_host": "10.0.0.1",
  "forward_port": 3000,
  "access_list_id": 0,
  "certificate_id": 20,
  "ssl_forced": true,
  "caching_enabled": false,
  "block_exploits": true,
  "advanced_config": "",
  "meta": {
    "letsencrypt_agree": false,
    "dns_challenge": false
  },
  "allow_websocket_upgrade": false,
  "http2_support": true,
  "forward_scheme": "http",
  "enabled": 1,
  "locations": [],
  "hsts_enabled": true,
  "hsts_subdomains": false
}

๐Ÿš€ Feature: virus scan for uploaded files from external sources

๐Ÿ”– Feature description

hi, first I want to say, that pingvin-shares is an amazing software! Thank you very much! I like the requested feature for generating upload links for external but known people. but for this feature, i think it is also necessary to check the files for viruses or other malware in some way. Have there already been requests in this regard? best wishes Torsten

๐ŸŽค Pitch

Virus and malware scan for incoming files.

2 factor authentication

Hello,
Is a 2 factor authentication for the admin planned ?
so that the admin account is better protected ? with an authentication app. like google authenticator or Authy
I would be happy if this could be implemented.
Keep up the good work :)

Default login email/password?

Hi,

I have the docker container running using docker-compose.yml

I'm able to access the login page, what is the default login email and password to use?

Expiration date of "Never"

It would be nice if there was an expiration date of "never" so that the share can be used at any time and manually deleted when no longer needed. If this is a feature you'd approve of, I wouldn't mind forking and creating a PR to implement it.

Support CJK-character file names

Step to reproduce:

  1. Upload ๆธฌ่ฉฆ.txt (lit. Test.txt) which contains CJK characters.
  2. Pingvin converts the filename to something like %E6%B8%AC%E8%A9%A6.txt

Expected behaviour:
Pingvin should never modify the filename, except the filename is illegal on server's filesystem.

๐Ÿ› Bug Report: Download with {"message":"Unauthorized"}

๐Ÿ‘Ÿ Reproduction steps

Share a file.
Access the link
I click in "Download"

๐Ÿ‘ Expected behavior

I should download a file.

๐Ÿ‘Ž Actual Behavior

When I click in download a file a receive the {"message":"Unauthorized"}

๐ŸŒ Browser

Firefox & Chrome

Feature Request : Admin functionality

Hello,

Splitting my requests as asked in my initial one

I'd like to be able to have full control of the accounts created.
So, for example, the first account ever created would be the admin, account creation would be disabled, and I would be able to create account for people I know (That's how Jellyfin works for example).

Thanks !

Feature: Add email recipients

This feature should allow a user to enter email addresses while creating a share. On creation the entered email recipients should receive an email with the share link

Feature Request : Different quotas for anonymous and signed in users

Hello,

I'd like it if it was possible to put different settings when you're logged in and for when you're not logged in.
For example :

Logged in :

  • 5GB max size
  • Can change the expiration date

Logged off :

  • 5mb max size
  • Cannot change expiration date

Thanks !

Edit : Changed title/issue and made my requests into separate issues for easier tracking

Initial text of the issue Very good project I like it so far. I've installed it on UnRAID and it works perfectly, if anyone needs help with that I'll be happy to help. I've got a few requests if possible :

My domain is shared between my and my friends so we can share files with each others
I'd ideally want to manage things this way :

  • Manual account creation by the admin only (first account ever created for example? I don't know if the accounts have an ID or something)
  • Accounts can be created with usernames or email (so we don't need to share emails)
  • Share expiration/max size when not logged in is set and cannot be changed

I hope I'm not asking for too much
Thanks a lot for the work already done, I'll be following this project closely.

SMTP

For Pingvin Share, the email notification only seems to work with GMail's SMTP service. Would it be possible to get compatibility with SendGrid. Currently you request the smtp host, smtp email, smtp password, and smtp port. For SendGrid to work, there also needs to be a spot for the smtp username, which can be different than the smtp email.

More granular expiration input.

I wrote issue #8 and realized after I opened PR #11 that it would make much more sense to have even more granular expiration selection.

Something like this:
image

Based on the source code, it shouldn't be too hard to implement. Maybe I can replace PR #11 with a feature like this?

These lines could essentially stay exactly the same:

const expirationDate = moment()
.add(
share.expiration.split("-")[0],
share.expiration.split("-")[1] as moment.unitOfTime.DurationConstructor
)
.toDate();

Pretty much the only thing that would need to change would be:

<Select
label="Expiration"
{...form.getInputProps("expiration")}
data={[
{
value: "10-minutes",
label: "10 Minutes",
},
{ value: "1-hour", label: "1 Hour" },
{ value: "1-day", label: "1 Day" },
{ value: "1-week".toString(), label: "1 Week" },
{ value: "1-month", label: "1 Month" },
]}
/>

and a little bit of frontend logic.

It could even be a little more advanced, giving a preview of the exact time the share would expire:

image

What do you think?

Direct link to file

A awesome feature that you get a direkt link to the file, so you can post it on discord, steam, forums or what ever.

๐Ÿš€ Feature: Chunked uploads

Amazing work so far and thanks for promptly fixing the bug I submitted. Compared to the old Mozilla Send project, you seem to have enhanced most of the core functionality.

The fork that I had been using (https://github.com/timvisee/send) seems to find a way around the CloudFlare tunnels 100MB upload limit. Given how popular it is as a reverse proxy, it would be great if you do the same in this project.

Direct port access on Pingvin I can already do unlimited uploads but through the CF reverse proxy I cannot. I recall something about chunked uploads to get around this.

๐Ÿ› Bug Report: Large file upload and login behind Reverse Proxy (nginx) not possible

๐Ÿ‘Ÿ Reproduction steps

Pingvin is running fine with nginx + ssl with smaller files. I then tried to extend my max file size to 3Gb and uploaded a .rar with 2.2 GB.

๐Ÿ‘ Expected behavior

Uploading large files with SSL and reverse proxy without error and creating a share you can download.

๐Ÿ‘Ž Actual Behavior

  • Upload error (no specific error)
  • no share created
  • db entry has been created

This only happens with nginx and domain https://pingvin.domain.com

I have no issues in these cases:

  • uploading smaller files (just tried below 100Mb)
  • uploading large files via ip: http://10.0.0.1:3000

๐ŸŒ Browser

Firefox

๐Ÿง‘โ€๐Ÿ’ป Nginx Config

{
  "id": 18,
  "created_on": "2021-10-08T10:31:05.000Z",
  "modified_on": "2022-12-16T09:45:13.000Z",
  "owner_user_id": 1,
  "domain_names": [
    "pingvin.domain.com"
  ],
  "forward_host": "10.0.0.1",
  "forward_port": 3000,
  "access_list_id": 0,
  "certificate_id": 20,
  "ssl_forced": true,
  "caching_enabled": false,
  "block_exploits": true,
  "advanced_config": "",
  "meta": {
    "letsencrypt_agree": false,
    "dns_challenge": false
  },
  "allow_websocket_upgrade": false,
  "http2_support": true,
  "forward_scheme": "http",
  "enabled": 1,
  "locations": [],
  "hsts_enabled": true,
  "hsts_subdomains": false
}

๐Ÿš€ Feature: Add 2 Factor Authentication

๐Ÿ”– Feature description

Given that files are being shared publicly, security is paramount. It would be great if you added 2FA as an option. Ideally, this would be configured at a user level. You could even have a setting to define the default authentication behavior for newly registered users. (e.g. 2FA or non-2FA).

๐ŸŽค Pitch

It is all about added security and protection. Having it as an option would keep the flexibility of not using for those who do not want to with the option to enable it for those users who do.

Signup page accessible when it is Disabled

I have disabled signup page, but left the home page enabled.

The 'Get started' button leads to Signup page, but signup is disabled.

I would suggest that IF Home page is true, AND Signup if false, THEN Get Started button should lead to Sign in page or it should not be displayed at all.

Upload for large files (>500MB) takes very long time

Hello,
I find your project very cool, wanted to test immediately because I needed exactly such a thing. I installed it with a docker-compose on my VPS, behind a reverse proxy (caddy).

Additional configuration after installation built in very nicely, ;) I liked it.

I have uploaded a couple of small data, with which it copes very well, but as for large data (>500) upload takes very long. I had to cancel the test because it took so long. Unfortunately, I could not find in the logs why this is so slow.

For comparison:
File: APP duration
800MB ----> pingvin------> infinite
800MB----->seafile------->59s

Tip:
It would be really cool to see the upload display in percent or time, then you know when how long you still have to wait.
Otherwise, really cool project, the Config is simple and clear.

๐Ÿš€ Feature: Delete share once `Maximal views` are reached

๐Ÿ”– Feature description

Not sure if it's a bug or a feature request but I just noticed that shares do not get deleted if the Maximal views are reached.
Since nobody can access the share after the Maximal views are reached anyways it would be great if the share and it's files then get removed or at least make it an option.

๐ŸŽค Pitch

Shares with Maximal views reached can't be accessed no more, IMO there is no point in keeping the share and it's files.

Jobs don't get executed

I'm unclear if this should be done and my config is incorrect or this needs to be a feature request. Once an item expires or has reached the maximum views, can an option be created to clean up and wipe them from my drive? It will eventually have a lot of junk files otherwise. Thank you and love the work so far.

๐Ÿ› Bug Report: Upload times out after 5 minutes

๐Ÿ‘Ÿ Reproduction steps

When I upload a large file (minimum 8 GB recommended)

๐Ÿ‘ Expected behavior

It should complete the upload

๐Ÿ‘Ž Actual Behavior

After uploading like 6.5 GB it shows "An unknown error occurred" and the upload stops.
Also the temp file will remain in /uploads/_temp until I manually delete it.
Untitled

๐ŸŒ Browser

Chrome

๐Ÿš€ Feature: Add "Test Email" button to configuration screen

๐Ÿ”– Feature description

I appreciate how you have added a custom username and password to the email configuration. It is helpful! The setup went smoothly, but I am missing a "Send test email" button. Clicking this would send an email and confirm that the entered email configuration is working and valid.

๐ŸŽค Pitch

Troubleshooting email issues is frustrating. While I can force sending an email by creating and deleting a share, it requires more work than needed. A simple button and associated message box would be really helpful. You click the button and PV tries to send an email and at a minimum it would say "Email sent successfully" or "email failed."

A more advanced approach could provide more status details in the message box based on the response for the email server. I could envision "Message Sent", "Invalid user id", "Invalid password" or stuff like that.

๐Ÿš€ Feature: Better configuration UI

๐Ÿ”– Feature description

A configuration page that is very well structured by categories like security, email etc.
At the end the page should look and feel like a settings page not like a .env UI.

๐ŸŽค Pitch

The current configuration page should do the job but when we want to add more configuration options like custom branding, the configuration page gets really confusing.

Copy to clipboard button not working

Hey the button, copy to clipboard are not working.
i got the notification "Your link was copied to the keyboard."
but if i paste it anywahre my clipboard is empty.

NVIDIA_Share_29-10-2022_23-20-33

NVIDIA_Share_29-10-2022_23-24-28

ok after changing my webserver to force HTTPS it is working.

Customizable Mail Notification

Hey,

really love pingvin and the feature to send mail notifications for shares.
Any chance we could define that notification message ourselves in a text box or something?

Registration possible even if ALLOW_REGISTRATION=false is set

Hi,

even with

ALLOW_REGISTRATION=false

in the .env file, the "Get Started" button on the homepage redirects to /auth/signUp and multiple users can register.

Also I asked myself how to add a user, if registrations are not possible. Is there a cli program, that allows to add a user ?

Also, even when not showing the Homepage the /auth/signUp link is reachable and users can register.

Probably a wrong ENV variable --> process.env.NEXT_PUBLIC_DISABLE_REGISTRATION in signUp.tsx, should be !ALLOW_REGISTRATION

Apart from that, great work... ;)

Enable https on node.js frontend

Hi,
I love the project the team has started. I would love to see if possible if you can include docker environment variable to allow use of:

  • https
  • reference to location of key and cert files

This will allow application to run on https://somedomainname or https://someIPaddress instead of using a reverse proxy in front of application.

I tried to look for node.js file for frontend but was not able to locate it. I believe https can be activated in that file and possibly variables added that can point to cert and key files as an environment variable that can be passed by docker environment variables.

Appreciate your feedback.

Great work.

Thank you,

Customer System

Forgive the incorrect location for this. I saw your contributing section, but I don't have enough time at the moment to work on this, but I have thought about creating something similar for a few years without much success getting started.

I think a key element for a system like this is to offer the ability to create a "my account" section for those that are downloading uploads. The use case is most folks (in my estimation, at least my own mileage) use systems like this to transfer files to customers (think creative content creators). I have a buddy who works for Viacom (BET, MTV, Comedy Central, etc.) as an imaging director for their TV/Radio commercials. He uses WeTransfer (paid version) so he can get information from the download(er) such as IP address, time/date of download, etc. to verify the product was collected. Further, he uses it when other customers (smaller promoters) attempt to say they didn't get a download and dispute the CC charge.

Having a system that allows for a list of files that have been assigned to a user account so they can log in and see their past "content" would be an amazing feature, potentially even a paid feature.

I don't know if this is possible with the structure you are creating or if even is an acceptable 'request'. Would love to help with the project in the future (as time and my wife permits).

Cheers!

๐Ÿš€ Feature: File previews for videos, images, PDFs

๐Ÿ”– Feature description

If the file(s) being shared are videos (e.g. mp4), allow the user to stream/preview the file. WeTransfer does this seamlessly for example.

๐ŸŽค Pitch

Perhaps there are multiple files shared and you only need one specific video. Without downloading them all, you can quickly preview/scrub/find the one you want before downloading. Or perhaps you simply want to do a remote playback without downloading anything, like streaming a video on Youtube.

Feature Request : Usernames instead of e-mails

Hello,

Splitting my requests as asked in my initial one

I'd like to be able for my users to only use usernames to create accounts/login, I don't really need to know their emails

Thanks !

Unable to run setup script

In short: The setup script doesn't work on my setup.

Detail: So I followed the instructions and got my appwrite running on a reverse proxy (maybe that's the issue, if I need to connect to it via a local network, let me know) so for the hostname field I'm giving my public A record, but running into some 404 errors when running the pingvin-share setup script.

Here's the console output with UN/PW redacted:

anthony@DESKTOP-H8EKECL:~/pingvin$ docker-compose exec pingvin-share node scripts/setup.js

Welcome to the Pingvin Share Appwrite setup ๐Ÿ‘‹
Please follow the questions and be sure that you ENTER THE CORRECT informations. Because the error handling isn't good.

Appwrite host (http://localhost/v1): https://appwrite.thenextweb.co.za
Authenticate...
Please enter your Appwrite credentials
Email: <Email>
Password: <Password>
Error: Request failed with status code 404
    at createError (/opt/app/scripts/setup.js:1581:15)
    at settle (/opt/app/scripts/setup.js:1861:12)
    at IncomingMessage.handleStreamEnd (/opt/app/scripts/setup.js:777:11)
    at IncomingMessage.emit (node:events:539:35)
    at endReadableNT (node:internal/streams/readable:1345:12)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: [Function: httpAdapter],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    validateStatus: [Function: validateStatus],
    headers: {
      Accept: 'application/json, text/plain, */*',
      'Content-Type': 'application/json',
      cookie: 'a_session_console=undefined',
      'User-Agent': 'axios/0.26.1',
      'Content-Length': 66
    },
    baseURL: 'https://appwrite.thenextweb.co.za',
    method: 'post',
    url: '/account/sessions',
    data: '{"email":"<email>","password":"<password>"}'
  },
  request: <ref *1> ClientRequest {
    _events: [Object: null prototype] {
      abort: [Function (anonymous)],
      aborted: [Function (anonymous)],
      connect: [Function (anonymous)],
      error: [Function (anonymous)],
      socket: [Function (anonymous)],
      timeout: [Function (anonymous)],
      prefinish: [Function: requestOnPrefinish]
    },
    _eventsCount: 7,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    destroyed: false,
    _last: true,
    chunkedEncoding: false,
    shouldKeepAlive: false,
    maxRequestsOnConnectionReached: false,
    _defaultKeepAlive: true,
    useChunkedEncodingByDefault: true,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    _contentLength: null,
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    _closed: false,
    socket: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'appwrite.thenextweb.co.za',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 10,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'appwrite.thenextweb.co.za',
      _readableState: [ReadableState],
      _maxListeners: undefined,
      _writableState: [WritableState],
      allowHalfOpen: false,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      parser: null,
      _httpMessage: [Circular *1],
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: true,
      [Symbol(pendingSession)]: null,
      [Symbol(async_id_symbol)]: 9,
      [Symbol(kHandle)]: [TLSWrap],
      [Symbol(lastWriteQueueSize)]: 0,
      [Symbol(timeout)]: null,
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(kCapture)]: false,
      [Symbol(kSetNoDelay)]: false,
      [Symbol(kSetKeepAlive)]: true,
      [Symbol(kSetKeepAliveInitialDelay)]: 60,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(connect-options)]: [Object],
      [Symbol(RequestTimeout)]: undefined
    },
    _header: 'POST /account/sessions HTTP/1.1\r\n' +
      'Accept: application/json, text/plain, */*\r\n' +
      'Content-Type: application/json\r\n' +
      'cookie: a_session_console=undefined\r\n' +
      'User-Agent: axios/0.26.1\r\n' +
      'Content-Length: 66\r\n' +
      'Host: appwrite.thenextweb.co.za\r\n' +
      'Connection: close\r\n' +
      '\r\n',
    _keepAliveTimeout: 0,
    _onPendingData: [Function: nop],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object: null prototype],
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype],
      freeSockets: [Object: null prototype] {},
      keepAliveMsecs: 1000,
      keepAlive: false,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      [Symbol(kCapture)]: false
    },
    socketPath: undefined,
    method: 'POST',
    maxHeaderSize: undefined,
    insecureHTTPParser: undefined,
    path: '/account/sessions',
    _ended: true,
    res: IncomingMessage {
      _readableState: [ReadableState],
      _events: [Object: null prototype],
      _eventsCount: 4,
      _maxListeners: undefined,
      socket: [TLSSocket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 404,
      statusMessage: 'Not Found',
      client: [TLSSocket],
      _consuming: true,
      _dumped: false,
      req: [Circular *1],
      responseUrl: 'https://appwrite.thenextweb.co.za/account/sessions',
      redirects: [],
      [Symbol(kCapture)]: false,
      [Symbol(kHeaders)]: [Object],
      [Symbol(kHeadersCount)]: 18,
      [Symbol(kTrailers)]: null,
      [Symbol(kTrailersCount)]: 0,
      [Symbol(RequestTimeout)]: undefined
    },
    aborted: false,
    timeoutCb: null,
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: false,
    host: 'appwrite.thenextweb.co.za',
    protocol: 'https:',
    _redirectable: Writable {
      _writableState: [WritableState],
      _events: [Object: null prototype],
      _eventsCount: 3,
      _maxListeners: undefined,
      _options: [Object],
      _ended: true,
      _ending: true,
      _redirectCount: 0,
      _redirects: [],
      _requestBodyLength: 66,
      _requestBodyBuffers: [],
      _onNativeResponse: [Function (anonymous)],
      _currentRequest: [Circular *1],
      _currentUrl: 'https://appwrite.thenextweb.co.za/account/sessions',
      [Symbol(kCapture)]: false
    },
    [Symbol(kCapture)]: false,
    [Symbol(kNeedDrain)]: false,
    [Symbol(corked)]: 0,
    [Symbol(kOutHeaders)]: [Object: null prototype] {
      accept: [Array],
      'content-type': [Array],
      cookie: [Array],
      'user-agent': [Array],
      'content-length': [Array],
      host: [Array]
    }
  },
  response: {
    status: 404,
    statusText: 'Not Found',
    headers: {
      server: 'nginx/1.23.1',
      date: 'Sat, 23 Jul 2022 02:12:21 GMT',
      'content-type': 'application/json; charset=UTF-8',
      'transfer-encoding': 'chunked',
      connection: 'close',
      'cache-control': 'no-cache, no-store, must-revalidate',
      expires: '0',
      pragma: 'no-cache',
      'x-debug-speed': '0.00039100646972656'
    },
    config: {
      transitional: [Object],
      adapter: [Function: httpAdapter],
      transformRequest: [Array],
      transformResponse: [Array],
      timeout: 0,
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      maxContentLength: -1,
      maxBodyLength: -1,
      validateStatus: [Function: validateStatus],
      headers: [Object],
      baseURL: 'https://appwrite.thenextweb.co.za',
      method: 'post',
      url: '/account/sessions',
      data: '{"email":"<email>","password":"<password>"}'
    },
    request: <ref *1> ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: true,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      _contentLength: null,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'POST /account/sessions HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'Content-Type: application/json\r\n' +
        'cookie: a_session_console=undefined\r\n' +
        'User-Agent: axios/0.26.1\r\n' +
        'Content-Length: 66\r\n' +
        'Host: appwrite.thenextweb.co.za\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'POST',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      path: '/account/sessions',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'appwrite.thenextweb.co.za',
      protocol: 'https:',
      _redirectable: [Writable],
      [Symbol(kCapture)]: false,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype]
    },
    data: {
      message: 'Not Found',
      code: 404,
      type: 'general_route_not_found',
      version: '0.15.2'
    }
  },
  isAxiosError: true,
  toJSON: [Function: toJSON]
}


 โŒ Error: Request failed with status code 404

Sorry, an error occured while the setup. The full logs can be found above.

Reduce docker image size

Currently the docker image is around 500mb. This should be reduced with better multi stage building.

The link does not open through some email clients

๐Ÿ‘Ÿ Reproduction steps

When I click on the link through the windows mail application, it sends me to an invalid link because the mail client considers the dot at the end of the link. However when I open the same email on the Gmail site directly it works.

Hey!
[USERNAME] shared some files with you. View or dowload the files with this link: https://exemple.com/share/UtNxQ6M.
Shared securely with Pingvin Share ๐Ÿง

I suggest just removing the dot at the end of the link, this will fix the issue on all affected email clients.

๐Ÿ‘ Expected behavior

The link should work on all email clients

๐Ÿ‘Ž Actual Behavior

This does not work on all clients because of the dot

๐ŸŒ Browser

Mail App Windows

Visiting Webseite with HTTP and not HTTPS

I write on the Environment of my docker container a https://URL but if you visit the website only on http the links are all http and not catching from the APP_URL= environment, a better checking for that can be cool.
after making a Force on HTTPS all is working.

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.