104 Commits

Author SHA1 Message Date
66494c6760 Fix tests
All checks were successful
Publish / lints (push) Successful in 25s
/ Misc Linters (push) Successful in 28s
/ Build App (push) Successful in 1m3s
Publish / tests (push) Successful in 50s
Publish / Publishing (push) Successful in 1m7s
2024-08-16 16:39:44 +02:00
05320916b2 0.0.4
Some checks failed
/ Misc Linters (push) Successful in 24s
/ Build App (push) Failing after 29s
Publish / lints (push) Successful in 22s
Publish / tests (push) Failing after 27s
Publish / Publishing (push) Has been skipped
2024-08-16 16:37:24 +02:00
e6857f5b5d 0.0.2 2024-08-16 16:36:51 +02:00
5dba5471d1 Reject illegal names 2024-08-16 16:34:43 +02:00
f1ff9f1c38 Update flake.lock 2024-08-16 16:34:26 +02:00
7386a29ec5 flake.lock: Update
Some checks failed
/ Misc Linters (push) Successful in 25s
/ Build App (push) Failing after 24s
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/693bc46d169f5af9c992095736e82c3488bf7dbb' (2024-07-14)
  → 'github:nixos/nixpkgs/c3aa7b8938b17aebd2deecf7be0636000d62a2b9' (2024-08-14)
