Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
edb511252f | ||
|
|
c3af0fe097 | ||
|
|
6419da07fb | ||
|
|
7cd9dff637 | ||
|
|
2a826f7941 | ||
|
|
8720232755 | ||
|
|
dc8cf3d5ca | ||
|
|
979b882150 | ||
|
|
c55019f71b |
17
.github/ISSUE_TEMPLATE/question.yml
vendored
Normal file
17
.github/ISSUE_TEMPLATE/question.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
name: ❓ Question
|
||||||
|
description: "Submit a question"
|
||||||
|
title: "❓ Question:"
|
||||||
|
labels: [question]
|
||||||
|
body:
|
||||||
|
- type: textarea
|
||||||
|
id: feature-description
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: "🙋♂️ Question"
|
||||||
|
description: "A clear question. Please provide as much detail as possible."
|
||||||
|
placeholder: "How do I ...?"
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Before submitting, please check if the question hasn't been asked before.
|
||||||
15
CHANGELOG.md
15
CHANGELOG.md
@@ -1,3 +1,18 @@
|
|||||||
|
### [0.10.2](https://github.com/stonith404/pingvin-share/compare/v0.10.1...v0.10.2) (2023-02-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* pdf preview tries to render on server ([c3af0fe](https://github.com/stonith404/pingvin-share/commit/c3af0fe097582f69b63ed1ad18fb71bff334d32a))
|
||||||
|
|
||||||
|
### [0.10.1](https://github.com/stonith404/pingvin-share/compare/v0.10.0...v0.10.1) (2023-02-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* non administrator user redirection error while setup isn't finished ([dc8cf3d](https://github.com/stonith404/pingvin-share/commit/dc8cf3d5ca6b4f8a8f243b8e0b05e09738cf8b61))
|
||||||
|
* setup wizard doesn't redirect after completion ([7cd9dff](https://github.com/stonith404/pingvin-share/commit/7cd9dff637900098c9f6e46ccade37283d47321b))
|
||||||
|
|
||||||
## [0.10.0](https://github.com/stonith404/pingvin-share/compare/v0.9.0...v0.10.0) (2023-02-10)
|
## [0.10.0](https://github.com/stonith404/pingvin-share/compare/v0.9.0...v0.10.0) (2023-02-10)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,62 +8,55 @@ You've found a bug, have suggestion or something else, just create an issue on G
|
|||||||
|
|
||||||
## Submit a Pull Request
|
## Submit a Pull Request
|
||||||
|
|
||||||
Once you created a issue and you want to create a pull request, follow this guide.
|
Before you submit the pull request for review please ensure that
|
||||||
|
|
||||||
Branch naming convention is as following
|
- The pull request naming follows the [Conventional Commits specification](https://www.conventionalcommits.org):
|
||||||
|
|
||||||
`TYPE-ISSUE_ID-DESCRIPTION`
|
`<type>[optional scope]: <description>`
|
||||||
|
|
||||||
example:
|
example:
|
||||||
|
|
||||||
|
```
|
||||||
|
feat(share): add password protection
|
||||||
|
```
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
- Your pull request has a detailed description
|
||||||
|
- You run `npm run format` to format the code
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Don't know how to create a pull request? Learn how to create a pull request</summary>
|
||||||
|
|
||||||
|
1. Create a fork of the repository by clicking on the `Fork` button in the Pingvin Share repository
|
||||||
|
|
||||||
|
2. Clone your fork to your machine with `git clone`
|
||||||
|
|
||||||
```
|
```
|
||||||
feat-69-ability-to-set-share-expiration-to-never
|
$ git clone https://github.com/[your_username]/pingvin-share
|
||||||
```
|
|
||||||
|
|
||||||
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!**
|
|
||||||
|
|
||||||
For the initial start, fork the project and use the `git clone` command to download the repository to your computer. 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
|
3. Work - commit - repeat
|
||||||
|
|
||||||
4. Before you push your changes, make sure you run the linter and format the code.
|
4. Push changes to GitHub
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run lint
|
|
||||||
npm run format
|
|
||||||
```
|
|
||||||
|
|
||||||
5. Push changes to GitHub
|
|
||||||
|
|
||||||
```
|
```
|
||||||
$ git push origin [name_of_your_new_branch]
|
$ git push origin [name_of_your_new_branch]
|
||||||
```
|
```
|
||||||
|
|
||||||
6. Submit your changes for review
|
5. 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.
|
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
|
6. Start a Pull Request
|
||||||
Now submit the pull request and click on `Create pull request`.
|
7. Now submit the pull request and click on `Create pull request`.
|
||||||
8. Get a code review approval/reject
|
8. Get a code review approval/reject
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
## Setup project
|
## Setup project
|
||||||
|
|
||||||
Pingvin Share consists of a frontend and a backend.
|
Pingvin Share consists of a frontend and a backend.
|
||||||
|
|||||||
63
README.md
63
README.md
@@ -4,12 +4,12 @@ Pingvin Share is self-hosted file sharing platform and an alternative for WeTran
|
|||||||
|
|
||||||
## ✨ Features
|
## ✨ Features
|
||||||
|
|
||||||
- Create a share with files that you can access with a link
|
- Share files using a link
|
||||||
- No file size limit, only your disk will be your limit
|
- Unlimited file size (restricted only by disk space)
|
||||||
- Set a share expiration
|
- Set an expiration date for shares
|
||||||
- Optionally secure your share with a visitor limit and a password
|
- Secure shares with visitor limits and passwords
|
||||||
- Email recepients
|
- Email recipients
|
||||||
- ClamAV integration
|
- Integration with ClamAV for security scans
|
||||||
|
|
||||||
## 🐧 Get to know Pingvin Share
|
## 🐧 Get to know Pingvin Share
|
||||||
|
|
||||||
@@ -20,20 +20,50 @@ Pingvin Share is self-hosted file sharing platform and an alternative for WeTran
|
|||||||
|
|
||||||
## ⌨️ Setup
|
## ⌨️ Setup
|
||||||
|
|
||||||
> Pleas note that Pingvin Share is in early stage and could include some bugs
|
> Note: Pingvin Share is in its early stages and may contain bugs.
|
||||||
|
|
||||||
### Recommended installation
|
### Installation with Docker (recommended)
|
||||||
|
|
||||||
1. Download the `docker-compose.yml` file
|
1. Download the `docker-compose.yml` file
|
||||||
2. Run `docker-compose up -d`
|
2. Run `docker-compose up -d`
|
||||||
|
|
||||||
The website is now listening available on `http://localhost:3000`, have fun with Pingvin Share 🐧!
|
The website is now listening available on `http://localhost:3000`, have fun with Pingvin Share 🐧!
|
||||||
|
|
||||||
|
### Stand-alone Installation
|
||||||
|
|
||||||
|
Required tools:
|
||||||
|
|
||||||
|
- [Node.js](https://nodejs.org/en/download/) >= 14
|
||||||
|
- [Git](https://git-scm.com/downloads)
|
||||||
|
- [pm2](https://pm2.keymetrics.io/) for running Pingvin Share in the background
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/stonith404/pingvin-share
|
||||||
|
cd pingvin-share
|
||||||
|
|
||||||
|
# Checkout the latest version
|
||||||
|
git fetch --tags && git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
|
||||||
|
|
||||||
|
# Start the backend
|
||||||
|
cd ../backend
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
pm2 start --name="pingvin-share-backend" npm -- run prod
|
||||||
|
|
||||||
|
# Start the frontend
|
||||||
|
cd frontend
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
pm2 start --name="pingvin-share-frontend" npm -- run start
|
||||||
|
```
|
||||||
|
|
||||||
|
The website is now listening available on `http://localhost:3000`, have fun with Pingvin Share 🐧!
|
||||||
|
|
||||||
### Integrations
|
### Integrations
|
||||||
|
|
||||||
#### ClamAV
|
#### ClamAV (Docker only)
|
||||||
|
|
||||||
With ClamAV the shares get scanned for malicious files and get removed if any found.
|
ClamAV is used to scan shares for malicious files and remove them if found.
|
||||||
|
|
||||||
1. Add the ClamAV container to the Docker Compose stack (see `docker-compose.yml`) and start the container.
|
1. Add the ClamAV container to the Docker Compose stack (see `docker-compose.yml`) and start the container.
|
||||||
2. Docker will wait for ClamAV to start before starting Pingvin Share. This may take a minute or two.
|
2. Docker will wait for ClamAV to start before starting Pingvin Share. This may take a minute or two.
|
||||||
@@ -47,7 +77,18 @@ Please note that ClamAV needs a lot of [ressources](https://docs.clamav.net/manu
|
|||||||
|
|
||||||
### Upgrade to a new version
|
### Upgrade to a new version
|
||||||
|
|
||||||
Run `docker compose pull && docker compose up -d` to update your docker container
|
As Pingvin Share is in early stage, see the release notes for breaking changes before upgrading.
|
||||||
|
|
||||||
|
#### Docker
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose pull
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Stand-alone
|
||||||
|
|
||||||
|
Repeat the steps from the [installation guide](#stand-alone-installation) except the `git clone` step.
|
||||||
|
|
||||||
## 🖤 Contribute
|
## 🖤 Contribute
|
||||||
|
|
||||||
|
|||||||
4
backend/package-lock.json
generated
4
backend/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "pingvin-share-backend",
|
"name": "pingvin-share-backend",
|
||||||
"version": "0.10.0",
|
"version": "0.10.2",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "pingvin-share-backend",
|
"name": "pingvin-share-backend",
|
||||||
"version": "0.10.0",
|
"version": "0.10.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nestjs/common": "^9.2.1",
|
"@nestjs/common": "^9.2.1",
|
||||||
"@nestjs/config": "^2.2.0",
|
"@nestjs/config": "^2.2.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "pingvin-share-backend",
|
"name": "pingvin-share-backend",
|
||||||
"version": "0.10.0",
|
"version": "0.10.2",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "nest build",
|
"build": "nest build",
|
||||||
"dev": "cross-env NODE_ENV=development nest start --watch",
|
"dev": "cross-env NODE_ENV=development nest start --watch",
|
||||||
|
|||||||
4
frontend/package-lock.json
generated
4
frontend/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "pingvin-share-frontend",
|
"name": "pingvin-share-frontend",
|
||||||
"version": "0.10.0",
|
"version": "0.10.2",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "pingvin-share-frontend",
|
"name": "pingvin-share-frontend",
|
||||||
"version": "0.10.0",
|
"version": "0.10.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.10.5",
|
"@emotion/react": "^11.10.5",
|
||||||
"@emotion/server": "^11.10.0",
|
"@emotion/server": "^11.10.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "pingvin-share-frontend",
|
"name": "pingvin-share-frontend",
|
||||||
"version": "0.10.0",
|
"version": "0.10.2",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ const AdminConfigTable = () => {
|
|||||||
.updateMany(updatedConfigVariables)
|
.updateMany(updatedConfigVariables)
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
await configService.finishSetup();
|
await configService.finishSetup();
|
||||||
router.replace("/upload");
|
router.reload();
|
||||||
})
|
})
|
||||||
.catch(toast.axiosError);
|
.catch(toast.axiosError);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -57,6 +57,10 @@ export async function middleware(request: NextRequest) {
|
|||||||
routes.disabled.routes.push("/auth/resetPassword*");
|
routes.disabled.routes.push("/auth/resetPassword*");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getConfig("SETUP_STATUS") == "FINISHED") {
|
||||||
|
routes.disabled.routes.push("/admin/setup");
|
||||||
|
}
|
||||||
|
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
const rules = [
|
const rules = [
|
||||||
// Disabled routes
|
// Disabled routes
|
||||||
@@ -70,8 +74,8 @@ export async function middleware(request: NextRequest) {
|
|||||||
path: "/auth/signUp",
|
path: "/auth/signUp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
condition: getConfig("SETUP_STATUS") == "REGISTERED" && !routes.setupStatusRegistered.contains(route),
|
condition: getConfig("SETUP_STATUS") == "REGISTERED" && !routes.setupStatusRegistered.contains(route) && user?.isAdmin,
|
||||||
path: user ? "/admin/setup" : "/auth/signIn",
|
path: "/admin/setup",
|
||||||
},
|
},
|
||||||
// Authenticated state
|
// Authenticated state
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,7 +40,9 @@ const FilePreview = ({
|
|||||||
if (isNotSupported) return <UnSupportedFile />;
|
if (isNotSupported) return <UnSupportedFile />;
|
||||||
|
|
||||||
if (mimeType == "application/pdf") {
|
if (mimeType == "application/pdf") {
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
window.location.href = `/api/shares/${shareId}/files/${fileId}?download=false`;
|
window.location.href = `/api/shares/${shareId}/files/${fileId}?download=false`;
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
} else if (mimeType.startsWith("video/")) {
|
} else if (mimeType.startsWith("video/")) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "pingvin-share",
|
"name": "pingvin-share",
|
||||||
"version": "0.10.0",
|
"version": "0.10.2",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"format": "cd frontend && npm run format && cd ../backend && npm run format",
|
"format": "cd frontend && npm run format && cd ../backend && npm run format",
|
||||||
"lint": "cd frontend && npm run lint && cd ../backend && npm run lint",
|
"lint": "cd frontend && npm run lint && cd ../backend && npm run lint",
|
||||||
|
|||||||
Reference in New Issue
Block a user