1
0
mirror of https://github.com/dutchcoders/transfer.sh.git synced 2020-11-18 19:53:40 -08:00

Compare commits

...

17 Commits

Author SHA1 Message Date
Andrea Spacca
ae00f8ceaa
Merge pull request #331 from zuh0/official-docker-buildx-ghaction
ci: switch to official docker buildx GitHub action
2020-10-26 09:08:38 +01:00
Gabriel Duque
ec9db7a42e
ci: switch to official docker buildx GitHub action
Signed-off-by: Gabriel Duque <gabriel@zuh0.com>
2020-10-21 00:30:52 +02:00
Andrea Spacca
bcf40c15a2
Merge pull request #330 from stillwondering/show-version-in-version-command
Include version string in version command output
2020-10-12 19:33:08 +02:00
stillwondering
fe1cde6614
Include version string in version command output
The command `transfer.sh version` does not include the application's
version string in its output. Fix this.
2020-10-12 13:25:29 +02:00
Andrea Spacca
ffb2cf0011
Merge pull request #317 from zuh0/multi-architecture-docker-images
ci: deploy multi-architecture Docker images using buildx
2020-06-21 20:41:17 +02:00
Gabriel Duque
085e9f8414
ci: deploy multi-architecture Docker images using buildx
Signed-off-by: Gabriel Duque <gabriel@zuh0.com>
2020-06-14 21:57:48 +02:00
Andrea Spacca
a4bf102d29
Merge pull request #315 from dutchcoders/revert-314-ISSUE-313-BUILDX
Revert "ISSUE-313-BUILDX"
2020-06-14 20:01:51 +02:00
Andrea Spacca
c8497fb27d
Revert "ISSUE-313-BUILDX" 2020-06-14 20:01:38 +02:00
Andrea Spacca
68212d100e
Merge pull request #314 from dutchcoders/ISSUE-313-BUILDX
ISSUE-313-BUILDX
2020-06-14 19:56:02 +02:00
Andrea Spacca
18f4b42cf1 ISSUE-313-BUILDX 2020-06-14 19:53:36 +02:00
Andrea Spacca
92055f1b3c
Merge pull request #274 from eksoverzero/os_and_arch
Remove explicit OS and Arch builds
2020-05-17 20:12:38 +02:00
Andrea Spacca
9430e53689
Merge pull request #307 from cheeseandcereal/add_proxy_port
add proxy-port for port override when running behind a proxy
2020-05-17 19:28:21 +02:00
Andrea Spacca
a26b32dd86
Merge pull request #311 from cheeseandcereal/crypto_seed
use cryptographically secure rng seed
2020-05-17 19:10:56 +02:00
Adam Crowder
0a6b5817a9
use cryptographically secure rng seed
Signed-off-by: Adam Crowder <adam@adamcrowder.net>
2020-05-11 18:57:04 -07:00
Adam Crowder
d830bf1afc
revert println
Signed-off-by: Adam Crowder <adam@adamcrowder.net>
2020-05-08 11:49:21 -07:00
Adam Crowder
f366e8217e
add proxy-port for port override when running behind a proxy
Signed-off-by: Adam Crowder <adam@adamcrowder.net>
2020-05-03 13:26:49 -07:00
Steven Eksteen
9297c253aa Remove explicit OS and Arch builds
This could allow multi-arch supporting using `docker buildx`
2019-11-13 21:19:04 +02:00
6 changed files with 148 additions and 26 deletions

View File

@ -0,0 +1,89 @@
name: Deploy multi-architecture Docker images for transfer.sh with buildx
on:
schedule:
- cron: '0 0 * * *' # everyday at midnight UTC
pull_request:
branches: master
push:
branches: master
tags:
- v*
jobs:
buildx:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Prepare
id: prepare
run: |
DOCKER_IMAGE=dutchcoders/transfer.sh
DOCKER_PLATFORMS=linux/amd64,linux/arm/v7,linux/arm64,linux/386
VERSION=edge
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/v}
fi
if [ "${{ github.event_name }}" = "schedule" ]; then
VERSION=nightly
fi
TAGS="--tag ${DOCKER_IMAGE}:${VERSION}"
if [ $VERSION = edge -o $VERSION = nightly ]; then
TAGS="$TAGS --tag ${DOCKER_IMAGE}:latest"
fi
echo ::set-output name=docker_image::${DOCKER_IMAGE}
echo ::set-output name=version::${VERSION}
echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} \
--build-arg VERSION=${VERSION} \
--build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \
--build-arg VCS_REF=${GITHUB_SHA::8} \
${TAGS} .
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
with:
platforms: all
-
name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
with:
version: latest
-
name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
-
name: Docker Buildx (build)
run: |
docker buildx build --no-cache --pull --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }}
-
name: Docker Login
if: success() && github.event_name != 'pull_request'
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: |
echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin
-
name: Docker Buildx (push)
if: success() && github.event_name != 'pull_request'
run: |
docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }}
-
name: Docker Check Manifest
if: always() && github.event_name != 'pull_request'
run: |
docker run --rm mplatform/mquery ${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}
-
name: Clear
if: always() && github.event_name != 'pull_request'
run: |
rm -f ${HOME}/.docker/config.json

