diff --git a/.gitignore b/.gitignore index a1338d68517ee2ad6ee11214b201e5958cb2bbc3..96733244ab3f3a360b957d83181cc65fdcc1ede1 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 8d26f7eb10cc99b7f34c4bc390be3050eea4aec3..68bd725ddca08142482143d1b5e74bbb26a3062f 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 0000000000000000000000000000000000000000..6078a4ff204a857dd7f7017cf4388a29d85eaab3 --- /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 0000000000000000000000000000000000000000..3bcc46090467ab518687d7ca6a3af442b7632e71 --- /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 0000000000000000000000000000000000000000..edf9f92eedeeb481578554e33345cc13a6de5bde --- /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 0000000000000000000000000000000000000000..dbcfc0d566dd1a6a2983b55f37cdcdc3d6cc86d2 --- /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 0000000000000000000000000000000000000000..0d1370a58832ac38e421b9c3c596f347e1f4f83e --- /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" + } + ] +}