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