blob: 3130edddd92cfc139fd759f67b6298d4e16a59d6 [file] [log] [blame]
//Copyright 2017 Huawei Technologies Co., Ltd
//
//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
package helper
import (
"errors"
"fmt"
"github.com/ServiceComb/service-center/server/core"
"github.com/ServiceComb/service-center/util"
"golang.org/x/net/context"
"net/http"
"strings"
)
const (
DEFAULT_PROJECT = "default"
)
var NO_CHEACK_URL = map[string]bool{"/version": true, "/health": true}
func GetTenantProjectFromHeader(r *http.Request) (string, string, error) {
var domain, project string
domain = r.Header.Get("X-Tenant-Name")
if len(domain) == 0 {
domain = r.Header.Get("x-domain-name")
if len(domain) == 0 {
if _, ok := NO_CHEACK_URL[r.RequestURI]; ok {
return core.REGISTRY_TENANT, core.REGISTRY_PROJECT, nil
}
util.LOGGER.Errorf(nil, "%s does not contain domain.", r.RequestURI)
return "", "", errors.New(fmt.Sprintf("Header does not contain tenant.Invalid Request URI %s", r.RequestURI))
}
}
project = r.Header.Get("X-Project-Name")
if len(project) == 0 {
project = DEFAULT_PROJECT
}
return domain, project, nil
}
func GetRealIP(r *http.Request) string {
addrs := strings.Split(r.RemoteAddr, ":")
if len(addrs) > 0 {
return addrs[0]
}
return ""
}
func addIPToContext(r *http.Request) {
terminalIP := GetRealIP(r)
ctx := r.Context()
ctx = context.WithValue(ctx, "x-remote-ip", terminalIP)
request := r.WithContext(ctx)
*r = *request
}
func InitContext(r *http.Request) {
addIPToContext(r)
}