mirror of
https://github.com/elyby/chrly.git
synced 2025-05-31 14:11:51 +05:30
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7734f2cbd5 | ||
|
|
55b8c12955 | ||
|
|
10ff6f34fb | ||
|
|
31cd75ffa7 |
27
http/face.go
Normal file
27
http/face.go
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package http
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
)
|
||||||
|
|
||||||
|
const defaultHash = "default"
|
||||||
|
|
||||||
|
func (cfg *Config) Face(response http.ResponseWriter, request *http.Request) {
|
||||||
|
cfg.Logger.IncCounter("faces.request", 1)
|
||||||
|
username := parseUsername(mux.Vars(request)["username"])
|
||||||
|
rec, err := cfg.SkinsRepo.FindByUsername(username)
|
||||||
|
var hash string
|
||||||
|
if err != nil || rec.SkinId == 0 {
|
||||||
|
hash = defaultHash
|
||||||
|
} else {
|
||||||
|
hash = rec.Hash
|
||||||
|
}
|
||||||
|
|
||||||
|
http.Redirect(response, request, buildFaceUrl(hash), 301)
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildFaceUrl(hash string) string {
|
||||||
|
return "http://ely.by/minecraft/skin_buffer/faces/" + hash + ".png"
|
||||||
|
}
|
||||||
53
http/face_test.go
Normal file
53
http/face_test.go
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
package http
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http/httptest"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/golang/mock/gomock"
|
||||||
|
testify "github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
"github.com/elyby/chrly/db"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConfig_Face(t *testing.T) {
|
||||||
|
assert := testify.New(t)
|
||||||
|
|
||||||
|
ctrl := gomock.NewController(t)
|
||||||
|
defer ctrl.Finish()
|
||||||
|
|
||||||
|
config, mocks := setupMocks(ctrl)
|
||||||
|
|
||||||
|
mocks.Skins.EXPECT().FindByUsername("mock_user").Return(createSkinModel("mock_user", false), nil)
|
||||||
|
mocks.Log.EXPECT().IncCounter("faces.request", int64(1))
|
||||||
|
|
||||||
|
req := httptest.NewRequest("GET", "http://skinsystem.ely.by/skins/mock_user/face.png", nil)
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
|
config.CreateHandler().ServeHTTP(w, req)
|
||||||
|
|
||||||
|
resp := w.Result()
|
||||||
|
assert.Equal(301, resp.StatusCode)
|
||||||
|
assert.Equal("http://ely.by/minecraft/skin_buffer/faces/55d2a8848764f5ff04012cdb093458bd.png", resp.Header.Get("Location"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestConfig_Face2(t *testing.T) {
|
||||||
|
assert := testify.New(t)
|
||||||
|
|
||||||
|
ctrl := gomock.NewController(t)
|
||||||
|
defer ctrl.Finish()
|
||||||
|
|
||||||
|
config, mocks := setupMocks(ctrl)
|
||||||
|
|
||||||
|
mocks.Skins.EXPECT().FindByUsername("mock_user").Return(nil, &db.SkinNotFoundError{"mock_user"})
|
||||||
|
mocks.Log.EXPECT().IncCounter("faces.request", int64(1))
|
||||||
|
|
||||||
|
req := httptest.NewRequest("GET", "http://skinsystem.ely.by/skins/mock_user/face.png", nil)
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
|
config.CreateHandler().ServeHTTP(w, req)
|
||||||
|
|
||||||
|
resp := w.Result()
|
||||||
|
assert.Equal(301, resp.StatusCode)
|
||||||
|
assert.Equal("http://ely.by/minecraft/skin_buffer/faces/default.png", resp.Header.Get("Location"))
|
||||||
|
}
|
||||||
@@ -55,6 +55,8 @@ func (cfg *Config) CreateHandler() http.Handler {
|
|||||||
router.HandleFunc("/cloaks/{username}", cfg.Cape).Methods("GET").Name("cloaks")
|
router.HandleFunc("/cloaks/{username}", cfg.Cape).Methods("GET").Name("cloaks")
|
||||||
router.HandleFunc("/textures/{username}", cfg.Textures).Methods("GET")
|
router.HandleFunc("/textures/{username}", cfg.Textures).Methods("GET")
|
||||||
router.HandleFunc("/textures/signed/{username}", cfg.SignedTextures).Methods("GET")
|
router.HandleFunc("/textures/signed/{username}", cfg.SignedTextures).Methods("GET")
|
||||||
|
router.HandleFunc("/skins/{username}/face", cfg.Face).Methods("GET")
|
||||||
|
router.HandleFunc("/skins/{username}/face.png", cfg.Face).Methods("GET")
|
||||||
// Legacy
|
// Legacy
|
||||||
router.HandleFunc("/skins", cfg.SkinGET).Methods("GET")
|
router.HandleFunc("/skins", cfg.SkinGET).Methods("GET")
|
||||||
router.HandleFunc("/cloaks", cfg.CapeGET).Methods("GET")
|
router.HandleFunc("/cloaks", cfg.CapeGET).Methods("GET")
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ func (cfg *Config) NotFound(response http.ResponseWriter, request *http.Request)
|
|||||||
data, _ := json.Marshal(map[string]string{
|
data, _ := json.Marshal(map[string]string{
|
||||||
"status": "404",
|
"status": "404",
|
||||||
"message": "Not Found",
|
"message": "Not Found",
|
||||||
|
"link": "http://docs.ely.by/skin-system.html",
|
||||||
})
|
})
|
||||||
|
|
||||||
response.Header().Set("Content-Type", "application/json")
|
response.Header().Set("Content-Type", "application/json")
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ func TestConfig_NotFound(t *testing.T) {
|
|||||||
response, _ := ioutil.ReadAll(resp.Body)
|
response, _ := ioutil.ReadAll(resp.Body)
|
||||||
assert.JSONEq(`{
|
assert.JSONEq(`{
|
||||||
"status": "404",
|
"status": "404",
|
||||||
"message": "Not Found"
|
"message": "Not Found",
|
||||||
|
"link": "http://docs.ely.by/skin-system.html"
|
||||||
}`, string(response))
|
}`, string(response))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ func (cfg *Config) SignedTextures(response http.ResponseWriter, request *http.Re
|
|||||||
Value: rec.MojangTextures,
|
Value: rec.MojangTextures,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "chrly",
|
Name: "ely",
|
||||||
Value: "how do you tame a horse in Minecraft?",
|
Value: "but why are you asking?",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ func TestConfig_SignedTextures(t *testing.T) {
|
|||||||
"value": "mocked textures base64"
|
"value": "mocked textures base64"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "chrly",
|
"name": "ely",
|
||||||
"value": "how do you tame a horse in Minecraft?"
|
"value": "but why are you asking?"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}`, string(response))
|
}`, string(response))
|
||||||
|
|||||||
Reference in New Issue
Block a user