blob: c3a2d230751ff73d0b67c081c78ad619649a1a00 [file] [log] [blame]
// Copyright Istio Authors.
//
// 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 multixds
import (
"fmt"
"net/url"
"strings"
)
func isMCPAddr(u *url.URL) bool {
return strings.HasSuffix(u.Host, ".googleapis.com") || strings.HasSuffix(u.Host, ".googleapis.com:443")
}
func parseMCPAddr(u *url.URL) (*xdsAddr, error) {
ret := &xdsAddr{host: u.Host}
if !strings.HasSuffix(ret.host, ":443") {
ret.host += ":443"
}
const projSeg = "/projects/"
i := strings.Index(u.Path, projSeg)
if i == -1 {
return nil, fmt.Errorf("webhook URL %s doesn't contain the projects segment", u)
}
i += len(projSeg)
j := strings.IndexByte(u.Path[i:], '/')
if j == -1 {
return nil, fmt.Errorf("webhook URL %s is malformed", u)
}
ret.gcpProject = u.Path[i : i+j]
const crSeg = "/ISTIO_META_CLOUDRUN_ADDR/"
i += j
j = strings.Index(u.Path[i:], crSeg)
if j == -1 {
return nil, fmt.Errorf("webhook URL %s is missing %s", u, crSeg)
}
ret.istiod = u.Path[i+j+len(crSeg):]
return ret, nil
}