From 1fef0e0e6fe90b60b69dd62e64dd5c4e13a0b282 Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Fri, 10 Nov 2017 22:52:05 -0700 Subject: [PATCH] Rudimentary server with no actual logic --- .gitignore | 7 +++++ README.md | 17 +++++++++++ .../matrix-media-repo/client/r0/download.go | 29 +++++++++++++++++++ .../matrix-media-repo/client/r0/thumbnail.go | 16 ++++++++++ .../matrix-media-repo/client/r0/upload.go | 15 ++++++++++ .../turt2live/matrix-media-repo/media_repo.go | 19 ++++++++++++ vendor/manifest | 11 +++++++ 7 files changed, 114 insertions(+) create mode 100644 src/github.com/turt2live/matrix-media-repo/client/r0/download.go create mode 100644 src/github.com/turt2live/matrix-media-repo/client/r0/thumbnail.go create mode 100644 src/github.com/turt2live/matrix-media-repo/client/r0/upload.go create mode 100644 src/github.com/turt2live/matrix-media-repo/media_repo.go create mode 100644 vendor/manifest diff --git a/.gitignore b/.gitignore index a1338d68..96733244 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,10 @@ +/.idea +/bin +/pkg + +vendor/pkg +vendor/src + # Binaries for programs and plugins *.exe *.dll diff --git a/README.md b/README.md index 8d26f7eb..68bd725d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,19 @@ # matrix-media-repo A domain-aware media repository for matrix + +# Installing + +Assuming Go 1.9 and JDK 1.8 are already installed on your PATH: +``` +# Get it +git clone https://github.com/turt2live/matrix-media-repo +cd matrix-media-repo + +# Build it +go get github.com/constabulary/gb/... +gb vendor restore +gb build + +# Run it +bin/matrix-media-repo +``` diff --git a/src/github.com/turt2live/matrix-media-repo/client/r0/download.go b/src/github.com/turt2live/matrix-media-repo/client/r0/download.go new file mode 100644 index 00000000..6078a4ff --- /dev/null +++ b/src/github.com/turt2live/matrix-media-repo/client/r0/download.go @@ -0,0 +1,29 @@ +package r0 + +import ( + "net/http" + "github.com/gorilla/mux" + "io" +) + +// Request: +// Path params: {serverName}, {mediaId} +// Optional path param: {filename} +// +// Response: +// Headers: Content-Type, Content-Disposition +// Body: <byte[]> + +func DownloadMedia(w http.ResponseWriter, r *http.Request) { + params := mux.Vars(r) + + server := params["server"] + mediaId := params["mediaId"] + filename := params["filename"] + + if filename == "" { + filename = "testasdasdasd.jpg" + } + + io.WriteString(w, "Server = " + server + "; mediaId = " + mediaId +"; filename = " + filename) +} diff --git a/src/github.com/turt2live/matrix-media-repo/client/r0/thumbnail.go b/src/github.com/turt2live/matrix-media-repo/client/r0/thumbnail.go new file mode 100644 index 00000000..3bcc4609 --- /dev/null +++ b/src/github.com/turt2live/matrix-media-repo/client/r0/thumbnail.go @@ -0,0 +1,16 @@ +package r0 + +import "net/http" + +// Request: +// Path params: {serverName}, {mediaId} +// QS: ?width=&height=&method= +// "method" can be crop or scale +// +// Response: +// Headers: Content-Type +// Body: <byte[]> + +func ThumbnailMedia(w http.ResponseWriter, r *http.Request) { + +} diff --git a/src/github.com/turt2live/matrix-media-repo/client/r0/upload.go b/src/github.com/turt2live/matrix-media-repo/client/r0/upload.go new file mode 100644 index 00000000..edf9f92e --- /dev/null +++ b/src/github.com/turt2live/matrix-media-repo/client/r0/upload.go @@ -0,0 +1,15 @@ +package r0 + +import "net/http" + +// Request: +// QS: ?filename= +// Headers: Content-Type +// Body: <byte[]> +// +// Response: +// Body: {"content_uri":"mxc://domain.com/media_id"} + +func UploadMedia(w http.ResponseWriter, r *http.Request) { + +} diff --git a/src/github.com/turt2live/matrix-media-repo/media_repo.go b/src/github.com/turt2live/matrix-media-repo/media_repo.go new file mode 100644 index 00000000..dbcfc0d5 --- /dev/null +++ b/src/github.com/turt2live/matrix-media-repo/media_repo.go @@ -0,0 +1,19 @@ +package main + +import ( + "net/http" + "github.com/turt2live/matrix-media-repo/client/r0" + "github.com/gorilla/mux" +) + +func main() { + rtr := mux.NewRouter() + + rtr.HandleFunc("/_matrix/client/r0/media/upload", r0.UploadMedia).Methods("POST") + rtr.HandleFunc("/_matrix/client/r0/media/download/{server:[a-zA-Z0-9.]+}/{mediaId:[a-zA-Z0-9]+}", r0.DownloadMedia).Methods("GET") + rtr.HandleFunc("/_matrix/client/r0/media/download/{server:[a-zA-Z0-9.]+}/{mediaId:[a-zA-Z0-9]+}/{filename:[a-zA-Z0-9._-]+}", r0.DownloadMedia).Methods("GET") + rtr.HandleFunc("/_matrix/client/r0/media/thumbnail/{server:[a-zA-Z0-9.]+}/{mediaId:[a-zA-Z0-9]+}", r0.ThumbnailMedia).Methods("GET") + + http.Handle("/", rtr) + http.ListenAndServe(":8000", nil) +} \ No newline at end of file diff --git a/vendor/manifest b/vendor/manifest new file mode 100644 index 00000000..0d1370a5 --- /dev/null +++ b/vendor/manifest @@ -0,0 +1,11 @@ +{ + "version": 0, + "dependencies": [ + { + "importpath": "github.com/gorilla/mux", + "repository": "https://github.com/gorilla/mux", + "revision": "2d5fef06b891c971b14aa6f71ca5ab6c03a36e0e", + "branch": "master" + } + ] +} -- GitLab