Compare commits
6 Commits
c83094266b
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 73559fde88 | |||
| d303ec9154 | |||
| de5d5a2344 | |||
| 2ebe95e9f8 | |||
| 741256c1e4 | |||
| db3a257ecd |
@@ -18,4 +18,8 @@ FROM gcr.io/distroless/base-debian10
|
|||||||
COPY --from=gobuild /app/build/s3share /app/s3share
|
COPY --from=gobuild /app/build/s3share /app/s3share
|
||||||
COPY --from=jsbuild /app/build/public /app/public
|
COPY --from=jsbuild /app/build/public /app/public
|
||||||
|
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
ENTRYPOINT [ "/app/s3share" ]
|
ENTRYPOINT [ "/app/s3share" ]
|
||||||
|
|||||||
@@ -20,6 +20,10 @@ S3Share requires two things:
|
|||||||
- a s3 bucket with read access
|
- a s3 bucket with read access
|
||||||
- a sql database
|
- a sql database
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
The docker image is available at [Dockerhub](https://hub.docker.com/r/djeeberjr/s3share). There is also a [docker-compose](docker-compose.yml) file that can be used as an example.
|
||||||
|
|
||||||
# Synopsis
|
# Synopsis
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ type args struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (args) Version() string {
|
func (args) Version() string {
|
||||||
// TODO
|
return "s3share 1.0"
|
||||||
return "s3share 0.1"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|||||||
39
share.sh
Executable file
39
share.sh
Executable file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# This is an example on how i use this to upload and share files.
|
||||||
|
# This is tested with minio.
|
||||||
|
# You may need to change some things in here to fit your needs.
|
||||||
|
|
||||||
|
# Change these variables
|
||||||
|
S3_BUCKET="bucketname"
|
||||||
|
S3_ACCESS_KEY="accesskey"
|
||||||
|
S3_SECRET_KEY="secretkey"
|
||||||
|
S3_ENDPOINT="s3.example.com"
|
||||||
|
ENDPOINT="https://share.example.com"
|
||||||
|
API_USERNAME="admin"
|
||||||
|
API_PASSWORD="hunter2"
|
||||||
|
# Dont touch the things below
|
||||||
|
|
||||||
|
UPLOAD_FILE="$1"
|
||||||
|
|
||||||
|
if test -n "$1"; then
|
||||||
|
UPLOAD_FILE=$1
|
||||||
|
elif test ! -t 0; then
|
||||||
|
read -r UPLOAD_FILE
|
||||||
|
else
|
||||||
|
>&2 echo "Provide a file"
|
||||||
|
echo "Usage: $0 <file>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
UPLOAD_FILENAME=$(basename "$UPLOAD_FILE")
|
||||||
|
|
||||||
|
s3cmd -q -s --host "$S3_ENDPOINT" --host-bucket "$S3_ENDPOINT" --access_key "$S3_ACCESS_KEY" --secret_key "$S3_SECRET_KEY" put "$UPLOAD_FILE" s3://$S3_BUCKET/
|
||||||
|
|
||||||
|
SLUG=$(curl -s -u "$API_USERNAME:$API_PASSWORD" -X POST --header "Content-Type: application/json" \
|
||||||
|
--data "{\"key\":\"$UPLOAD_FILENAME\"}" \
|
||||||
|
"$ENDPOINT/api/share" | jq -r ".slug")
|
||||||
|
|
||||||
|
printf "%s/%s\n" "$ENDPOINT" "$SLUG"
|
||||||
@@ -13,7 +13,7 @@ export default function getComponentForShare(contentType: string, filename: stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (contentType.startsWith("application/pdf")) {
|
if (contentType.startsWith("application/pdf")) {
|
||||||
return import("./opener/Default.svelte");
|
return import("./opener/PDF.svelte");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (contentType.startsWith("text/")) {
|
if (contentType.startsWith("text/")) {
|
||||||
@@ -25,7 +25,7 @@ export default function getComponentForShare(contentType: string, filename: stri
|
|||||||
case "application/ld+json":
|
case "application/ld+json":
|
||||||
case "application/xhtml+xml":
|
case "application/xhtml+xml":
|
||||||
case "application/xml":
|
case "application/xml":
|
||||||
return import("./opener/Default.svelte");
|
return import("./opener/Text.svelte");
|
||||||
case "application/ogg":
|
case "application/ogg":
|
||||||
return import("./opener/Default.svelte");
|
return import("./opener/Default.svelte");
|
||||||
}
|
}
|
||||||
@@ -56,13 +56,13 @@ export default function getComponentForShare(contentType: string, filename: stri
|
|||||||
case "flac":
|
case "flac":
|
||||||
return import("./opener/Default.svelte");
|
return import("./opener/Default.svelte");
|
||||||
case "pdf":
|
case "pdf":
|
||||||
return import("./opener/Default.svelte");
|
return import("./opener/PDF.svelte");
|
||||||
case "txt":
|
case "txt":
|
||||||
case "md":
|
case "md":
|
||||||
case "markdown":
|
case "markdown":
|
||||||
return import("./opener/Default.svelte");
|
return import("./opener/Default.svelte");
|
||||||
}
|
}
|
||||||
|
|
||||||
return import("./opener/Text.svelte");
|
return import("./opener/Default.svelte");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
14
web/opener/PDF.svelte
Normal file
14
web/opener/PDF.svelte
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
export let contentType: string;
|
||||||
|
export let filename: string;
|
||||||
|
export let slug: string;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<iframe src="/s/{slug}.pdf" title="{filename}" frameborder="0"></iframe>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
iframe{
|
||||||
|
min-width: 100%;
|
||||||
|
height: 90vh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user