From 4da7a566f73d07866dde5c26e5b97d40ec02a350 Mon Sep 17 00:00:00 2001 From: ErickSkrauch Date: Thu, 7 Jul 2016 13:10:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87?= =?UTF-8?q?=D0=B8=D0=BA=D0=B8=20=D0=B4=D0=BB=D1=8F=20Legacy=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/routes/Cape.go | 25 +++++++++++++++++++++++++ lib/routes/MinecraftPHP.go | 28 ++++++++++++++++++++++++++++ lib/routes/Skin.go | 11 +++++++++++ minecraft-skinsystem.go | 6 ++++++ 4 files changed, 70 insertions(+) create mode 100644 lib/routes/Cape.go create mode 100644 lib/routes/MinecraftPHP.go diff --git a/lib/routes/Cape.go b/lib/routes/Cape.go new file mode 100644 index 0000000..ff58a28 --- /dev/null +++ b/lib/routes/Cape.go @@ -0,0 +1,25 @@ +package routes + +import ( + "net/http" + + "github.com/gorilla/mux" + + "elyby/minecraft-skinsystem/lib/tools" +) + +func Cape(w http.ResponseWriter, r *http.Request) { + username := tools.ParseUsername(mux.Vars(r)["username"]) + http.Redirect(w, r, "http://skins.minecraft.net/MinecraftCloaks/" + username + ".png", 301) +} + +func CapeGET(w http.ResponseWriter, r *http.Request) { + username := r.URL.Query().Get("name") + if username == "" { + w.WriteHeader(http.StatusBadRequest) + return + } + + mux.Vars(r)["username"] = username + Cape(w, r) +} diff --git a/lib/routes/MinecraftPHP.go b/lib/routes/MinecraftPHP.go new file mode 100644 index 0000000..3457662 --- /dev/null +++ b/lib/routes/MinecraftPHP.go @@ -0,0 +1,28 @@ +package routes + +import ( + "net/http" + + "github.com/gorilla/mux" +) + +// Метод-наследие от первой версии системы скинов. +// Всё ещё иногда используется +// Просто конвертируем данные и отправляем их в основной обработчик +func MinecraftPHP(w http.ResponseWriter, r *http.Request) { + username := r.URL.Query().Get("name") + required := r.URL.Query().Get("type") + if username == "" || required == "" { + w.WriteHeader(http.StatusBadRequest) + return + } + + mux.Vars(r)["username"] = username + switch required { + case "skin": Skin(w, r) + case "cloack": Cape(w, r) + default: { + w.WriteHeader(http.StatusNotFound) + } + } +} diff --git a/lib/routes/Skin.go b/lib/routes/Skin.go index 161ea8f..9fed97d 100644 --- a/lib/routes/Skin.go +++ b/lib/routes/Skin.go @@ -22,3 +22,14 @@ func Skin(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, rec.Url, 301); } + +func SkinGET(w http.ResponseWriter, r *http.Request) { + username := r.URL.Query().Get("name") + if username == "" { + w.WriteHeader(http.StatusBadRequest) + return + } + + mux.Vars(r)["username"] = username + Skin(w, r) +} diff --git a/minecraft-skinsystem.go b/minecraft-skinsystem.go index c4ac5e0..0090ff5 100644 --- a/minecraft-skinsystem.go +++ b/minecraft-skinsystem.go @@ -23,7 +23,13 @@ func main() { router := mux.NewRouter().StrictSlash(true) router.HandleFunc("/", routes.NotFound) router.HandleFunc("/skins/{username}", routes.Skin).Methods("GET").Name("skins") + router.HandleFunc("/cloaks/{username}", routes.Cape).Methods("GET").Name("cloaks") router.HandleFunc("/textures/{username}", routes.Textures).Methods("GET").Name("textures") + // Legacy + router.HandleFunc("/minecraft.php", routes.MinecraftPHP).Methods("GET") + router.HandleFunc("/skins/", routes.SkinGET).Methods("GET") + router.HandleFunc("/cloaks/", routes.CapeGET).Methods("GET") + // TODO: убрать этого, т.к. он стар router.HandleFunc("/system/setSkin", routes.SetSkin).Methods("POST")