View File

@ -12,7 +12,7 @@ WORKDIR /go/src/github.com/dutchcoders/transfer.sh
ENV GO111MODULE=on
# build & install server
RUN go get -u ./... && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags -a -tags netgo -ldflags '-w -extldflags "-static"' -o /go/bin/transfersh github.com/dutchcoders/transfer.sh
RUN go get -u ./... && CGO_ENABLED=0 go build -ldflags -a -tags netgo -ldflags '-w -extldflags "-static"' -o /go/bin/transfersh github.com/dutchcoders/transfer.sh
FROM scratch AS final
LABEL maintainer="Andrea Spacca <andrea.spacca@gmail.com>"

View File

@ -90,6 +90,7 @@ ip-blacklist | comma separated list of ips not allowed to connect to the service
temp-path | path to temp folder | system temp | TEMP_PATH |
web-path | path to static web files (for development or custom front end) | | WEB_PATH |
proxy-path | path prefix when service is run behind a proxy | | PROXY_PATH |
proxy-port | port of the proxy when the service is run behind a proxy | | PROXY_PORT |
ga-key | google analytics key for the front end | | GA_KEY |
uservoice-key | user voice key for the front end | | USERVOICE_KEY |
provider | which storage provider to use | (s3, gdrive or local) | PROVIDER |

View File

