mirror of
https://github.com/goharbor/harbor
synced 2025-04-07 21:30:15 +00:00
update file names, remove tests folder
This commit is contained in:
parent
38d6d50e23
commit
a462f118f1
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,8 +1,5 @@
|
||||||
harbor
|
harbor
|
||||||
my_start.sh
|
|
||||||
Deploy/config/registry/config.yml
|
Deploy/config/registry/config.yml
|
||||||
Deploy/config/ui/env
|
Deploy/config/ui/env
|
||||||
Deploy/config/ui/app.conf
|
Deploy/config/ui/app.conf
|
||||||
Deploy/config/db/env
|
Deploy/config/db/env
|
||||||
Deploy/prepare.my
|
|
||||||
Deploy/harbor.cfg.my
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
|
||||||
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 models
|
|
||||||
|
|
||||||
// ProjectRole holds information about the relationship of project and role.
|
|
||||||
type ProjectRole struct {
|
|
||||||
PrID int `orm:"column(pr_id)" json:"PrId"`
|
|
||||||
ProjectID int64 `orm:"column(project_id)" json:"ProjectId"`
|
|
||||||
RoleID int `orm:"column(role_id)" json:"RoleId"`
|
|
||||||
}
|
|
|
@ -15,7 +15,31 @@
|
||||||
|
|
||||||
package models
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
// Repo holds information about repositories.
|
// Repo holds information about repositories.
|
||||||
type Repo struct {
|
type Repo struct {
|
||||||
Repositories []string `json:"repositories"`
|
Repositories []string `json:"repositories"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RepoItem holds manifest of an image.
|
||||||
|
type RepoItem struct {
|
||||||
|
ID string `json:"Id"`
|
||||||
|
Parent string `json:"Parent"`
|
||||||
|
Created time.Time `json:"Created"`
|
||||||
|
CreatedStr string `json:"CreatedStr"`
|
||||||
|
DurationDays string `json:"Duration Days"`
|
||||||
|
Author string `json:"Author"`
|
||||||
|
Architecture string `json:"Architecture"`
|
||||||
|
DockerVersion string `json:"Docker Version"`
|
||||||
|
Os string `json:"OS"`
|
||||||
|
//Size int `json:"Size"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tag holds information about a tag.
|
||||||
|
type Tag struct {
|
||||||
|
Version string `json:"version"`
|
||||||
|
ImageID string `json:"image_id"`
|
||||||
|
}
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
|
||||||
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 models
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RepoItem holds manifest of an image.
|
|
||||||
type RepoItem struct {
|
|
||||||
ID string `json:"Id"`
|
|
||||||
Parent string `json:"Parent"`
|
|
||||||
Created time.Time `json:"Created"`
|
|
||||||
CreatedStr string `json:"CreatedStr"`
|
|
||||||
DurationDays string `json:"Duration Days"`
|
|
||||||
Author string `json:"Author"`
|
|
||||||
Architecture string `json:"Architecture"`
|
|
||||||
DockerVersion string `json:"Docker Version"`
|
|
||||||
Os string `json:"OS"`
|
|
||||||
//Size int `json:"Size"`
|
|
||||||
}
|
|
|
@ -32,3 +32,17 @@ type Role struct {
|
||||||
RoleCode string `json:"role_code" orm:"column(role_code)"`
|
RoleCode string `json:"role_code" orm:"column(role_code)"`
|
||||||
Name string `json:"role_name" orm:"column(name)"`
|
Name string `json:"role_name" orm:"column(name)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ProjectRole holds information about the relationship of project and role.
|
||||||
|
type ProjectRole struct {
|
||||||
|
PrID int `orm:"column(pr_id)" json:"PrId"`
|
||||||
|
ProjectID int64 `orm:"column(project_id)" json:"ProjectId"`
|
||||||
|
RoleID int `orm:"column(role_id)" json:"RoleId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserProjectRole holds information about relationship of user, project and role.
|
||||||
|
type UserProjectRole struct {
|
||||||
|
UprID int `orm:"column(upr_id)" json:"UprId"`
|
||||||
|
UserID int `orm:"column(user_id)" json:"UserId"`
|
||||||
|
PrID int64 `orm:"column(pr_id)" json:"PrId"`
|
||||||
|
}
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
|
||||||
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 models
|
|
||||||
|
|
||||||
// Tag holds information about a tag.
|
|
||||||
type Tag struct {
|
|
||||||
Version string `json:"version"`
|
|
||||||
ImageID string `json:"image_id"`
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
|
||||||
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 models
|
|
||||||
|
|
||||||
// UserProjectRole holds information about relationship of user, project and role.
|
|
||||||
type UserProjectRole struct {
|
|
||||||
UprID int `orm:"column(upr_id)" json:"UprId"`
|
|
||||||
UserID int `orm:"column(user_id)" json:"UserId"`
|
|
||||||
PrID int64 `orm:"column(pr_id)" json:"PrId"`
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
##dummy##
|
|
|
@ -1,16 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
|
||||||
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 test
|
|
|
@ -1,147 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
|
||||||
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 utils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"crypto/tls"
|
|
||||||
"encoding/json"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/astaxie/beego"
|
|
||||||
)
|
|
||||||
|
|
||||||
const sessionCookie = "beegosessionID"
|
|
||||||
|
|
||||||
// BuildRegistryURL builds the URL of registry
|
|
||||||
func BuildRegistryURL(segments ...string) string {
|
|
||||||
registryURL := os.Getenv("REGISTRY_URL")
|
|
||||||
if registryURL == "" {
|
|
||||||
registryURL = "http://localhost:5000"
|
|
||||||
}
|
|
||||||
url := registryURL + "/v2"
|
|
||||||
for _, s := range segments {
|
|
||||||
if s == "v2" {
|
|
||||||
beego.Error("Unnecessary v2 in", segments)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
url += "/" + s
|
|
||||||
}
|
|
||||||
return url
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTPGet is used to call the API of registry. If a token is needed, it will get a token first.
|
|
||||||
func HTTPGet(URL, sessionID, username, password string) ([]byte, error) {
|
|
||||||
response, err := http.Get(URL)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
result, err := ioutil.ReadAll(response.Body)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
defer response.Body.Close()
|
|
||||||
if response.StatusCode == http.StatusOK {
|
|
||||||
return result, nil
|
|
||||||
} else if response.StatusCode == http.StatusUnauthorized {
|
|
||||||
authenticate := response.Header.Get("WWW-Authenticate")
|
|
||||||
str := strings.Split(authenticate, " ")[1]
|
|
||||||
beego.Trace("url: " + URL)
|
|
||||||
beego.Trace("Authentication Header: " + str)
|
|
||||||
var realm string
|
|
||||||
var service string
|
|
||||||
var scope string
|
|
||||||
strs := strings.Split(str, ",")
|
|
||||||
for _, s := range strs {
|
|
||||||
if strings.Contains(s, "realm") {
|
|
||||||
realm = s
|
|
||||||
} else if strings.Contains(s, "service") {
|
|
||||||
service = s
|
|
||||||
} else if strings.Contains(s, "scope") {
|
|
||||||
strings.HasSuffix(URL, "v2/_catalog")
|
|
||||||
scope = s
|
|
||||||
}
|
|
||||||
}
|
|
||||||
realm = strings.Split(realm, "\"")[1]
|
|
||||||
service = strings.Split(service, "\"")[1]
|
|
||||||
scope = strings.Split(scope, "\"")[1]
|
|
||||||
|
|
||||||
authURL := realm + "?service=" + service + "&scope=" + scope
|
|
||||||
//skip certificate check if token service is https.
|
|
||||||
tr := &http.Transport{
|
|
||||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
|
||||||
}
|
|
||||||
client := &http.Client{Transport: tr}
|
|
||||||
request, err := http.NewRequest("GET", authURL, nil)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if len(sessionID) > 0 {
|
|
||||||
cookie := &http.Cookie{Name: sessionCookie, Value: sessionID, Path: "/"}
|
|
||||||
request.AddCookie(cookie)
|
|
||||||
} else {
|
|
||||||
request.SetBasicAuth(username, password)
|
|
||||||
}
|
|
||||||
response, err = client.Do(request)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
result, err = ioutil.ReadAll(response.Body)
|
|
||||||
|
|
||||||
defer response.Body.Close()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if response.StatusCode == http.StatusOK {
|
|
||||||
tt := make(map[string]string)
|
|
||||||
json.Unmarshal(result, &tt)
|
|
||||||
request, err = http.NewRequest("GET", URL, nil)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
request.Header.Add("Authorization", "Bearer "+tt["token"])
|
|
||||||
client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
|
|
||||||
if len(via) >= 10 {
|
|
||||||
return fmt.Errorf("too many redirects")
|
|
||||||
}
|
|
||||||
for k, v := range via[0].Header {
|
|
||||||
if _, ok := req.Header[k]; !ok {
|
|
||||||
req.Header[k] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
response, err = client.Do(request)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
result, err = ioutil.ReadAll(response.Body)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
defer response.Body.Close()
|
|
||||||
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
return nil, errors.New(string(result))
|
|
||||||
} else {
|
|
||||||
return nil, errors.New(string(result))
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user