2024-08-16 15:53:10 +02:00
88b158b7b4 Lint before publish
All checks were successful
/ Misc Linters (push) Successful in 27s
/ Build App (push) Successful in 59s
2024-08-16 15:10:18 +02:00
a2e78e2e36 Fallback for missing environment variable
All checks were successful
/ Misc Linters (push) Successful in 20s
/ Build App (push) Successful in 50s
Publish / tests (push) Successful in 51s
Publish / Publishing (push) Successful in 1m57s
2024-08-16 15:06:41 +02:00
b2bab79562 Run shellcheck and hadolint in CI
Some checks failed
/ Build App (push) Failing after 28s
/ Misc Linters (push) Successful in 35s
2024-08-16 14:45:13 +02:00
0b8bddb1f6 Run shellcheck in CI
Some checks failed
/ Check scripts (push) Failing after 22s
/ Build App (push) Failing after 41s
2024-08-16 14:41:51 +02:00
cbd03de6a3 Load upload dir from ENV 2024-08-16 14:41:33 +02:00
0842c107e6 Merge pull request 'chore(deps): update dependency vite to v5.4.1' (#47) from renovate/vite-5.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 1m15s
Reviewed-on: #47
2024-08-15 19:46:33 +02:00
a59f8688d0 chore(deps): update dependency vite to v5.4.1
All checks were successful
/ Build App (pull_request) Successful in 3m43s
2024-08-15 16:02:40 +00:00
91bba73796 Merge pull request 'chore(deps): lock file maintenance' (#46) from renovate/lock-file-maintenance into main
All checks were successful
/ Build App (push) Successful in 1m1s
Reviewed-on: #46
2024-08-13 14:57:39 +02:00
85e1874188 chore(deps): lock file maintenance
All checks were successful
/ Build App (pull_request) Successful in 1m0s
2024-08-13 14:56:31 +02:00
6ab6560009 Merge pull request 'chore(deps): update dependency @sveltejs/adapter-auto to v3.2.4' (#42) from renovate/sveltejs-adapter-auto-3.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 57s
Reviewed-on: #42
2024-08-13 14:56:21 +02:00
16bbb29f32 chore(deps): update dependency @sveltejs/adapter-auto to v3.2.4
All checks were successful
/ Build App (pull_request) Successful in 54s
2024-08-13 14:49:58 +02:00
c0c35b8e0f Merge pull request 'chore(deps): update dependency @sveltejs/adapter-node to v5.2.2' (#43) from renovate/sveltejs-adapter-node-5.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 55s
Reviewed-on: #43
2024-08-13 14:49:48 +02:00
626982fe3e chore(deps): update dependency @sveltejs/adapter-node to v5.2.2
All checks were successful
/ Build App (pull_request) Successful in 53s
2024-08-13 10:44:54 +02:00
79e079f115 Merge pull request 'chore(deps): update dependency @sveltejs/kit to v2.5.22' (#44) from renovate/sveltejs-kit-2.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 55s
Reviewed-on: #44
2024-08-13 10:44:45 +02:00
cd933b77cb chore(deps): update dependency @sveltejs/kit to v2.5.22
All checks were successful
/ Build App (pull_request) Successful in 54s
2024-08-13 10:41:55 +02:00
ef4ddf872f Merge pull request 'chore(deps): update dependency typescript-eslint to v8.1.0' (#45) from renovate/typescript-eslint-monorepo into main
All checks were successful
/ Build App (push) Successful in 1m18s
Reviewed-on: #45
2024-08-13 10:41:44 +02:00
ca3178e42a chore(deps): update dependency typescript-eslint to v8.1.0
All checks were successful
/ Build App (pull_request) Successful in 1m31s
2024-08-12 22:03:35 +00:00
338d3ccdbb Merge pull request 'chore(deps): lock file maintenance' (#35) from renovate/lock-file-maintenance into main
All checks were successful
/ Build App (push) Successful in 1m6s
Reviewed-on: #35
2024-08-10 11:52:41 +02:00
83eb10aadd chore(deps): lock file maintenance
All checks were successful
/ Build App (pull_request) Successful in 2m2s
2024-08-10 09:50:31 +00:00
2858c8c375 Merge pull request 'chore(deps): update dependency typescript-eslint to v8.0.1' (#34) from renovate/typescript-eslint-monorepo into main
All checks were successful
/ Build App (push) Successful in 55s
Reviewed-on: #34
2024-08-10 11:33:03 +02:00
0c09a354b8 chore(deps): update dependency typescript-eslint to v8.0.1
All checks were successful
/ Build App (pull_request) Successful in 59s
2024-08-10 11:28:38 +02:00
52ada9d040 Merge pull request 'chore(deps): update dependency vite to v5.4.0' (#36) from renovate/vite-5.x-lockfile into main
Some checks are pending
/ Build App (push) Waiting to run
Reviewed-on: #36
2024-08-10 11:28:14 +02:00
6cf7361905 chore(deps): update dependency vite to v5.4.0
Some checks failed
/ Build App (pull_request) Has been cancelled
2024-08-10 11:28:09 +02:00
335f341839 Merge pull request 'chore(deps): update dependency @sveltejs/adapter-auto to v3.2.3' (#37) from renovate/sveltejs-adapter-auto-3.x-lockfile into main
Some checks are pending
/ Build App (push) Waiting to run
Reviewed-on: #37
2024-08-10 11:27:49 +02:00
f4d5ccd4c3 chore(deps): update dependency @sveltejs/adapter-auto to v3.2.3
Some checks failed
/ Build App (pull_request) Has been cancelled
2024-08-10 11:27:35 +02:00
abd6a8a3be Merge pull request 'chore(deps): update dependency @sveltejs/adapter-node to v5.2.1' (#38) from renovate/sveltejs-adapter-node-5.x-lockfile into main
Some checks are pending
/ Build App (push) Waiting to run
Reviewed-on: #38
2024-08-10 11:27:22 +02:00
990e0e131f chore(deps): update dependency @sveltejs/adapter-node to v5.2.1
All checks were successful
/ Build App (pull_request) Successful in 1m5s
2024-08-10 11:24:27 +02:00
d6c24702d6 Merge pull request 'chore(deps): update dependency @sveltejs/kit to v2.5.21' (#39) from renovate/sveltejs-kit-2.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 1m31s
Reviewed-on: #39
2024-08-10 11:24:19 +02:00
13467c1c8f chore(deps): update dependency @sveltejs/kit to v2.5.21
All checks were successful
/ Build App (pull_request) Successful in 59s
2024-08-10 11:22:57 +02:00
3b338ea854 Merge pull request 'chore(deps): update dependency @types/node to v20.14.15' (#40) from renovate/node-20.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 58s
Reviewed-on: #40
2024-08-10 11:22:49 +02:00
7a85f1aae3 chore(deps): update dependency @types/node to v20.14.15
All checks were successful
/ Build App (pull_request) Successful in 53s
2024-08-10 11:21:37 +02:00
1e90cf7fc5 Merge pull request 'chore(deps): update dependency eslint to v9.9.0' (#41) from renovate/eslint-monorepo into main
All checks were successful
/ Build App (push) Successful in 56s
Reviewed-on: #41
2024-08-10 11:21:29 +02:00
1b36f81b85 chore(deps): update dependency eslint to v9.9.0
All checks were successful
/ Build App (pull_request) Successful in 51s
2024-08-10 01:02:12 +00:00
fba4548df4 Merge pull request 'chore(deps): lock file maintenance' (#32) from renovate/lock-file-maintenance into main
All checks were successful
/ Build App (push) Successful in 55s
Reviewed-on: #32
2024-08-04 15:57:28 +02:00
8ca2e03e6b chore(deps): lock file maintenance
All checks were successful
/ Build App (pull_request) Successful in 1m1s
2024-08-04 13:50:26 +00:00
ac6c82f2d8 Merge pull request 'chore(deps): update dependency @types/node to v20.14.14' (#33) from renovate/node-20.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 57s
Reviewed-on: #33
2024-08-04 15:37:17 +02:00
35dc5db5b9 Merge pull request 'chore(deps): update dependency globals to v15.9.0' (#31) from renovate/globals-15.x-lockfile into main
Some checks are pending
/ Build App (push) Waiting to run
Reviewed-on: #31
2024-08-04 15:36:58 +02:00
186d6423d2 Merge pull request 'chore(deps): update dependency @sveltejs/kit to v2.5.20' (#30) from renovate/sveltejs-kit-2.x-lockfile into main
Some checks are pending
/ Build App (push) Waiting to run
Reviewed-on: #30
2024-08-04 15:36:03 +02:00
9b7cd22d31 chore(deps): update dependency @sveltejs/kit to v2.5.20
All checks were successful
/ Build App (pull_request) Successful in 55s
2024-08-02 19:01:42 +00:00
4e7c757e71 chore(deps): update dependency @types/node to v20.14.14
All checks were successful
/ Build App (pull_request) Successful in 1m4s
2024-08-02 10:01:55 +00:00
c7ce50b334 chore(deps): update dependency globals to v15.9.0
All checks were successful
/ Build App (pull_request) Successful in 57s
2024-08-01 13:01:42 +00:00
518041ce4e Merge pull request 'chore(deps): lock file maintenance' (#29) from renovate/lock-file-maintenance into main
All checks were successful
/ Build App (push) Successful in 1m3s
Reviewed-on: #29
2024-08-01 11:13:50 +02:00
2ca056059d chore(deps): lock file maintenance
All checks were successful
/ Build App (pull_request) Successful in 55s
2024-08-01 09:08:49 +00:00
66e2cce28d Merge pull request 'chore(deps): update dependency vitest to v2.0.5' (#27) from renovate/vitest-monorepo into main
All checks were successful
/ Build App (push) Successful in 48s
Reviewed-on: #27
2024-08-01 11:07:11 +02:00
deb3382023 chore(deps): update dependency vitest to v2.0.5
All checks were successful
/ Build App (pull_request) Successful in 50s
2024-08-01 11:06:07 +02:00
667eaabd58 Merge pull request 'chore(deps): update dependency typescript-eslint to v8.0.0' (#28) from renovate/typescript-eslint-monorepo into main
All checks were successful
/ Build App (push) Successful in 51s
Reviewed-on: #28
2024-08-01 11:05:54 +02:00
13c958db03 chore(deps): update dependency typescript-eslint to v8.0.0
All checks were successful
/ Build App (pull_request) Successful in 57s
2024-07-31 19:01:18 +00:00
36a297837d chore(deps): update dependency svelte-check to v3.8.5 (#25)
All checks were successful
/ Build App (push) Successful in 1m1s
2024-07-31 00:05:07 +02:00
07fcf86fef chore(deps): update dependency typescript-eslint to v8.0.0-alpha.60 (#26)
Some checks are pending
/ Build App (push) Waiting to run
2024-07-31 00:03:41 +02:00
ce25ef7ec1 chore(deps): update dependency typescript-eslint to v8.0.0-alpha.60
All checks were successful
/ Build App (pull_request) Successful in 1m52s
2024-07-30 22:01:52 +00:00
84e8d3b2bd chore(deps): update dependency svelte-check to v3.8.5
All checks were successful
/ Build App (pull_request) Successful in 52s
2024-07-30 19:01:06 +00:00
9c8459c3e1 CI step naming
All checks were successful
/ Build App (push) Successful in 1m1s
2024-07-30 19:24:58 +02:00
7a0c3e516d Merge pull request 'feature/name-autocomplete' (#21) from feature/name-autocomplete into main
All checks were successful
/ Build App (push) Successful in 52s
Publish / tests (push) Successful in 50s
Publish / Publishing (push) Successful in 1m47s
Reviewed-on: #21
2024-07-30 19:22:57 +02:00
ff24e056e8 Formatting
All checks were successful
/ Build App (pull_request) Successful in 48s
2024-07-30 19:21:00 +02:00
423a4d9ad4 Colorscheme
Some checks failed
/ Build App (pull_request) Failing after 22s
2024-07-30 19:20:10 +02:00
d6769f392a Attribute ordering
All checks were successful
/ Build App (pull_request) Successful in 49s
2024-07-30 19:10:47 +02:00
cd59f73353 Add placeholder
All checks were successful
/ Build App (pull_request) Successful in 55s
2024-07-30 18:59:48 +02:00
66e7a5ff3c Fix lints
All checks were successful
/ Build App (pull_request) Successful in 51s
2024-07-30 17:48:44 +02:00
a48f6cc739 Ignore missing type declaration
Some checks failed
/ Build App (pull_request) Failing after 22s
2024-07-30 17:45:19 +02:00
6061e9bbdf Fix lints
Some checks failed
/ Build App (pull_request) Failing after 25s
2024-07-30 17:40:35 +02:00
2dbd724622 Formatting 2024-07-30 17:39:41 +02:00
4b6f25656b Use autocompletion input for names
Some checks failed
/ Build App (pull_request) Failing after 21s
2024-07-30 17:34:56 +02:00
fc0de8b7e0 Sort names before returning 2024-07-30 17:33:21 +02:00
62b1fd98b7 Add svelte-autocomplete dependency 2024-07-30 17:32:59 +02:00
c957dbf74e Use nodejs_latest 2024-07-30 17:32:21 +02:00
8079b728d7 Merge pull request 'chore(deps): update dependency typescript-eslint to v8.0.0-alpha.59' (#20) from renovate/typescript-eslint-monorepo into main
All checks were successful
/ Build App (push) Successful in 57s
Reviewed-on: #20
2024-07-30 15:17:06 +02:00
27b64aee15 chore(deps): update dependency typescript-eslint to v8.0.0-alpha.59
All checks were successful
/ Build App (pull_request) Successful in 55s
2024-07-30 13:01:08 +00:00
ab5ed2bc67 Merge pull request 'chore(deps): lock file maintenance' (#9) from renovate/lock-file-maintenance into main
All checks were successful
/ Build App (push) Successful in 55s
Reviewed-on: #9
2024-07-30 10:16:13 +02:00
d5b8df2c44 chore(deps): lock file maintenance
All checks were successful
/ Build App (pull_request) Successful in 1m9s
2024-07-30 08:13:04 +00:00
56a48eb490 Merge pull request 'chore(deps): update dependency prettier-plugin-svelte to v3.2.6' (#8) from renovate/prettier-plugin-svelte-3.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 54s
Reviewed-on: #8
2024-07-30 10:07:28 +02:00
5f32145caf chore(deps): update dependency prettier-plugin-svelte to v3.2.6
All checks were successful
/ Build App (pull_request) Successful in 53s
2024-07-30 10:06:20 +02:00
8548234025 Merge pull request 'chore(deps): update dependency typescript-eslint to v8.0.0-alpha.58' (#10) from renovate/typescript-eslint-monorepo into main
All checks were successful
/ Build App (push) Successful in 52s
Reviewed-on: #10
2024-07-30 10:06:11 +02:00
cd23deed41 chore(deps): update dependency typescript-eslint to v8.0.0-alpha.58
All checks were successful
/ Build App (pull_request) Successful in 49s
2024-07-30 10:05:09 +02:00
6053936aa8 Merge pull request 'chore(deps): update dependency eslint-plugin-svelte to v2.43.0' (#11) from renovate/eslint-plugin-svelte-2.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 53s
Reviewed-on: #11
2024-07-30 10:04:51 +02:00
3064915207 chore(deps): update dependency eslint-plugin-svelte to v2.43.0
All checks were successful
/ Build App (pull_request) Successful in 52s
2024-07-30 10:03:24 +02:00
dca92af177 Merge pull request 'chore(deps): update dependency vitest to v2.0.4' (#12) from renovate/vitest-monorepo into main
All checks were successful
/ Build App (push) Successful in 52s
Reviewed-on: #12
2024-07-30 10:03:14 +02:00
0ca10a9b97 chore(deps): update dependency vitest to v2.0.4
All checks were successful
/ Build App (pull_request) Successful in 50s
2024-07-30 10:02:03 +02:00
cf167951b6 Merge pull request 'chore(deps): update dependency eslint to v9.8.0' (#19) from renovate/eslint-monorepo into main
All checks were successful
/ Build App (push) Successful in 51s
Reviewed-on: #19
2024-07-30 10:01:42 +02:00
6eb54aaafb chore(deps): update dependency eslint to v9.8.0
All checks were successful
/ Build App (pull_request) Successful in 51s
2024-07-30 10:00:39 +02:00
a0d1f54e6e Merge pull request 'chore(deps): update dependency bulma to v1.0.2' (#18) from renovate/bulma-1.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 53s
Reviewed-on: #18
2024-07-30 10:00:11 +02:00
f633d25942 chore(deps): update dependency bulma to v1.0.2
All checks were successful
/ Build App (pull_request) Successful in 53s
2024-07-30 09:55:13 +02:00
6ca6e582c8 Merge pull request 'chore(deps): update dependency @types/eslint to v9' (#14) from renovate/eslint-9.x into main
All checks were successful
/ Build App (push) Successful in 58s
Reviewed-on: #14
2024-07-30 09:54:40 +02:00
241fb8967f Merge pull request 'chore(deps): update dependency typescript to v5.5.4' (#15) from renovate/typescript-5.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 55s
Reviewed-on: #15
2024-07-30 09:51:27 +02:00
932ab6ca86 chore(deps): update dependency typescript to v5.5.4
All checks were successful
/ Build App (pull_request) Successful in 1m0s
2024-07-30 09:49:49 +02:00
6ab66e29c5 Merge pull request 'chore(deps): update dependency @types/node to v20.14.13' (#16) from renovate/node-20.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 1m1s
Reviewed-on: #16
2024-07-30 09:49:38 +02:00
398ea598fe chore(deps): update dependency @types/node to v20.14.13
All checks were successful
/ Build App (pull_request) Successful in 54s
2024-07-30 09:48:14 +02:00
533062a790 Merge pull request 'chore(deps): update dependency vite to v5.3.5' (#17) from renovate/vite-5.x-lockfile into main
All checks were successful
/ Build App (push) Successful in 55s
Reviewed-on: #17
2024-07-30 09:47:59 +02:00
752cf81f3c chore(deps): update dependency vite to v5.3.5
All checks were successful
/ Build App (pull_request) Successful in 54s
2024-07-30 09:47:48 +02:00
ff9c0a6941 Endpoint for name autocomplete
Some checks failed
/ Build App (push) Failing after 2s
2024-07-30 08:38:58 +02:00
76372eb19a chore(deps): update dependency @types/eslint to v9
All checks were successful
/ Build App (pull_request) Successful in 55s
2024-07-22 19:01:32 +00:00
e93d7a5652 Merge pull request 'chore(deps): update docker/login-action action to v3' (#7) from renovate/docker-login-action-3.x into main
Some checks failed
/ Build App (push) Failing after 1s
Reviewed-on: #7
2024-07-17 13:49:48 +02:00
5cf0839ae9 chore(deps): update docker/login-action action to v3
All checks were successful
/ Build App (pull_request) Successful in 58s
2024-07-17 11:44:33 +00:00
a651cde7a6 Merge pull request 'chore(deps): lock file maintenance' (#6) from renovate/lock-file-maintenance into main
All checks were successful
/ Build App (push) Successful in 47s
Reviewed-on: #6
2024-07-17 13:41:35 +02:00
c9754f0703 chore(deps): lock file maintenance
All checks were successful
/ Build App (pull_request) Successful in 50s
2024-07-17 13:21:40 +02:00
eadddf3618 Merge pull request 'chore(deps): update docker/build-push-action action to v6' (#5) from renovate/docker-build-push-action-6.x into main
All checks were successful
/ Build App (push) Successful in 53s
Reviewed-on: #5
2024-07-17 13:21:22 +02:00
e8b1f020aa chore(deps): update docker/build-push-action action to v6
All checks were successful
/ Build App (pull_request) Successful in 56s
2024-07-17 13:17:22 +02:00
935f21bb1f Merge pull request 'chore(deps): update actions/checkout action to v4' (#4) from renovate/actions-checkout-4.x into main
All checks were successful
/ Build App (push) Successful in 1m37s
Reviewed-on: #4
2024-07-17 13:17:06 +02:00
edd7c62e1a chore(deps): update actions/checkout action to v4
All checks were successful
/ Build App (pull_request) Successful in 1m2s
2024-07-17 11:15:04 +00:00
14 changed files with 787 additions and 335 deletions

View File

@ -0,0 +1,24 @@
on:
workflow_call:
push:
branches:
- main
pull_request:
schedule:
- cron: '0 0 * * *'
jobs:
shellcheck:
name: Misc Linters
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: https://gitea.com/actions/checkout@v4
- name: Lint shellscripts
uses: ludeeus/action-shellcheck@master
- name: Lint Dockerfile
uses: hadolint/hadolint-action@v3.1.0
with:
dockerfile: ./Containerfile

View File

@ -6,6 +6,9 @@ on:
- 'v*'
jobs:
lints:
uses: ./.gitea/workflows/lints.yml
tests:
uses: ./.gitea/workflows/node.yml
@ -19,10 +22,10 @@ jobs:
steps:
- name: Checkout sources
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Login to DockerHub
uses: docker/login-action@v2
- name: Login to Container Registry
uses: docker/login-action@v3
with:
registry: https://git.vbrandl.net
username: ${{ secrets.REGISTRY_USER }}
@ -35,7 +38,7 @@ jobs:
echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
- name: Build and push
uses: docker/build-push-action@v4
uses: docker/build-push-action@v6
with:
context: .
file: ./Containerfile

View File

@ -8,8 +8,10 @@ COPY . .
RUN npm run build
FROM node:21-alpine
USER node:node
WORKDIR /app
RUN chown -R node:node /app
USER node:node
COPY ./container/entrypoint.sh /entrypoint.sh
COPY package.json .
COPY --from=builder /app/build ./build
CMD ["node", "./build/index.js"]
ENTRYPOINT ["sh", "/entrypoint.sh"]

12
container/entrypoint.sh Executable file
View File

@ -0,0 +1,12 @@
#!/usr/bin/env sh
set -e
export STORAGE_PATH="${STORAGE_PATH:-./uploads}"
entrypoint() {
mkdir -p "${STORAGE_PATH}"
node ./build/index.js
}
entrypoint

6
flake.lock generated
View File

@ -20,11 +20,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1720957393,
"narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=",
"lastModified": 1723637854,
"narHash": "sha256-med8+5DSWa2UnOqtdICndjDAEjxr5D7zaIiK4pn0Q7c=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "693bc46d169f5af9c992095736e82c3488bf7dbb",
"rev": "c3aa7b8938b17aebd2deecf7be0636000d62a2b9",
"type": "github"
},
"original": {

View File

@ -15,7 +15,7 @@
};
in {
devShell = pkgs.mkShell {
nativeBuildInputs = with pkgs; [ nodejs ];
nativeBuildInputs = with pkgs; [ nodejs_latest ];
};
}
);

959
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "fotochallenge",
"version": "0.0.1",
"version": "0.0.4",
"private": true,
"scripts": {
"dev": "vite dev",
@ -17,23 +17,24 @@
"@sveltejs/adapter-node": "^5.2.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@types/eslint": "^8.56.7",
"@types/eslint": "^9.0.0",
"@types/node": "^20.14.11",
"bulma": "^1.0.1",
"eslint": "^9.0.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-svelte": "^2.36.0",
"globals": "^15.0.0",
"prettier": "^3.1.1",
"prettier-plugin-svelte": "^3.1.2",
"sass": "^1.77.5",
"simple-svelte-autocomplete": "^2.5.2",
"svelte": "^4.2.7",
"svelte-check": "^3.6.0",
"tslib": "^2.4.1",
"typescript": "^5.0.0",
"typescript-eslint": "^8.0.0-alpha.20",
"vite": "^5.0.3",
"vitest": "^2.0.0",
"bulma": "^1.0.1",
"sass": "^1.77.5"
"vitest": "^2.0.0"
},
"type": "module",
"engines": {

View File

@ -2,7 +2,19 @@ import safePath from '$lib';
import { describe, it, expect } from 'vitest';
describe('safe path', () => {
it('removes non alphanum from string', () => {
expect(safePath('../../!=-.,/abc123')).toBe('abc123');
it('reject names with ../', () => {
expect(safePath('../foobar', './uploads')).toBe(false);
});
it('accept names with ./', () => {
expect(safePath('./foobar', './uploads')).toBe(true);
});
it('reject names with /', () => {
expect(safePath('foo/bar', './uploads')).toBe(false);
});
it('accept happy path', () => {
expect(safePath('foobar', './uploads')).toBe(true);
});
});

View File

@ -1,5 +1,24 @@
// place files you want to import through the `$lib` alias in this folder.
import path from 'path';
const safePath = (input: string) => input.replace(/\W/g, '');
function safePath(name: string, basePath: string): boolean {
const fullPath = `${basePath}/${name}`;
const relative = path.relative(basePath, fullPath);
return (
!!relative &&
// does move out of `basePath`
!relative.startsWith('..') &&
// exactly one layer deep, e.g. no `./uplodas/foo/bar`
!relative.includes('/') &&
// result is not an absolute path
!path.isAbsolute(relative)
);
}
const defaultPath: string = './uploads';
if (!('STORAGE_PATH' in process.env)) {
console.warn(`'STORAGE_PATH' environment variable is not set. Defaulting to ${defaultPath}`);
}
export const storagePath: string = process.env.STORAGE_PATH ?? defaultPath;
export default safePath;

View File

@ -1,12 +1,10 @@
import { writeFileSync, mkdirSync, existsSync } from 'fs';
import { fail } from '@sveltejs/kit';
import type { RequestEvent } from './$types';
import safePath from '$lib';
import safePath, { storagePath } from '$lib';
import { hash } from 'crypto';
import path from 'path';
const storagePath: string = './uploads';
const mkdirIfNotExists = (path: string) => {
if (!existsSync(path)) {
mkdirSync(path);
@ -36,7 +34,12 @@ export const actions = {
return fail(400, { field: 'name', name: formName, incorrect: true });
}
const name = safePath(formName as string);
const name = formName as string;
if (!safePath(name, storagePath)) {
return fail(400, { field: 'name', name: name, incorrect: true });
}
// const name = safePath(formName as string);
files.forEach(async (file) => {
const outPath = `${storagePath}/${name}`;

View File

@ -1,9 +1,13 @@
<script lang="ts">
import { enhance } from '$app/forms';
import type { ActionData } from './$types';
// @ts-expect-error: package does not contain type definitions
import AutoComplete from 'simple-svelte-autocomplete';
export let form: ActionData;
let selectedName: string;
let files: FileList;
let sending = false;
@ -21,6 +25,12 @@
.map(([k, v]) => `${(size / k).toFixed(1)} ${v}B`)[0] ?? `${size} bytes`
);
};
async function loadNames() {
const url = './names';
const response = await fetch(url);
return await response.json();
}
</script>
<form
@ -44,14 +54,15 @@
<div class="field">
<label for="name" class="label">Name</label>
<div class="control">
<input
<AutoComplete
id="name"
class="input"
type="text"
name="name"
placeholder="Name"
value={form?.name ?? ''}
required
create={true}
bind:selectedItem={selectedName}
bind:text={selectedName}
createText=""
searchFunction={loadNames}
/>
</div>
{#if form?.field === 'name'}
@ -69,10 +80,10 @@
<span class="file-cta">
<span class="file-label">Fotos auswählen...</span>
</span>
{#if files}
<span class="file-name"
>{files.length} Bild{#if files.length > 1}er{/if} ausgewählt ({fileSize(files)})</span
>
{#if files && files?.length !== 0}
<span class="file-name">
{files.length} Bild{#if files.length > 1}er{/if} ausgewählt ({fileSize(files)})
</span>
{:else}
<span class="file-name">Keine Bilder ausgewählt</span>
{/if}

View File

@ -0,0 +1,12 @@
import { storagePath } from '$lib';
import { json } from '@sveltejs/kit';
import { readdirSync, statSync } from 'fs';
export function GET() {
const names = readdirSync(storagePath).filter((f) =>
statSync(`${storagePath}/${f}`).isDirectory()
);
names.sort();
return json(names);
}

View File

@ -1,2 +1,2 @@
/* Set your brand colors */
$pink: pink;
$pink: #d47479;