Skip to content

Commit

Permalink
Merge pull request #12 from leancloud/engine
Browse files Browse the repository at this point in the history
🩹 Compatibility Fix
  • Loading branch information
soasurs authored Jan 25, 2021
2 parents 7cebaa6 + f92629e commit fd5b6d2
Showing 1 changed file with 67 additions and 11 deletions.
78 changes: 67 additions & 11 deletions leancloud/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func corsHandler(w http.ResponseWriter, r *http.Request) {
}

func metadataHandler(w http.ResponseWriter, r *http.Request) {
if validateMasterKey(r) {
if !validateMasterKey(r) {
errorResponse(w, r, fmt.Errorf("Master Key check failed, request from %s", r.RemoteAddr))
return
}
Expand Down Expand Up @@ -235,7 +235,15 @@ func constructRequest(r *http.Request, name string, rpc bool) (*FunctionRequest,
request.Meta = map[string]string{
"remoteAddr": r.RemoteAddr,
}
sessionToken := r.Header.Get("X-LC-Session")
var sessionToken string
if r.Header.Get("X-LC-Session") != "" {
sessionToken = r.Header.Get("X-LC-Session")
} else if r.Header.Get("x-uluru-session-token") != "" {
sessionToken = r.Header.Get("x-uluru-session-token")
} else if r.Header.Get("x-avoscloud-session-token") != "" {
sessionToken = r.Header.Get("x-avoscloud-session-token")
}

if functions[name].defineOption["fetchUser"] == true && sessionToken != "" {
user, err := client.Users.Become(sessionToken)
if err != nil {
Expand Down Expand Up @@ -292,30 +300,71 @@ func generateMetadata() ([]byte, error) {
return json.Marshal(meta)
}

func validateAppID(r *http.Request) bool {
if r.Header.Get("X-LC-Id") != "" {
if os.Getenv("LEANCLOUD_APP_ID") != r.Header.Get("X-LC-Id") {
return false
}
} else if r.Header.Get("x-avoscloud-application-id") != "" {
if os.Getenv("LEANCLOUD_APP_ID") != r.Header.Get("x-avoscloud-application-id") {
return false
}
} else if r.Header.Get("x-uluru-application-id") != "" {
if os.Getenv("LEANCLOUD_APP_ID") != r.Header.Get("x-uluru-application-id") {
return false
}
}

return true
}

func validateAppKey(r *http.Request) bool {
if os.Getenv("LEANCLOUD_APP_ID") != r.Header.Get("X-LC-Id") {
if !validateAppID(r) {
return false
}
if os.Getenv("LEANCLOUD_APP_KEY") != r.Header.Get("X-LC-Key") {
return false

if r.Header.Get("X-LC-Key") != "" {
if os.Getenv("LEANCLOUD_APP_KEY") != r.Header.Get("X-LC-Key") {
return false
}
} else if r.Header.Get("x-avoscloud-application-key") != "" {
if os.Getenv("LEANCLOUD_APP_ID") != r.Header.Get("x-avoscloud-application-key") {
return false
}
} else if r.Header.Get("x-uluru-application-key") != "" {
if os.Getenv("LEANCLOUD_APP_ID") != r.Header.Get("x-uluru-application-key") {
return false
}
}
return true
}

func validateMasterKey(r *http.Request) bool {
if os.Getenv("LEANCLOUD_APP_ID") != r.Header.Get("X-LC-Id") {
if !validateAppID(r) {
return false
}
if strings.TrimSuffix(r.Header.Get("X-LC-Key"), ",master") != os.Getenv("LEANCLOUD_APP_MASTER_KEY") {
return false

if r.Header.Get("X-LC-Key") != "" {
if strings.TrimSuffix(r.Header.Get("X-LC-Key"), ",master") != os.Getenv("LEANCLOUD_APP_MASTER_KEY") {
return false
}
} else if r.Header.Get("x-avoscloud-master-key") != "" {
if r.Header.Get("x-avoscloud-master-key") != os.Getenv("LEANCLOUD_APP_MASTER_KEY") {
return false
}
} else if r.Header.Get("x-uluru-master-key") != "" {
if r.Header.Get("x-uluru-master-key") != os.Getenv("LEANCLOUD_APP_MASTER_KEY") {
return false
}
}
return true
}

func validateHookKey(r *http.Request) bool {
if os.Getenv("LEANCLOUD_APP_ID") != r.Header.Get("X-LC-Id") {
if !validateAppID(r) {
return false
}

if os.Getenv("LEANCLOUD_APP_HOOK_KEY") != r.Header.Get("X-LC-Hook-Key") {
return false
}
Expand All @@ -324,10 +373,17 @@ func validateHookKey(r *http.Request) bool {

func validateSignature(r *http.Request) (bool, bool) {
var master, pass bool
if os.Getenv("LEANCLOUD_APP_ID") != r.Header.Get("X-LC-Id") {
if !validateAppID(r) {
return master, pass
}
sign := r.Header.Get("X-LC-Sign")

var sign string
if r.Header.Get("X-LC-Sign") != "" {
sign = r.Header.Get("X-LC-Sign")
} else if r.Header.Get("x-avoscloud-request-sign") != "" {
sign = r.Header.Get("x-avoscloud-request-sign")
}

if sign == "" {
return master, pass
}
Expand Down

0 comments on commit fd5b6d2

Please sign in to comment.