mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-28 21:25:55 +01:00
delete owner_id column from table repository
This commit is contained in:
parent
eb39fbf814
commit
4f9d9ed5d8
@ -116,7 +116,6 @@ create table repository (
|
|||||||
repository_id int NOT NULL AUTO_INCREMENT,
|
repository_id int NOT NULL AUTO_INCREMENT,
|
||||||
name varchar(255) NOT NULL,
|
name varchar(255) NOT NULL,
|
||||||
project_id int NOT NULL,
|
project_id int NOT NULL,
|
||||||
owner_id int NOT NULL,
|
|
||||||
description text,
|
description text,
|
||||||
pull_count int DEFAULT 0 NOT NULL,
|
pull_count int DEFAULT 0 NOT NULL,
|
||||||
star_count int DEFAULT 0 NOT NULL,
|
star_count int DEFAULT 0 NOT NULL,
|
||||||
|
@ -113,13 +113,11 @@ create table repository (
|
|||||||
repository_id INTEGER PRIMARY KEY,
|
repository_id INTEGER PRIMARY KEY,
|
||||||
name varchar(255) NOT NULL,
|
name varchar(255) NOT NULL,
|
||||||
project_id int NOT NULL,
|
project_id int NOT NULL,
|
||||||
owner_id int NOT NULL,
|
|
||||||
description text,
|
description text,
|
||||||
pull_count int DEFAULT 0 NOT NULL,
|
pull_count int DEFAULT 0 NOT NULL,
|
||||||
star_count int DEFAULT 0 NOT NULL,
|
star_count int DEFAULT 0 NOT NULL,
|
||||||
creation_time timestamp default CURRENT_TIMESTAMP,
|
creation_time timestamp default CURRENT_TIMESTAMP,
|
||||||
update_time timestamp default CURRENT_TIMESTAMP,
|
update_time timestamp default CURRENT_TIMESTAMP,
|
||||||
FOREIGN KEY (owner_id) REFERENCES user(user_id),
|
|
||||||
FOREIGN KEY (project_id) REFERENCES project(project_id),
|
FOREIGN KEY (project_id) REFERENCES project(project_id),
|
||||||
UNIQUE (name)
|
UNIQUE (name)
|
||||||
);
|
);
|
||||||
|
@ -215,24 +215,6 @@ func GetRecentLogs(userID, linesNum int, startTime, endTime string) ([]models.Ac
|
|||||||
return logs, nil
|
return logs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAccessLogCreator ...
|
|
||||||
func GetAccessLogCreator(repoName string) (string, error) {
|
|
||||||
o := GetOrmer()
|
|
||||||
sql := "select * from user where user_id = (select user_id from access_log where operation = 'push' and repo_name = ? order by op_time desc limit 1)"
|
|
||||||
|
|
||||||
var u []models.User
|
|
||||||
n, err := o.Raw(sql, repoName).QueryRows(&u)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
if n == 0 {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return u[0].Username, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// CountPull ...
|
// CountPull ...
|
||||||
func CountPull(repoName string) (int64, error) {
|
func CountPull(repoName string) (int64, error) {
|
||||||
o := GetOrmer()
|
o := GetOrmer()
|
||||||
|
@ -192,7 +192,7 @@ func testForMySQL(m *testing.M) int {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("MYSQL_HOST: %s, MYSQL_USR: %s, MYSQL_PORT: %s, MYSQL_PWD: %s\n", dbHost, dbUser, dbPort, dbPassword)
|
log.Infof("MYSQL_HOST: %s, MYSQL_USR: %s, MYSQL_PORT: %d, MYSQL_PWD: %s\n", dbHost, dbUser, dbPort, dbPassword)
|
||||||
|
|
||||||
return testForAll(m, database)
|
return testForAll(m, database)
|
||||||
}
|
}
|
||||||
@ -650,26 +650,6 @@ func TestAccessLog(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetAccessLogCreator(t *testing.T) {
|
|
||||||
var err error
|
|
||||||
err = AccessLog(currentUser.Username, currentProject.Name, currentProject.Name+"/tomcat", repoTag2, "push")
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("Error occurred in AccessLog: %v", err)
|
|
||||||
}
|
|
||||||
err = AccessLog(currentUser.Username, currentProject.Name, currentProject.Name+"/tomcat", repoTag2, "push")
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("Error occurred in AccessLog: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
user, err := GetAccessLogCreator(currentProject.Name + "/tomcat")
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("Error occurred in GetAccessLogCreator: %v", err)
|
|
||||||
}
|
|
||||||
if user != currentUser.Username {
|
|
||||||
t.Errorf("The access log creator does not match, expected: %s, actual: %s", currentUser.Username, user)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCountPull(t *testing.T) {
|
func TestCountPull(t *testing.T) {
|
||||||
var err error
|
var err error
|
||||||
err = AccessLog(currentUser.Username, currentProject.Name, currentProject.Name+"/tomcat", repoTag2, "pull")
|
err = AccessLog(currentUser.Username, currentProject.Name, currentProject.Name+"/tomcat", repoTag2, "pull")
|
||||||
@ -1595,8 +1575,7 @@ func TestGetOrmer(t *testing.T) {
|
|||||||
func TestAddRepository(t *testing.T) {
|
func TestAddRepository(t *testing.T) {
|
||||||
repoRecord := models.RepoRecord{
|
repoRecord := models.RepoRecord{
|
||||||
Name: currentProject.Name + "/" + repositoryName,
|
Name: currentProject.Name + "/" + repositoryName,
|
||||||
OwnerName: currentUser.Username,
|
ProjectID: currentProject.ProjectID,
|
||||||
ProjectName: currentProject.Name,
|
|
||||||
Description: "testing repo",
|
Description: "testing repo",
|
||||||
PullCount: 0,
|
PullCount: 0,
|
||||||
StarCount: 0,
|
StarCount: 0,
|
||||||
|
@ -24,13 +24,15 @@ import (
|
|||||||
|
|
||||||
// AddRepository adds a repo to the database.
|
// AddRepository adds a repo to the database.
|
||||||
func AddRepository(repo models.RepoRecord) error {
|
func AddRepository(repo models.RepoRecord) error {
|
||||||
o := GetOrmer()
|
if repo.ProjectID == 0 {
|
||||||
sql := "insert into repository (owner_id, project_id, name, description, pull_count, star_count, creation_time, update_time) " +
|
return fmt.Errorf("invalid project ID: %d", repo.ProjectID)
|
||||||
"select (select user_id as owner_id from user where username=?), " +
|
}
|
||||||
"(select project_id as project_id from project where name=?), ?, ?, ?, ?, ?, NULL "
|
|
||||||
|
|
||||||
_, err := o.Raw(sql, repo.OwnerName, repo.ProjectName, repo.Name, repo.Description,
|
o := GetOrmer()
|
||||||
repo.PullCount, repo.StarCount, time.Now()).Exec()
|
now := time.Now()
|
||||||
|
repo.CreationTime = now
|
||||||
|
repo.UpdateTime = now
|
||||||
|
_, err := o.Insert(&repo)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,7 +106,7 @@ func GetRepositoryByProjectName(name string) ([]*models.RepoRecord, error) {
|
|||||||
//GetTopRepos returns the most popular repositories
|
//GetTopRepos returns the most popular repositories
|
||||||
func GetTopRepos(userID int, count int) ([]*models.RepoRecord, error) {
|
func GetTopRepos(userID int, count int) ([]*models.RepoRecord, error) {
|
||||||
sql :=
|
sql :=
|
||||||
`select r.repository_id, r.name, r.owner_id,
|
`select r.repository_id, r.name,
|
||||||
r.project_id, r.description, r.pull_count,
|
r.project_id, r.description, r.pull_count,
|
||||||
r.star_count, r.creation_time, r.update_time
|
r.star_count, r.creation_time, r.update_time
|
||||||
from repository r
|
from repository r
|
||||||
|
@ -27,9 +27,8 @@ var (
|
|||||||
project = "library"
|
project = "library"
|
||||||
name = "library/repository-test"
|
name = "library/repository-test"
|
||||||
repository = &models.RepoRecord{
|
repository = &models.RepoRecord{
|
||||||
Name: name,
|
Name: name,
|
||||||
OwnerName: "admin",
|
ProjectID: 1,
|
||||||
ProjectName: project,
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -214,9 +213,8 @@ func TestGetTopRepos(t *testing.T) {
|
|||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
|
||||||
repository1 := &models.RepoRecord{
|
repository1 := &models.RepoRecord{
|
||||||
Name: fmt.Sprintf("%v/repository1", project1.Name),
|
Name: fmt.Sprintf("%v/repository1", project1.Name),
|
||||||
OwnerName: admin.Username,
|
ProjectID: project1.ProjectID,
|
||||||
ProjectName: project1.Name,
|
|
||||||
}
|
}
|
||||||
err = AddRepository(*repository1)
|
err = AddRepository(*repository1)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
@ -225,9 +223,8 @@ func TestGetTopRepos(t *testing.T) {
|
|||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
|
||||||
repository2 := &models.RepoRecord{
|
repository2 := &models.RepoRecord{
|
||||||
Name: fmt.Sprintf("%v/repository2", project1.Name),
|
Name: fmt.Sprintf("%v/repository2", project1.Name),
|
||||||
OwnerName: admin.Username,
|
ProjectID: project1.ProjectID,
|
||||||
ProjectName: project1.Name,
|
|
||||||
}
|
}
|
||||||
err = AddRepository(*repository2)
|
err = AddRepository(*repository2)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
@ -237,9 +234,8 @@ func TestGetTopRepos(t *testing.T) {
|
|||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
|
||||||
repository3 := &models.RepoRecord{
|
repository3 := &models.RepoRecord{
|
||||||
Name: fmt.Sprintf("%v/repository3", project2.Name),
|
Name: fmt.Sprintf("%v/repository3", project2.Name),
|
||||||
OwnerName: admin.Username,
|
ProjectID: project2.ProjectID,
|
||||||
ProjectName: project2.Name,
|
|
||||||
}
|
}
|
||||||
err = AddRepository(*repository3)
|
err = AddRepository(*repository3)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
@ -259,9 +255,8 @@ func TestGetTopRepos(t *testing.T) {
|
|||||||
deletedPublicProject.ProjectID, err = AddProject(deletedPublicProject)
|
deletedPublicProject.ProjectID, err = AddProject(deletedPublicProject)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
deletedPublicRepository1 := &models.RepoRecord{
|
deletedPublicRepository1 := &models.RepoRecord{
|
||||||
Name: fmt.Sprintf("%v/repository1", deletedPublicProject.Name),
|
Name: fmt.Sprintf("%v/repository1", deletedPublicProject.Name),
|
||||||
OwnerName: admin.Username,
|
ProjectID: deletedPublicProject.ProjectID,
|
||||||
ProjectName: deletedPublicProject.Name,
|
|
||||||
}
|
}
|
||||||
err = AddRepository(*deletedPublicRepository1)
|
err = AddRepository(*deletedPublicRepository1)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
@ -303,9 +298,8 @@ func TestGetTotalOfRepositoriesByProject(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := addRepository(&models.RepoRecord{
|
if err := addRepository(&models.RepoRecord{
|
||||||
Name: repoName,
|
Name: repoName,
|
||||||
OwnerName: "admin",
|
ProjectID: projectID,
|
||||||
ProjectName: "library",
|
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
t.Errorf("failed to add repository %s: %v", repoName, err)
|
t.Errorf("failed to add repository %s: %v", repoName, err)
|
||||||
return
|
return
|
||||||
@ -333,9 +327,8 @@ func TestGetRepositoriesByProject(t *testing.T) {
|
|||||||
repoName := "library/repository"
|
repoName := "library/repository"
|
||||||
|
|
||||||
if err := addRepository(&models.RepoRecord{
|
if err := addRepository(&models.RepoRecord{
|
||||||
Name: repoName,
|
Name: repoName,
|
||||||
OwnerName: "admin",
|
ProjectID: projectID,
|
||||||
ProjectName: "library",
|
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
t.Errorf("failed to add repository %s: %v", repoName, err)
|
t.Errorf("failed to add repository %s: %v", repoName, err)
|
||||||
return
|
return
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
|
|
||||||
// AccessLog holds information about logs which are used to record the actions that user take to the resourses.
|
// AccessLog holds information about logs which are used to record the actions that user take to the resourses.
|
||||||
type AccessLog struct {
|
type AccessLog struct {
|
||||||
LogID int `orm:"pk;column(log_id)" json:"log_id"`
|
LogID int `orm:"pk;auto;column(log_id)" json:"log_id"`
|
||||||
UserID int `orm:"column(user_id)" json:"user_id"`
|
UserID int `orm:"column(user_id)" json:"user_id"`
|
||||||
ProjectID int64 `orm:"column(project_id)" json:"project_id"`
|
ProjectID int64 `orm:"column(project_id)" json:"project_id"`
|
||||||
RepoName string `orm:"column(repo_name)" json:"repo_name"`
|
RepoName string `orm:"column(repo_name)" json:"repo_name"`
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
|
|
||||||
// Project holds the details of a project.
|
// Project holds the details of a project.
|
||||||
type Project struct {
|
type Project struct {
|
||||||
ProjectID int64 `orm:"pk;column(project_id)" json:"project_id"`
|
ProjectID int64 `orm:"pk;auto;column(project_id)" json:"project_id"`
|
||||||
OwnerID int `orm:"column(owner_id)" json:"owner_id"`
|
OwnerID int `orm:"column(owner_id)" json:"owner_id"`
|
||||||
Name string `orm:"column(name)" json:"name"`
|
Name string `orm:"column(name)" json:"name"`
|
||||||
CreationTime time.Time `orm:"column(creation_time)" json:"creation_time"`
|
CreationTime time.Time `orm:"column(creation_time)" json:"creation_time"`
|
||||||
|
@ -48,7 +48,7 @@ const (
|
|||||||
|
|
||||||
// RepPolicy is the model for a replication policy, which associate to a project and a target (destination)
|
// RepPolicy is the model for a replication policy, which associate to a project and a target (destination)
|
||||||
type RepPolicy struct {
|
type RepPolicy struct {
|
||||||
ID int64 `orm:"column(id)" json:"id"`
|
ID int64 `orm:"pk;auto;column(id)" json:"id"`
|
||||||
ProjectID int64 `orm:"column(project_id)" json:"project_id"`
|
ProjectID int64 `orm:"column(project_id)" json:"project_id"`
|
||||||
ProjectName string `json:"project_name,omitempty"`
|
ProjectName string `json:"project_name,omitempty"`
|
||||||
TargetID int64 `orm:"column(target_id)" json:"target_id"`
|
TargetID int64 `orm:"column(target_id)" json:"target_id"`
|
||||||
@ -95,7 +95,7 @@ func (r *RepPolicy) Valid(v *validation.Validation) {
|
|||||||
// RepJob is the model for a replication job, which is the execution unit on job service, currently it is used to transfer/remove
|
// RepJob is the model for a replication job, which is the execution unit on job service, currently it is used to transfer/remove
|
||||||
// a repository to/from a remote registry instance.
|
// a repository to/from a remote registry instance.
|
||||||
type RepJob struct {
|
type RepJob struct {
|
||||||
ID int64 `orm:"column(id)" json:"id"`
|
ID int64 `orm:"pk;auto;column(id)" json:"id"`
|
||||||
Status string `orm:"column(status)" json:"status"`
|
Status string `orm:"column(status)" json:"status"`
|
||||||
Repository string `orm:"column(repository)" json:"repository"`
|
Repository string `orm:"column(repository)" json:"repository"`
|
||||||
PolicyID int64 `orm:"column(policy_id)" json:"policy_id"`
|
PolicyID int64 `orm:"column(policy_id)" json:"policy_id"`
|
||||||
@ -109,7 +109,7 @@ type RepJob struct {
|
|||||||
|
|
||||||
// RepTarget is the model for a replication targe, i.e. destination, which wraps the endpoint URL and username/password of a remote registry.
|
// RepTarget is the model for a replication targe, i.e. destination, which wraps the endpoint URL and username/password of a remote registry.
|
||||||
type RepTarget struct {
|
type RepTarget struct {
|
||||||
ID int64 `orm:"column(id)" json:"id"`
|
ID int64 `orm:"pk;auto;column(id)" json:"id"`
|
||||||
URL string `orm:"column(url)" json:"endpoint"`
|
URL string `orm:"column(url)" json:"endpoint"`
|
||||||
Name string `orm:"column(name)" json:"name"`
|
Name string `orm:"column(name)" json:"name"`
|
||||||
Username string `orm:"column(username)" json:"username"`
|
Username string `orm:"column(username)" json:"username"`
|
||||||
|
@ -20,11 +20,8 @@ import (
|
|||||||
|
|
||||||
// RepoRecord holds the record of an repository in DB, all the infors are from the registry notification event.
|
// RepoRecord holds the record of an repository in DB, all the infors are from the registry notification event.
|
||||||
type RepoRecord struct {
|
type RepoRecord struct {
|
||||||
RepositoryID string `orm:"column(repository_id);pk" json:"repository_id"`
|
RepositoryID int64 `orm:"pk;auto;column(repository_id)" json:"repository_id"`
|
||||||
Name string `orm:"column(name)" json:"name"`
|
Name string `orm:"column(name)" json:"name"`
|
||||||
OwnerName string `orm:"-"`
|
|
||||||
OwnerID int64 `orm:"column(owner_id)" json:"owner_id"`
|
|
||||||
ProjectName string `orm:"-"`
|
|
||||||
ProjectID int64 `orm:"column(project_id)" json:"project_id"`
|
ProjectID int64 `orm:"column(project_id)" json:"project_id"`
|
||||||
Description string `orm:"column(description)" json:"description"`
|
Description string `orm:"column(description)" json:"description"`
|
||||||
PullCount int64 `orm:"column(pull_count)" json:"pull_count"`
|
PullCount int64 `orm:"column(pull_count)" json:"pull_count"`
|
||||||
|
@ -25,7 +25,7 @@ const (
|
|||||||
|
|
||||||
// Role holds the details of a role.
|
// Role holds the details of a role.
|
||||||
type Role struct {
|
type Role struct {
|
||||||
RoleID int `orm:"pk;column(role_id)" json:"role_id"`
|
RoleID int `orm:"pk;auto;column(role_id)" json:"role_id"`
|
||||||
RoleCode string `orm:"column(role_code)" json:"role_code"`
|
RoleCode string `orm:"column(role_code)" json:"role_code"`
|
||||||
Name string `orm:"column(name)" json:"role_name"`
|
Name string `orm:"column(name)" json:"role_name"`
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
|
|
||||||
// User holds the details of a user.
|
// User holds the details of a user.
|
||||||
type User struct {
|
type User struct {
|
||||||
UserID int `orm:"pk;column(user_id)" json:"user_id"`
|
UserID int `orm:"pk;auto;column(user_id)" json:"user_id"`
|
||||||
Username string `orm:"column(username)" json:"username"`
|
Username string `orm:"column(username)" json:"username"`
|
||||||
Email string `orm:"column(email)" json:"email"`
|
Email string `orm:"column(email)" json:"email"`
|
||||||
Password string `orm:"column(password)" json:"password"`
|
Password string `orm:"column(password)" json:"password"`
|
||||||
|
@ -11,130 +11,127 @@
|
|||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/vmware/harbor/src/common/dao"
|
"github.com/vmware/harbor/src/common/dao"
|
||||||
"github.com/vmware/harbor/src/common/models"
|
"github.com/vmware/harbor/src/common/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
//Prepare Test info
|
//Prepare Test info
|
||||||
TestUserName = "testUser0001"
|
TestUserName = "testUser0001"
|
||||||
TestUserPwd = "testUser0001"
|
TestUserPwd = "testUser0001"
|
||||||
TestUserEmail = "testUser0001@mydomain.com"
|
TestUserEmail = "testUser0001@mydomain.com"
|
||||||
TestProName = "testProject0001"
|
TestProName = "testProject0001"
|
||||||
TestTargetName = "testTarget0001"
|
TestTargetName = "testTarget0001"
|
||||||
TestRepoName = "testRepo0001"
|
TestRepoName = "testRepo0001"
|
||||||
AdminName = "admin"
|
AdminName = "admin"
|
||||||
DefaultProjectName = "library"
|
DefaultProjectName = "library"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CommonAddUser() {
|
func CommonAddUser() {
|
||||||
|
|
||||||
commonUser := models.User{
|
commonUser := models.User{
|
||||||
Username: TestUserName,
|
Username: TestUserName,
|
||||||
Password: TestUserPwd,
|
Password: TestUserPwd,
|
||||||
Email: TestUserEmail,
|
Email: TestUserEmail,
|
||||||
}
|
}
|
||||||
|
|
||||||
_, _ = dao.Register(commonUser)
|
_, _ = dao.Register(commonUser)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommonGetUserID() int {
|
func CommonGetUserID() int {
|
||||||
queryUser := &models.User{
|
queryUser := &models.User{
|
||||||
Username: TestUserName,
|
Username: TestUserName,
|
||||||
}
|
}
|
||||||
commonUser, _ := dao.GetUser(*queryUser)
|
commonUser, _ := dao.GetUser(*queryUser)
|
||||||
return commonUser.UserID
|
return commonUser.UserID
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommonDelUser() {
|
func CommonDelUser() {
|
||||||
queryUser := &models.User{
|
queryUser := &models.User{
|
||||||
Username: TestUserName,
|
Username: TestUserName,
|
||||||
}
|
}
|
||||||
commonUser, _ := dao.GetUser(*queryUser)
|
commonUser, _ := dao.GetUser(*queryUser)
|
||||||
_ = dao.DeleteUser(commonUser.UserID)
|
_ = dao.DeleteUser(commonUser.UserID)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommonAddProject() {
|
func CommonAddProject() {
|
||||||
|
|
||||||
queryUser := &models.User{
|
queryUser := &models.User{
|
||||||
Username: "admin",
|
Username: "admin",
|
||||||
}
|
}
|
||||||
adminUser, _ := dao.GetUser(*queryUser)
|
adminUser, _ := dao.GetUser(*queryUser)
|
||||||
commonProject := &models.Project{
|
commonProject := &models.Project{
|
||||||
Name: TestProName,
|
Name: TestProName,
|
||||||
OwnerID: adminUser.UserID,
|
OwnerID: adminUser.UserID,
|
||||||
}
|
}
|
||||||
|
|
||||||
_, _ = dao.AddProject(*commonProject)
|
_, _ = dao.AddProject(*commonProject)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommonDelProject() {
|
func CommonDelProject() {
|
||||||
commonProject, _ := dao.GetProjectByName(TestProName)
|
commonProject, _ := dao.GetProjectByName(TestProName)
|
||||||
|
|
||||||
_ = dao.DeleteProject(commonProject.ProjectID)
|
_ = dao.DeleteProject(commonProject.ProjectID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommonAddTarget() {
|
func CommonAddTarget() {
|
||||||
endPoint := os.Getenv("REGISTRY_URL")
|
endPoint := os.Getenv("REGISTRY_URL")
|
||||||
commonTarget := &models.RepTarget{
|
commonTarget := &models.RepTarget{
|
||||||
URL: endPoint,
|
URL: endPoint,
|
||||||
Name: TestTargetName,
|
Name: TestTargetName,
|
||||||
Username: adminName,
|
Username: adminName,
|
||||||
Password: adminPwd,
|
Password: adminPwd,
|
||||||
}
|
}
|
||||||
_, _ = dao.AddRepTarget(*commonTarget)
|
_, _ = dao.AddRepTarget(*commonTarget)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommonGetTarget() int {
|
func CommonGetTarget() int {
|
||||||
target, _ := dao.GetRepTargetByName(TestTargetName)
|
target, _ := dao.GetRepTargetByName(TestTargetName)
|
||||||
return int(target.ID)
|
return int(target.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommonDelTarget() {
|
func CommonDelTarget() {
|
||||||
target, _ := dao.GetRepTargetByName(TestTargetName)
|
target, _ := dao.GetRepTargetByName(TestTargetName)
|
||||||
_ = dao.DeleteRepTarget(target.ID)
|
_ = dao.DeleteRepTarget(target.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommonPolicyEabled(policyID int, enabled int) {
|
func CommonPolicyEabled(policyID int, enabled int) {
|
||||||
_ = dao.UpdateRepPolicyEnablement(int64(policyID), enabled)
|
_ = dao.UpdateRepPolicyEnablement(int64(policyID), enabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CommonAddRepository() {
|
func CommonAddRepository() {
|
||||||
commonRepository := &models.RepoRecord{
|
commonRepository := &models.RepoRecord{
|
||||||
RepositoryID: "1",
|
RepositoryID: 1,
|
||||||
Name: TestRepoName,
|
Name: TestRepoName,
|
||||||
OwnerName: AdminName,
|
ProjectID: 1,
|
||||||
OwnerID: 1,
|
PullCount: 1,
|
||||||
ProjectName: DefaultProjectName,
|
}
|
||||||
ProjectID: 1,
|
_ = dao.AddRepository(*commonRepository)
|
||||||
PullCount: 1,
|
}
|
||||||
}
|
|
||||||
_ = dao.AddRepository(*commonRepository)
|
func CommonDelRepository() {
|
||||||
}
|
_ = dao.DeleteRepository(TestRepoName)
|
||||||
|
}
|
||||||
func CommonDelRepository() {
|
|
||||||
_ = dao.DeleteRepository(TestRepoName)
|
|
||||||
}
|
|
||||||
|
@ -45,9 +45,8 @@ type RepositoryAPI struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type repoResp struct {
|
type repoResp struct {
|
||||||
ID string `json:"id"`
|
ID int64 `json:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
OwnerID int64 `json:"owner_id"`
|
|
||||||
ProjectID int64 `json:"project_id"`
|
ProjectID int64 `json:"project_id"`
|
||||||
Description string `json:"description"`
|
Description string `json:"description"`
|
||||||
PullCount int64 `json:"pull_count"`
|
PullCount int64 `json:"pull_count"`
|
||||||
@ -147,7 +146,6 @@ func populateTagsCount(repositories []*models.RepoRecord) ([]*repoResp, error) {
|
|||||||
repo := &repoResp{
|
repo := &repoResp{
|
||||||
ID: repository.RepositoryID,
|
ID: repository.RepositoryID,
|
||||||
Name: repository.Name,
|
Name: repository.Name,
|
||||||
OwnerID: repository.OwnerID,
|
|
||||||
ProjectID: repository.ProjectID,
|
ProjectID: repository.ProjectID,
|
||||||
Description: repository.Description,
|
Description: repository.Description,
|
||||||
PullCount: repository.PullCount,
|
PullCount: repository.PullCount,
|
||||||
|
@ -270,18 +270,21 @@ func SyncRegistry() error {
|
|||||||
log.Debugf("Start adding repositories into DB... ")
|
log.Debugf("Start adding repositories into DB... ")
|
||||||
for _, repoToAdd := range reposToAdd {
|
for _, repoToAdd := range reposToAdd {
|
||||||
project, _ := utils.ParseRepository(repoToAdd)
|
project, _ := utils.ParseRepository(repoToAdd)
|
||||||
user, err := dao.GetAccessLogCreator(repoToAdd)
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf("Error happens when getting the repository owner from access log: %v", err)
|
|
||||||
}
|
|
||||||
if len(user) == 0 {
|
|
||||||
user = "anonymous"
|
|
||||||
}
|
|
||||||
pullCount, err := dao.CountPull(repoToAdd)
|
pullCount, err := dao.CountPull(repoToAdd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Error happens when counting pull count from access log: %v", err)
|
log.Errorf("Error happens when counting pull count from access log: %v", err)
|
||||||
}
|
}
|
||||||
repoRecord := models.RepoRecord{Name: repoToAdd, OwnerName: user, ProjectName: project, PullCount: pullCount}
|
pro, err := dao.GetProjectByName(project)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("failed to get project %s: %v", project, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
repoRecord := models.RepoRecord{
|
||||||
|
Name: repoToAdd,
|
||||||
|
ProjectID: pro.ProjectID,
|
||||||
|
PullCount: pullCount,
|
||||||
|
}
|
||||||
|
|
||||||
if err := dao.AddRepository(repoRecord); err != nil {
|
if err := dao.AddRepository(repoRecord); err != nil {
|
||||||
log.Errorf("Error happens when adding the missing repository: %v", err)
|
log.Errorf("Error happens when adding the missing repository: %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
@ -76,7 +76,15 @@ func (n *NotificationHandler) Post() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Debugf("Add repository %s into DB.", repository)
|
log.Debugf("Add repository %s into DB.", repository)
|
||||||
repoRecord := models.RepoRecord{Name: repository, OwnerName: user, ProjectName: project}
|
pro, err := dao.GetProjectByName(project)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("failed to get project %s: %v", project, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
repoRecord := models.RepoRecord{
|
||||||
|
Name: repository,
|
||||||
|
ProjectID: pro.ProjectID,
|
||||||
|
}
|
||||||
if err := dao.AddRepository(repoRecord); err != nil {
|
if err := dao.AddRepository(repoRecord); err != nil {
|
||||||
log.Errorf("Error happens when adding repository: %v", err)
|
log.Errorf("Error happens when adding repository: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -37,3 +37,7 @@ Changelog for harbor database schema
|
|||||||
- alter column `name` on table `project`: varchar(30)->varchar(41)
|
- alter column `name` on table `project`: varchar(30)->varchar(41)
|
||||||
- create table `repository`
|
- create table `repository`
|
||||||
- alter column `password` on table `replication_target`: varchar(40)->varchar(128)
|
- alter column `password` on table `replication_target`: varchar(40)->varchar(128)
|
||||||
|
|
||||||
|
## 1.2.0
|
||||||
|
|
||||||
|
- delete column `owner_id` from table `repository`
|
||||||
|
Loading…
Reference in New Issue
Block a user