2019-03-24 14:57:29 +01:00
|
|
|
package serv
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"net/http"
|
2019-04-10 07:38:48 +02:00
|
|
|
"strings"
|
2019-03-24 14:57:29 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
2019-10-25 06:01:22 +02:00
|
|
|
userIDProviderKey = "user_id_provider"
|
|
|
|
userIDKey = "user_id"
|
|
|
|
userRoleKey = "user_role"
|
2019-03-24 14:57:29 +01:00
|
|
|
)
|
|
|
|
|
2019-10-24 08:07:42 +02:00
|
|
|
func headerAuth(next http.HandlerFunc) http.HandlerFunc {
|
|
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
ctx := r.Context()
|
2019-03-24 14:57:29 +01:00
|
|
|
|
2019-10-24 08:07:42 +02:00
|
|
|
userIDProvider := r.Header.Get("X-User-ID-Provider")
|
|
|
|
if len(userIDProvider) != 0 {
|
|
|
|
ctx = context.WithValue(ctx, userIDProviderKey, userIDProvider)
|
|
|
|
}
|
|
|
|
|
|
|
|
userID := r.Header.Get("X-User-ID")
|
|
|
|
if len(userID) != 0 {
|
|
|
|
ctx = context.WithValue(ctx, userIDKey, userID)
|
|
|
|
}
|
2019-04-10 07:38:48 +02:00
|
|
|
|
2019-10-24 08:07:42 +02:00
|
|
|
userRole := r.Header.Get("X-User-Role")
|
|
|
|
if len(userRole) != 0 {
|
|
|
|
ctx = context.WithValue(ctx, userRoleKey, userRole)
|
|
|
|
}
|
|
|
|
|
|
|
|
next.ServeHTTP(w, r.WithContext(ctx))
|
|
|
|
}
|
2019-03-24 14:57:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func withAuth(next http.HandlerFunc) http.HandlerFunc {
|
2019-04-08 08:47:59 +02:00
|
|
|
at := conf.Auth.Type
|
2019-04-10 07:38:48 +02:00
|
|
|
ru := conf.Auth.Rails.URL
|
2019-03-24 14:57:29 +01:00
|
|
|
|
2019-10-24 08:07:42 +02:00
|
|
|
if conf.Auth.CredsInHeader {
|
|
|
|
next = headerAuth(next)
|
|
|
|
}
|
|
|
|
|
2019-04-08 08:47:59 +02:00
|
|
|
switch at {
|
2019-04-10 07:38:48 +02:00
|
|
|
case "rails":
|
|
|
|
if strings.HasPrefix(ru, "memcache:") {
|
|
|
|
return railsMemcacheHandler(next)
|
|
|
|
}
|
2019-03-24 14:57:29 +01:00
|
|
|
|
2019-04-10 07:38:48 +02:00
|
|
|
if strings.HasPrefix(ru, "redis:") {
|
|
|
|
return railsRedisHandler(next)
|
|
|
|
}
|
2019-03-24 14:57:29 +01:00
|
|
|
|
2019-04-10 07:38:48 +02:00
|
|
|
return railsCookieHandler(next)
|
2019-03-24 14:57:29 +01:00
|
|
|
|
|
|
|
case "jwt":
|
|
|
|
return jwtHandler(next)
|
|
|
|
}
|
|
|
|
|
|
|
|
return next
|
|
|
|
}
|