* New translations en-us.ts (French)
* New translations en-us.ts (Hungarian)
* New translations en-us.ts (Japanese)
* New translations en-us.ts (Japanese)
* feat(reverse-share): optional simplified interface for reverse sharing. issue #155.
* chore: Remove useless form validation.
* feat: Share Ready modal adds a prompt that an email has been sent to the reverse share creator.
* fix: Simplified reverse shared interface elements lack spacing when not logged in.
* fix: Share Ready modal prompt contrast is too low in dark mode.
* feat: add public access options to reverse share.
* feat: remember reverse share simplified and publicAccess options in cookies.
* style: npm run format.
* chore(i18n): Improve translation.
Co-authored-by: Elias Schneider <login@eliasschneider.com>
Update frontend/src/i18n/translations/en-US.ts
Co-authored-by: Elias Schneider <login@eliasschneider.com>
Update frontend/src/i18n/translations/en-US.ts
Co-authored-by: Elias Schneider <login@eliasschneider.com>
chore(i18n): Improve translation.
* chore: Improved variable naming.
* chore(i18n): Improve translation. x2.
* fix(backend/shares): Misjudged the permission of the share of the reverse share.
* compose version tag is not a necessity
* adjust default nextjs port
* Update docker-compose.yml
---------
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* 🚀 Feature: Allow to hide username / password login form when OAuth is enabled
* Hide “Sign in” password form
* Disable routes related to password authentication
* Change styling of OAuth provider buttons
* Open OAuth page in same tab
* Fix consistent usage of informal language in de-DE locale
Fixes#489
Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
* fix: order of new config variables
---------
Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* feat(backend): Make session duration configurable
Fixes#507
Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
* Apply suggestions from code review
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* Move new config option to “General” category
Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
---------
Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* 🐛 Bug Report: Provider username is ignored when signing up using OAuth
Fixes#505
Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
* Implement fallback logic for username conflicts
* Reprioritize claims for OIDC provider username
Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
---------
Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
* Worked on issue #500 Feature Add email recipients more efficiently
* Worked on issue #500 Feature Add email recipients more efficiently both features added
* Removed log
* refactor: run formatter
---------
Co-authored-by: Rahul Mishra <rahul07@Rahuls-Laptop.local>
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* feat(admin): add auto open share modal config for global.
* feat(upload): Apply the flag that disables the automatic open create share modal.
* fix: remove migration and add new config variable to seed script
* chore(translations): improve auto open share modal description
* refactor: run formatter
---------
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* New translations en-us.ts (Swedish)
* New translations en-us.ts (Russian)
* New translations en-us.ts (Spanish)
* New translations en-us.ts (Polish)
* New translations en-us.ts (French)
* New translations en-us.ts (French)
* New translations en-us.ts (Spanish)
* New translations en-us.ts (Japanese)
* New translations en-us.ts (Japanese)
* New translations en-us.ts (Swedish)
* New translations en-us.ts (Swedish)
* New translations en-us.ts (Swedish)
* New translations en-us.ts (Swedish)
* New translations en-us.ts (Russian)
* New translations en-us.ts (Russian)
* feat(auth): add OAuth2 login with GitHub and Google
* chore(translations): add files for Japanese
* fix(auth): fix link function for GitHub
* feat(oauth): basic oidc implementation
* feat(oauth): oauth guard
* fix: disable image optimizations for logo to prevent caching issues with custom logos
* fix: memory leak while downloading large files
* chore(translations): update translations via Crowdin (#278)
* New translations en-us.ts (Japanese)
* New translations en-us.ts (Japanese)
* New translations en-us.ts (Japanese)
* release: 0.18.2
* doc(translations): Add Japanese README (#279)
* Added Japanese README.
* Added JAPANESE README link to README.md.
* Updated Japanese README.
* Updated Environment Variable Table.
* updated zh-cn README.
* feat(oauth): unlink account
* refactor(oauth): make providers extensible
* fix(oauth): fix discoveryUri error when toggle google-enabled
* feat(oauth): add microsoft and discord as oauth provider
* docs(oauth): update README.md
* docs(oauth): update oauth2-guide.md
* set password to null for new oauth users
* New translations en-us.ts (Japanese) (#281)
* chore(translations): add Polish files
* fix(oauth): fix random username and password
* feat(oauth): add totp
* fix(oauth): fix totp throttle
* fix(oauth): fix qrcode and remove comment
* feat(oauth): add error page
* fix(oauth): i18n of error page
* feat(auth): add OAuth2 login
* fix(auth): fix link function for GitHub
* feat(oauth): basic oidc implementation
* feat(oauth): oauth guard
* feat(oauth): unlink account
* refactor(oauth): make providers extensible
* fix(oauth): fix discoveryUri error when toggle google-enabled
* feat(oauth): add microsoft and discord as oauth provider
* docs(oauth): update README.md
* docs(oauth): update oauth2-guide.md
* set password to null for new oauth users
* fix(oauth): fix random username and password
* feat(oauth): add totp
* fix(oauth): fix totp throttle
* fix(oauth): fix qrcode and remove comment
* feat(oauth): add error page
* fix(oauth): i18n of error page
* refactor: return null instead of `false` in `getIdOfCurrentUser` functiom
* feat: show original oauth error if available
* refactor: run formatter
* refactor(oauth): error message i18n
* refactor(oauth): make OAuth token available
someone may use it (to revoke token or get other info etc.)
also improved the i18n message
* chore(oauth): remove unused import
* chore: add database migration
* fix: missing python installation for nanoid
---------
Co-authored-by: Elias Schneider <login@eliasschneider.com>
Co-authored-by: ふうせん <10260662+fusengum@users.noreply.github.com>
* New translations en-us.ts (Polish)
* New translations en-us.ts (German)
* New translations en-us.ts (Polish)
* New translations en-us.ts (Polish)
* New translations en-us.ts (Polish)
* New translations en-us.ts (Polish)
* New translations en-us.ts (Polish)
* New translations en-us.ts (Polish)
* Added Japanese README.
* Added JAPANESE README link to README.md.
* Updated Japanese README.
* Updated Environment Variable Table.
* updated zh-cn README.
* Run docker container as non root user
* Pass UID and GID as a variable + alpine-based image
* change apt-get to apk
* chore: remove unnecessary packages from Dockerfile
* chore: remove unnecessary `chown`
---------
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* New translations en.ts (German)
* New translations en.ts (French)
* New translations en.ts (French)
* New translations en.ts (German)
* New translations zh-CN.ts (Chinese Simplified) (#202)
* finish Simplified Chinese trans in zh-CN.ts
* fix type error at line:270
---------
Co-authored-by: YunChao <yunchaozk@outlook.com>
* Started adding locale translations :)
* Added some more translations
* Working on translating even more pages
* More translations
* Added test default locale retrieval
* replace `intl.formatMessage` with custom `t` hook
* add more translations
* improve title syntax
* add more translations
* translate admin config page
* translated error messages
* add language selecter
* minor fixes
* improve language handling
* add upcoming languages
* add `crowdin.yml`
* run formatter
---------
Co-authored-by: Steve Tautonico <stautonico@gmail.com>
* Add clickable link to reverse share's shares
* Ran format
* Adding copy icon to the reverse share list
* Remove console.log
* Ran format
* Ran format in backend
* fix: copy to clipboard spelling
* Open the share in another window
* feat: Adding reverse shares' shares a clickable link (#178)
* Add clickable link to reverse share's shares
* Ran format
* fix: set link default value to random (#181)
* fix: set link default value to random
* fix: add auto EOL and add conventional-changelog package
* Apply suggestions from code review
---------
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* feat: Adding reverse share ability to copy the link (#179)
---------
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* fix: set link default value to random
* fix: add auto EOL and add conventional-changelog package
* feat: Adding reverse shares' shares a clickable link (#178)
* Add clickable link to reverse share's shares
* Ran format
* Apply suggestions from code review
* fix: set link default value to random (#181)
* fix: set link default value to random
* fix: add auto EOL and add conventional-changelog package
* Apply suggestions from code review
---------
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* feat: Adding reverse share ability to copy the link (#179)
---------
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* Adding an information button to the shares and corrected MyShare interface
* Adding other informations and disk usage
* Adding description, disk usage
* Add case if the expiration is never
* Adding file size and better UI
* UI changes to Information Modal
* Adding description to the My Shares page
* Ran format
* Remove string type
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* Remove string type check
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* Remove string type conversion
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* Variable name changes
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* Remove color
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* Requested changes made
* Ran format
* Adding MediaQuery
---------
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* More email share vars + unfinished placeolders config
{desc} {expires} vars
(unfinished) config placeholder vals
* done
* migrate
* edit seed
* removed comments
* refactor: replace dependecy `luxon` with `moment`
* update shareRecipientsMessage message
* chore: remove `luxon`
* fix: grammatically incorrect `shareRecipientsMessage` message
* changed to defaultValue and value instead
* fix: don't expose defaultValue to non admin user
* fix: update default value if default value changes
* refactor: set config value to null instead of a empty string
* refactor: merge two migrations into one
* fix value check empty
---------
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* Update docker-compose.yml
Adds a depends_on clause that waits for clamav to be fulyl started before starting pingvin-share.
* Update README.md
Explains that it may take a minute or two for the app to start while it waits for clamav.
* minor refactoring
Co-authored-by: Elias Schneider <login@eliasschneider.com>
* Working on some initial prototype stuff for TOTP
* Fixed a bug that prevented the change password menu from working
* Enable/disable totp working
* Added the new login procedure including TOTP! :)
* misc: Changed bad description for the TOTP_SECRET env var
* I forgot to include the migration for the new prisma stuff
* fix: refresh user context instead refreshing the page
* refactor: simplify totp error handling
* Removed U2F tab + format schema
* fix: tokens not saved in cookies
* refactor: deleted commented out code
* refactor: move password text to input description
* refactor: remove tabler icon package
Co-authored-by: Elias Schneider <login@eliasschneider.com>
Co-authored-by: Elias Schneider <58886915+stonith404@users.noreply.github.com>
<script>!function(){functiont(t){document.documentElement.setAttribute("data-theme",t)}vare=function(){try{returnnewURLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{returnwindow.localStorage.getItem("theme")}catch(t){}}();null!==e?t(e):window.matchMedia("(prefers-color-scheme: dark)").matches?t("dark"):(window.matchMedia("(prefers-color-scheme: light)").matches,t("light"))}(),function(){try{constc=newURLSearchParams(window.location.search).entries();for(var[t,e]ofc)if(t.startsWith("docusaurus-data-")){vara=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><divid="__docusaurus"><divrole="region"aria-label="Skip to main content"><aclass="skipToContent_fXgn"href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><navaria-label="Main"class="navbar navbar--fixed-top"><divclass="navbar__inner"><divclass="navbar__items"><buttonaria-label="Toggle navigation bar"aria-expanded="false"class="navbar__toggle clean-btn"type="button"><svgwidth="30"height="30"viewBox="0 0 30 30"aria-hidden="true"><pathstroke="currentColor"stroke-linecap="round"stroke-miterlimit="10"stroke-width="2"d="M4 7h22M4 15h22M4 23h22"></path></svg></button><aclass="navbar__brand"href="/pingvin-share/"><divclass="navbar__logo"><imgsrc="/pingvin-share/img/pingvinshare.svg"alt="Pingvin Share Logo"class="themedComponent_mlkZ themedComponent--light_NVdE"><imgsrc="/pingvin-share/img/pingvinshare.svg"alt="Pingvin Share Logo"class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><bclass="navbar__title text--truncate">Pingvin Share</b></a></div><divclass="navbar__items navbar__items--right"><ahref="https://github.com/stonith404/pingvin-share"target="_blank"rel="noopener noreferrer"class="navbar__item navbar__link">GitHub<svgwidth="13.5"height="13.5"aria-hidden="true"viewBox="0 0 24 24"class="iconExternalLink_nPIU"><pathfill="currentColor"d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><divclass="toggle_vylO colorModeToggle_DEke"><buttonclass="clean-btn toggleButton_gllP toggleButtonDisabled_aARS"type="button"disabled=""title="Switch between dark and light mode (currently light mode)"aria-label="Switch between dark and light mode (currently light mode)"aria-live="polite"><svgviewBox="0 0 24 24"width="24"height="24"class="lightToggleIcon_pyhR"><pathfill="currentColor"d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svgviewBox="0 0 24 24"width="24"height="24"class="darkToggleIcon_wfgR"><pathfill="currentColor"d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><divclass="navbarSearchContainer_Bca1"></div></div></div><divrole="presentation"class="navbar-sidebar__backdrop"></div></nav><divid="__docusaurus_skipToContent_fallback"class="main-wrapper mainWrapper_z2l0"><mainclass="container margin-vert--xl"><divclass="row"><divclass="col col--6 col--offset-3"><h1class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div></div>
* my shares doesn't make an api request ([247ce92](https://github.com/stonith404/pingvin-share/commit/247ce92744b64beff2b7bb19c9ae3a3d1e724159))
* refresh token on visit after 15 minutes ([d153f20](https://github.com/stonith404/pingvin-share/commit/d153f202e6ea07982a098692817d377801f5adf3))
* remove build target linux/arm/v7 as prisma doesn't support it ([c16cbb3](https://github.com/stonith404/pingvin-share/commit/c16cbb3f42745bff3910433e68416b9f84faaff1))
* remove filetype from file list ([68ce8af](https://github.com/stonith404/pingvin-share/commit/68ce8af197598f7c4a729bab8081904f01002b6b))
* put db and uploads in same folder ([80cdcda](https://github.com/stonith404/pingvin-share/commit/80cdcda93c385a8f5c1e22c7b84740f5d8119ef1))
* remove appwrite and add nextjs backend ([4bab33a](https://github.com/stonith404/pingvin-share/commit/4bab33ad8a79302fd94c6d92a3ddf87cdff8b214))
* remove postgres & use a single docker container ([388ac39](https://github.com/stonith404/pingvin-share/commit/388ac395ba85aae8a91ddfb5f5637a80a3e6f16b))
* replace tooltip with toast ([a33b5b3](https://github.com/stonith404/pingvin-share/commit/a33b5b37d92071e643a0bf78a9d6ecf29bebc65a))
* use system color theme ([d902aae](https://github.com/stonith404/pingvin-share/commit/d902aae03ff33d39c733cf1bce88ae58ff4cd888))
We would ❤️ for you to contribute to Pingvin Share and help make it better! All contributions are welcome, including issues, suggestions, pull requests and more.
## Getting started
You've found a bug, have suggestion or something else, just create an issue on GitHub and we can get in touch 😊.
## Submit a Pull Request
Once you created a issue and you want to create a pull request, follow this guide.
Branch naming convention is as following
`TYPE-ISSUE_ID-DESCRIPTION`
example:
```
feat-69-ability-to-set-share-expiration-to-never
```
When `TYPE` can be:
- **feat** - is a new feature
- **doc** - documentation only changes
- **fix** - a bug fix
- **refactor** - code change that neither fixes a bug nor adds a feature
**All PRs must include a commit message with the changes description!**
Fortheinitialstart, fork the project andusethe `gitclone`commandtodownloadtherepositorytoyourcomputer. A standard procedure for working on an issue would be to:
1.`git pull`, before creating a new branch, pull the changes from upstream. Your master needs to be up to date.
```
$ git pull
```
2. Create new branch from `main` like: `feat-69-ability-to-set-share-expiration-to-never`<br/>
```
$ git checkout -b [name_of_your_new_branch]
```
3. Work - commit - repeat
4. Before you push your changes, make sure you run the linter and format the code.
```bash
npm run lint
npm run format
```
5. Push changes to GitHub
```
$ git push origin [name_of_your_new_branch]
```
6. Submit your changes for review
If you go to your repository on GitHub, you'll see a `Compare & pull request` button. Click on that button.
7. Start a Pull Request
Now submit the pull request and click on `Create pull request`.
8. Get a code review approval/reject
## Setup project
Pingvin Share consists of a frontend and a backend.
### Backend
The backend is built with [Nest.js](https://nestjs.com) and uses Typescript.
#### Setup
1. Open the `backend` folder
2. Duplicate the `.env.example` file, rename the duplicate to `.env` and change the environment variables if needed
3. Install the dependencies with `npm install`
4. Push the database schema to the database by running `npx prisma db push`
5. Start the backend with `npm run dev`
### Frontend
The frontend is built with [Next.js](https://nextjs.org) and uses Typescript.
#### Setup
1. Start the backend first
2. Open the `frontend` folder
3. Duplicate the `.env.example` file, rename the duplicate to `.env` and change the environment variables if needed
4. Install the dependencies with `npm install`
5. Start the frontend with `npm run dev`
You're all set!
### Testing
At the moment we only have system tests for the backend. To run these tests, run `npm run test:system` in the backend folder.
- Create a share with files that you can access with a link
- No file size limit, only your disk will be your limit
- Set a share expiration
- Optionally secure your share with a visitor limit and a password
- Light & dark mode
## ⌨️ Setup
> Pleas note that Pingvin Share is in early stage and could include some bugs
1. Download the `docker-compose.yml` and `.env.example` file.
2. Rename the `.env.example` file to `.env` and change the environment variables so that they fit to your environment. If you need help with the environment variables take a look [here](#environment-variables)
3. Run `docker-compose up -d`
The website is now listening available on `http://localhost:3000`, have fun with Pingvin Share 🐧!
"use strict";(self.webpackChunkpingvindocs=self.webpackChunkpingvindocs||[]).push([[237],{3363:(e,t,n)=>{n.d(t,{A:()=>a});n(6540);vari=n(4164),o=n(1312),s=n(1107),r=n(4848);functiona(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.A)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},2237:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(6540);vari=n(1312),o=n(1003),s=n(781),r=n(3363),a=n(4848);functiond(){conste=(0,i.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.be,{title:e}),(0,a.jsx)(s.A,{children:(0,a.jsx)(r.A,{})})]})}}}]);
"use strict";(self.webpackChunkpingvindocs=self.webpackChunkpingvindocs||[]).push([[361],{2744:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>a,metadata:()=>o,toc:()=>c});varr=t(4848),i=t(8453);consta={id:"upgrading"},s="Upgrading",o={id:"setup/upgrading",title:"Upgrading",description:"Upgrade to a new version",source:"@site/docs/setup/upgrading.md",sourceDirName:"setup",slug:"/setup/upgrading",permalink:"/pingvin-share/setup/upgrading",draft:!1,unlisted:!1,editUrl:"https://github.com/stonith404/pingvin-share/edit/main/docs/docs/setup/upgrading.md",tags:[],version:"current",frontMatter:{id:"upgrading"},sidebar:"docsSidebar",previous:{title:"S3",permalink:"/pingvin-share/setup/s3"},next:{title:"Translating",permalink:"/pingvin-share/help-out/translate"}},d={},c=[{value:"Upgrade to a new version",id:"upgrade-to-a-new-version",level:3},{value:"Docker",id:"docker",level:4},{value:"Portainer",id:"portainer",level:3},{value:"Stand-alone",id:"stand-alone",level:4}];functionl(e){constn={a:"a",code:"code",h1:"h1",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"upgrading",children:"Upgrading"})}),"\n",(0,r.jsx)(n.h3,{id:"upgrade-to-a-new-version",children:"Upgrade to a new version"}),"\n",(0,r.jsx)(n.p,{children:"As Pingvin Share is in early stage, see the release notes for breaking changes before upgrading."}),"\n",(0,r.jsx)(n.h4,{id:"docker",children:"Docker"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"docker compose pull\ndocker compose up -d\n"})}),"\n",(0,r.jsx)(n.h3,{id:"portainer",children:"Portainer"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"In your container page, click on Recreate."}),"\n",(0,r.jsx)(n.li,{children:"Check the Re-Pull image toggle."}),"\n",(0,r.jsx)(n.li,{children:"Click on Recreate."}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"stand-alone",children:"Stand-alone"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Stop the running app"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"pm2 stop pingvin-share-backend pingvin-share-frontend\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Repeat the steps from the ",(0,r.jsx)(n.a,{href:"#stand-alone-installation",children:"installation guide"})," except the ",(0,r.jsx)(n.code,{children:"git clone"})," step."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"cd pingvin-share\n\n# Checkout the latest version\ngit fetch --tags && git checkout $(git describe --tags `git rev-list --tags --max-count=1`)\n\n# Start the backend\ncd backend\nnpm install\nnpm run build\npm2 restart pingvin-share-backend\n\n# Start the frontend\ncd ../frontend\nnpm install\nnpm run build\npm2 restart pingvin-share-frontend\n"})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Note that environemnt variables are not picked up when using pm2 restart, if you actually want to change configs, you need to run ",(0,r.jsx)(n.code,{children:"pm2 --update-env restart"})]})]})}functionp(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};returnn?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>o});varr=t(6540);consti={},a=r.createContext(i);functions(e){constn=r.useContext(a);returnr.useMemo((function(){return"function"==typeofe?e(n):{...n,...e}}),[n,e])}functiono(e){letn;returnn=e.disableParentContext?"function"==typeofe.components?e.components(i):e.components||i:s(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]);
"use strict";(self.webpackChunkpingvindocs=self.webpackChunkpingvindocs||[]).push([[863],{4702:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>c});vari=t(4848),s=t(8453);consta={},r="Translating",o={id:"help-out/translate",title:"Translating",description:"You can help to translate Pingvin Share into your language.",source:"@site/docs/help-out/translate.md",sourceDirName:"help-out",slug:"/help-out/translate",permalink:"/pingvin-share/help-out/translate",draft:!1,unlisted:!1,editUrl:"https://github.com/stonith404/pingvin-share/edit/main/docs/docs/help-out/translate.md",tags:[],version:"current",frontMatter:{},sidebar:"docsSidebar",previous:{title:"Upgrading",permalink:"/pingvin-share/setup/upgrading"},next:{title:"Contributing",permalink:"/pingvin-share/help-out/contribute"}},l={},c=[];functionu(e){constn={a:"a",h1:"h1",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"translating",children:"Translating"})}),"\n",(0,i.jsxs)(n.p,{children:["You can help to translate Pingvin Share into your language.\nOn ",(0,i.jsx)(n.a,{href:"https://crowdin.com/project/pingvin-share",children:"Crowdin"})," you can easily translate Pingvin Share online."]}),"\n",(0,i.jsxs)(n.p,{children:["Is your language not on Crowdin? Feel free to ",(0,i.jsx)(n.a,{href:"https://github.com/stonith404/pingvin-share/issues/new?assignees=&labels=language-request&projects=&template=language-request.yml&title=%F0%9F%8C%90+Language+request%3A+%3Clanguage+name+in+english%3E",children:"Request it"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Any issues while translating? Feel free to participate in the ",(0,i.jsx)(n.a,{href:"https://github.com/stonith404/pingvin-share/discussions/198",children:"Localization discussion"}),"."]})]})}functionh(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};returnn?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>o});vari=t(6540);consts={},a=i.createContext(s);functionr(e){constn=i.useContext(a);returni.useMemo((function(){return"function"==typeofe?e(n):{...n,...e}}),[n,e])}functiono(e){letn;returnn=e.disableParentContext?"function"==typeofe.components?e.components(s):e.components||s:r(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]);
"use strict";(self.webpackChunkpingvindocs=self.webpackChunkpingvindocs||[]).push([[862],{4388:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"link","label":"Introduction","href":"/pingvin-share/introduction","docId":"introduction","unlisted":false},{"type":"category","label":"Getting Started","items":[{"type":"link","label":"Installation","href":"/pingvin-share/setup/installation","docId":"setup/installation","unlisted":false},{"type":"link","label":"Configuration","href":"/pingvin-share/setup/configuration","docId":"setup/configuration","unlisted":false},{"type":"link","label":"Integrations","href":"/pingvin-share/setup/integrations","docId":"setup/integrations","unlisted":false},{"type":"link","label":"OAuth 2 Login Guide","href":"/pingvin-share/setup/oauth2login","docId":"setup/oauth2login","unlisted":false},{"type":"link","label":"S3","href":"/pingvin-share/setup/s3","docId":"setup/s3","unlisted":false},{"type":"link","label":"Upgrading","href":"/pingvin-share/setup/upgrading","docId":"setup/upgrading","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Helping Out","items":[{"type":"link","label":"Translating","href":"/pingvin-share/help-out/translate","docId":"help-out/translate","unlisted":false},{"type":"link","label":"Contributing","href":"/pingvin-share/help-out/contribute","docId":"help-out/contribute","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Demo","href":"https://pingvin-share.dev.eliasschneider.com"},{"type":"link","label":"Discord","href":"https://discord.gg/HutpbfB59Q"}]},"docs":{"help-out/contribute":{"id":"help-out/contribute","title":"Contributing","description":"We would \u2764\ufe0f for you to contribute to Pingvin Share and help make it better! All contributions are welcome, including issues, suggestions, pull requests and more.","sidebar":"docsSidebar"},"help-out/translate":{"id":"help-out/translate","title":"Translating","description":"You can help to translate Pingvin Share into your language.","sidebar":"docsSidebar"},"introduction":{"id":"introduction","title":"Introduction","description":"Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer.","sidebar":"docsSidebar"},"setup/configuration":{"id":"setup/configuration","title":"Configuration","description":"General configuration","sidebar":"docsSidebar"},"setup/installation":{"id":"setup/installation","title":"Installation","description":"Installation with Docker (recommended)","sidebar":"docsSidebar"},"setup/integrations":{"id":"setup/integrations","title":"Integrations","description":"ClamAV","sidebar":"docsSidebar"},"setup/oauth2login":{"id":"setup/oauth2login","title":"OAuth 2 Login Guide","description":"Config Built-in OAuth 2 Providers","sidebar":"docsSidebar"},"setup/s3":{"id":"setup/s3","title":"S3","description":"You are able to add your preferred S3 provider, like AWS, DigitalOcean, Exoscale or Infomaniak. However, if you don\'t","sidebar":"docsSidebar"},"setup/upgrading":{"id":"setup/upgrading","title":"Upgrading","description":"Upgrade to a new version","sidebar":"docsSidebar"}}}}')}}]);
"use strict";(self.webpackChunkpingvindocs=self.webpackChunkpingvindocs||[]).push([[899],{9233:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>d});vart=i(4848),r=i(8453);consts={id:"introduction"},o="Introduction",a={id:"introduction",title:"Introduction",description:"Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer.",source:"@site/docs/introduction.md",sourceDirName:".",slug:"/introduction",permalink:"/pingvin-share/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/stonith404/pingvin-share/edit/main/docs/docs/introduction.md",tags:[],version:"current",frontMatter:{id:"introduction"},sidebar:"docsSidebar",next:{title:"Installation",permalink:"/pingvin-share/setup/installation"}},c={},d=[{value:"Features",id:"features",level:2},{value:"Get to know Pingvin Share",id:"get-to-know-pingvin-share",level:2}];functionl(n){conste={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.header,{children:(0,t.jsx)(e.h1,{id:"introduction",children:"Introduction"})}),"\n",(0,t.jsx)(e.p,{children:"Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer."}),"\n",(0,t.jsx)(e.h2,{id:"features",children:"Features"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Share files using a link"}),"\n",(0,t.jsx)(e.li,{children:"Unlimited file size (restricted only by disk space)"}),"\n",(0,t.jsx)(e.li,{children:"Set an expiration date for shares"}),"\n",(0,t.jsx)(e.li,{children:"Secure shares with visitor limits and passwords"}),"\n",(0,t.jsx)(e.li,{children:"Email recipients"}),"\n",(0,t.jsx)(e.li,{children:"Integration with ClamAV for security scans"}),"\n"]}),"\n",(0,t.jsx)(e.p,{children:"And more!"}),"\n",(0,t.jsx)(e.h2,{id:"get-to-know-pingvin-share",children:"Get to know Pingvin Share"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:(0,t.jsx)(e.a,{href:"https://pingvin-share.dev.eliasschneider.com",children:"Demo"})}),"\n",(0,t.jsx)(e.li,{children:(0,t.jsx)(e.a,{href:"https://www.youtube.com/watch?v=rWwNeZCOPJA",children:"Review by DB Tech"})}),"\n"]}),"\n",(0,t.jsx)("img",{src:"https://user-images.githubusercontent.com/58886915/225038319-b2ef742c-3a74-4eb6-9689-4207a36842a4.png",width:"700"})]})}functionh(n={}){const{wrapper:e}={...(0,r.R)(),...n.components};returne?(0,t.jsx)(e,{...n,children:(0,t.jsx)(l,{...n})}):l(n)}},8453:(n,e,i)=>{i.d(e,{R:()=>o,x:()=>a});vart=i(6540);constr={},s=t.createContext(r);functiono(n){conste=t.useContext(s);returnt.useMemo((function(){return"function"==typeofn?n(e):{...e,...n}}),[e,n])}functiona(n){lete;returne=n.disableParentContext?"function"==typeofn.components?n.components(r):n.components||r:o(n.components),t.createElement(s.Provider,{value:e},n.children)}}}]);
"use strict";(self.webpackChunkpingvindocs=self.webpackChunkpingvindocs||[]).push([[537],{7744:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>c});vari=t(4848),s=t(8453);consta={id:"integrations"},r="Integrations",o={id:"setup/integrations",title:"Integrations",description:"ClamAV",source:"@site/docs/setup/integrations.md",sourceDirName:"setup",slug:"/setup/integrations",permalink:"/pingvin-share/setup/integrations",draft:!1,unlisted:!1,editUrl:"https://github.com/stonith404/pingvin-share/edit/main/docs/docs/setup/integrations.md",tags:[],version:"current",frontMatter:{id:"integrations"},sidebar:"docsSidebar",previous:{title:"Configuration",permalink:"/pingvin-share/setup/configuration"},next:{title:"OAuth 2 Login Guide",permalink:"/pingvin-share/setup/oauth2login"}},l={},c=[{value:"ClamAV",id:"clamav",level:2},{value:"Docker",id:"docker",level:3},{value:"Stand-Alone",id:"stand-alone",level:3}];functiond(e){constn={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"integrations",children:"Integrations"})}),"\n",(0,i.jsx)(n.h2,{id:"clamav",children:"ClamAV"}),"\n",(0,i.jsx)(n.p,{children:"ClamAV is used to scan shares for malicious files and remove them if found."}),"\n",(0,i.jsxs)(n.p,{children:["Please note that ClamAV needs a lot of ",(0,i.jsx)(n.a,{href:"https://docs.clamav.net/manual/Installing/Docker.html#memory-ram-requirements",children:"ressources"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"docker",children:"Docker"}),"\n",(0,i.jsxs)(n.p,{children:["If you are already running ClamAV elsewhere, you can specify the ",(0,i.jsx)(n.code,{children:"CLAMAV_HOST"})," environment variable to point to that instance."]}),"\n",(0,i.jsx)(n.p,{children:"Else you have to add the ClamAV container to the Pingvin Share Docker Compose stack:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Add the ClamAV container to the Docker Compose stack and start the container."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",children:"services:\n pingvin-share:\n image: stonith404/pingvin-share\n ...\n+ depends_on:\n+ clamav:\n+ condition: service_healthy\n\n+ clamav:\n+ restart: unless-stopped\n+ image: clamav/clamav\n\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"2",children:["\n",(0,i.jsx)(n.li,{children:"Docker will wait for ClamAV to start before starting Pingvin Share. This may take a minute or two."}),"\n",(0,i.jsx)(n.li,{children:'The Pingvin Share logs should now log "ClamAV is active"'}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"stand-alone",children:"Stand-Alone"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Install ClamAV"}),"\n",(0,i.jsxs)(n.li,{children:["Specify the ",(0,i.jsx)(n.code,{children:"CLAMAV_HOST"})," environment variable for the backend and restart the Pingvin Share backend."]}),"\n"]})]})}functionh(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};returnn?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>o});vari=t(6540);consts={},a=i.createContext(s);functionr(e){constn=i.useContext(a);returni.useMemo((function(){return"function"==typeofe?e(n):{...n,...e}}),[n,e])}functiono(e){letn;returnn=e.disableParentContext?"function"==typeofe.components?e.components(s):e.components||s:r(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]);
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.