@ -91,6 +91,12 @@ var globalFlags = []cli.Flag{
Value: "",
EnvVar: "PROXY_PATH",
},
cli.StringFlag{
Name: "proxy-port",
Usage: "port of the proxy when the service is run behind a proxy",
Value: "",
EnvVar: "PROXY_PORT",
},
cli.StringFlag{
Name: "ga-key",
Usage: "key for google analytics (front end)",
@ -245,7 +251,7 @@ type Cmd struct {
}
func VersionAction(c *cli.Context) {
fmt.Println(color.YellowString(fmt.Sprintf("transfer.sh: Easy file sharing from the command line")))
fmt.Println(color.YellowString(fmt.Sprintf("transfer.sh %s: Easy file sharing from the command line", Version)))
}
func New() *Cmd {
@ -299,6 +305,10 @@ func New() *Cmd {
options = append(options, server.ProxyPath(v))
}
if v := c.String("proxy-port"); v != "" {
options = append(options, server.ProxyPort(v))
}
if v := c.String("ga-key"); v != "" {
options = append(options, server.GoogleAnalytics(v))
}

View File

@ -158,9 +158,9 @@ func (s *Server) previewHandler(w http.ResponseWriter, r *http.Request) {
}
relativeURL, _ := url.Parse(path.Join(s.proxyPath, token, filename))
resolvedURL := resolveURL(r, relativeURL)
resolvedURL := resolveURL(r, relativeURL, s.proxyPort)
relativeURLGet, _ := url.Parse(path.Join(s.proxyPath, getPathPart, token, filename))
resolvedURLGet := resolveURL(r, relativeURLGet)
resolvedURLGet := resolveURL(r, relativeURLGet, s.proxyPort)
var png []byte
png, err = qrcode.Encode(resolvedURL, qrcode.High, 150)
if err != nil {
@ -170,8 +170,8 @@ func (s *Server) previewHandler(w http.ResponseWriter, r *http.Request) {
qrCode := base64.StdEncoding.EncodeToString(png)
hostname := getURL(r).Host
webAddress := resolveWebAddress(r, s.proxyPath)
hostname := getURL(r, s.proxyPort).Host
webAddress := resolveWebAddress(r, s.proxyPath, s.proxyPort)
data := struct {
ContentType string
@ -212,8 +212,8 @@ func (s *Server) previewHandler(w http.ResponseWriter, r *http.Request) {
func (s *Server) viewHandler(w http.ResponseWriter, r *http.Request) {
// vars := mux.Vars(r)
hostname := getURL(r).Host
webAddress := resolveWebAddress(r, s.proxyPath)
hostname := getURL(r, s.proxyPort).Host
webAddress := resolveWebAddress(r, s.proxyPath, s.proxyPort)
data := struct {
Hostname string
@ -339,7 +339,7 @@ func (s *Server) postHandler(w http.ResponseWriter, r *http.Request) {
filename = url.PathEscape(filename)
relativeURL, _ := url.Parse(path.Join(s.proxyPath, token, filename))
fmt.Fprintln(w, getURL(r).ResolveReference(relativeURL).String())
fmt.Fprintln(w, getURL(r, s.proxyPort).ResolveReference(relativeURL).String())
cleanTmpFile(file)
}
@ -500,15 +500,15 @@ func (s *Server) putHandler(w http.ResponseWriter, r *http.Request) {
relativeURL, _ := url.Parse(path.Join(s.proxyPath, token, filename))
deleteURL, _ := url.Parse(path.Join(s.proxyPath, token, filename, metadata.DeletionToken))
w.Header().Set("X-Url-Delete", resolveURL(r, deleteURL))
w.Header().Set("X-Url-Delete", resolveURL(r, deleteURL, s.proxyPort))
fmt.Fprint(w, resolveURL(r, relativeURL))
fmt.Fprint(w, resolveURL(r, relativeURL, s.proxyPort))
}
func resolveURL(r *http.Request, u *url.URL) string {
func resolveURL(r *http.Request, u *url.URL, proxyPort string) string {
r.URL.Path = ""
return getURL(r).ResolveReference(u).String()
return getURL(r, proxyPort).ResolveReference(u).String()
}
func resolveKey(key, proxyPath string) string {
@ -525,8 +525,8 @@ func resolveKey(key, proxyPath string) string {
return key
}
func resolveWebAddress(r *http.Request, proxyPath string) string {
url := getURL(r)
func resolveWebAddress(r *http.Request, proxyPath string, proxyPort string) string {
url := getURL(r, proxyPort)
var webAddress string
@ -544,7 +544,7 @@ func resolveWebAddress(r *http.Request, proxyPath string) string {
return webAddress
}
func getURL(r *http.Request) *url.URL {
func getURL(r *http.Request, proxyPort string) *url.URL {
u, _ := url.Parse(r.URL.String())
if r.TLS != nil {
@ -555,9 +555,17 @@ func getURL(r *http.Request) *url.URL {
u.Scheme = "http"
}
if u.Host != "" {
} else if host, port, err := net.SplitHostPort(r.Host); err != nil {
u.Host = r.Host
if u.Host == "" {
host, port, err := net.SplitHostPort(r.Host)
if err != nil {
host = r.Host
port = ""
}
if len(proxyPort) != 0 {
port = proxyPort
}
if len(port) == 0 {
u.Host = host
} else {
if port == "80" && u.Scheme == "http" {
u.Host = host
@ -567,6 +575,7 @@ func getURL(r *http.Request) *url.URL {
u.Host = net.JoinHostPort(host, port)
}
}
}
return u
}
@ -1009,7 +1018,7 @@ func (s *Server) RedirectHandler(h http.Handler) http.HandlerFunc {
} else if r.Header.Get("X-Forwarded-Proto") == "https" {
} else if r.URL.Scheme == "https" {
} else {
u := getURL(r)
u := getURL(r, s.proxyPort)
u.Scheme = "https"
http.Redirect(w, r, u.String(), http.StatusPermanentRedirect)

View File

@ -28,6 +28,8 @@ import (
"errors"
gorillaHandlers "github.com/gorilla/handlers"
"log"
crypto_rand "crypto/rand"
"encoding/binary"
"math/rand"
"mime"
"net/http"
@ -139,6 +141,12 @@ func ProxyPath(s string) OptionFn {
}
}
func ProxyPort(s string) OptionFn {
return func(srvr *Server) {
srvr.proxyPort = s
}
}
func TempPath(s string) OptionFn {
return func(srvr *Server) {
if s[len(s)-1:] != "/" {
@ -278,6 +286,7 @@ type Server struct {
webPath string
proxyPath string
proxyPort string
gaKey string
userVoiceKey string
@ -306,7 +315,11 @@ func New(options ...OptionFn) (*Server, error) {
}
func init() {
rand.Seed(time.Now().UTC().UnixNano())
var seedBytes [8]byte
if _, err := crypto_rand.Read(seedBytes[:]); err != nil {
panic("cannot obtain cryptographically secure seed")
}
rand.Seed(int64(binary.LittleEndian.Uint64(seedBytes[:])))
}
func (s *Server) Run() {