satellite/console: Added error for adding api key with existing name attempt. (#3185)
This commit is contained in:
parent
ca0f749428
commit
5f775b9e46
@ -20,6 +20,8 @@ type APIKeys interface {
|
|||||||
Get(ctx context.Context, id uuid.UUID) (*APIKeyInfo, error)
|
Get(ctx context.Context, id uuid.UUID) (*APIKeyInfo, error)
|
||||||
// GetByHead retrieves APIKeyInfo for given key head
|
// GetByHead retrieves APIKeyInfo for given key head
|
||||||
GetByHead(ctx context.Context, head []byte) (*APIKeyInfo, error)
|
GetByHead(ctx context.Context, head []byte) (*APIKeyInfo, error)
|
||||||
|
// GetByNameAndProjectID retrieves APIKeyInfo for given key name and projectID
|
||||||
|
GetByNameAndProjectID(ctx context.Context, name string, projectID uuid.UUID) (*APIKeyInfo, error)
|
||||||
// Create creates and stores new APIKeyInfo
|
// Create creates and stores new APIKeyInfo
|
||||||
Create(ctx context.Context, head []byte, info APIKeyInfo) (*APIKeyInfo, error)
|
Create(ctx context.Context, head []byte, info APIKeyInfo) (*APIKeyInfo, error)
|
||||||
// Update updates APIKeyInfo in store
|
// Update updates APIKeyInfo in store
|
||||||
|
@ -44,6 +44,7 @@ const (
|
|||||||
oldPassIncorrectErrMsg = "Old password is incorrect, please try again"
|
oldPassIncorrectErrMsg = "Old password is incorrect, please try again"
|
||||||
passwordIncorrectErrMsg = "Your password needs at least %d characters long"
|
passwordIncorrectErrMsg = "Your password needs at least %d characters long"
|
||||||
projectOwnerDeletionForbiddenErrMsg = "%s is a project owner and can not be deleted"
|
projectOwnerDeletionForbiddenErrMsg = "%s is a project owner and can not be deleted"
|
||||||
|
apiKeyWithNameExistsErrMsg = "An API Key with this name already exists in this project, please use a different name"
|
||||||
teamMemberDoesNotExistErrMsg = `There is no account on this Satellite for the user(s) you have entered.
|
teamMemberDoesNotExistErrMsg = `There is no account on this Satellite for the user(s) you have entered.
|
||||||
Please add team members with active accounts`
|
Please add team members with active accounts`
|
||||||
|
|
||||||
@ -779,6 +780,11 @@ func (s *Service) CreateAPIKey(ctx context.Context, projectID uuid.UUID, name st
|
|||||||
return nil, nil, ErrUnauthorized.Wrap(err)
|
return nil, nil, ErrUnauthorized.Wrap(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, err = s.store.APIKeys().GetByNameAndProjectID(ctx, name, projectID)
|
||||||
|
if err == nil {
|
||||||
|
return nil, nil, errs.New(apiKeyWithNameExistsErrMsg)
|
||||||
|
}
|
||||||
|
|
||||||
secret, err := macaroon.NewSecret()
|
secret, err := macaroon.NewSecret()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, ErrConsoleInternal.Wrap(err)
|
return nil, nil, ErrConsoleInternal.Wrap(err)
|
||||||
|
@ -151,6 +151,19 @@ func (keys *apikeys) GetByHead(ctx context.Context, head []byte) (_ *console.API
|
|||||||
return fromDBXAPIKey(ctx, dbKey)
|
return fromDBXAPIKey(ctx, dbKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetByNameAndProjectID implements satellite.APIKeys
|
||||||
|
func (keys *apikeys) GetByNameAndProjectID(ctx context.Context, name string, projectID uuid.UUID) (_ *console.APIKeyInfo, err error) {
|
||||||
|
defer mon.Task()(&ctx)(&err)
|
||||||
|
dbKey, err := keys.methods.Get_ApiKey_By_Name_And_ProjectId(ctx,
|
||||||
|
dbx.ApiKey_Name(name),
|
||||||
|
dbx.ApiKey_ProjectId(projectID[:]))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return fromDBXAPIKey(ctx, dbKey)
|
||||||
|
}
|
||||||
|
|
||||||
// Create implements satellite.APIKeys
|
// Create implements satellite.APIKeys
|
||||||
func (keys *apikeys) Create(ctx context.Context, head []byte, info console.APIKeyInfo) (_ *console.APIKeyInfo, err error) {
|
func (keys *apikeys) Create(ctx context.Context, head []byte, info console.APIKeyInfo) (_ *console.APIKeyInfo, err error) {
|
||||||
defer mon.Task()(&ctx)(&err)
|
defer mon.Task()(&ctx)(&err)
|
||||||
|
@ -423,6 +423,11 @@ read one (
|
|||||||
select api_key
|
select api_key
|
||||||
where api_key.head = ?
|
where api_key.head = ?
|
||||||
)
|
)
|
||||||
|
read one (
|
||||||
|
select api_key
|
||||||
|
where api_key.name = ?
|
||||||
|
where api_key.project_id = ?
|
||||||
|
)
|
||||||
read all (
|
read all (
|
||||||
select api_key
|
select api_key
|
||||||
where api_key.project_id = ?
|
where api_key.project_id = ?
|
||||||
|
@ -7819,6 +7819,28 @@ func (obj *postgresImpl) Get_ApiKey_By_Head(ctx context.Context,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj *postgresImpl) Get_ApiKey_By_Name_And_ProjectId(ctx context.Context,
|
||||||
|
api_key_name ApiKey_Name_Field,
|
||||||
|
api_key_project_id ApiKey_ProjectId_Field) (
|
||||||
|
api_key *ApiKey, err error) {
|
||||||
|
|
||||||
|
var __embed_stmt = __sqlbundle_Literal("SELECT api_keys.id, api_keys.project_id, api_keys.head, api_keys.name, api_keys.secret, api_keys.partner_id, api_keys.created_at FROM api_keys WHERE api_keys.name = ? AND api_keys.project_id = ?")
|
||||||
|
|
||||||
|
var __values []interface{}
|
||||||
|
__values = append(__values, api_key_name.value(), api_key_project_id.value())
|
||||||
|
|
||||||
|
var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt)
|
||||||
|
obj.logStmt(__stmt, __values...)
|
||||||
|
|
||||||
|
api_key = &ApiKey{}
|
||||||
|
err = obj.driver.QueryRow(__stmt, __values...).Scan(&api_key.Id, &api_key.ProjectId, &api_key.Head, &api_key.Name, &api_key.Secret, &api_key.PartnerId, &api_key.CreatedAt)
|
||||||
|
if err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
return api_key, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (obj *postgresImpl) All_ApiKey_By_ProjectId_OrderBy_Asc_Name(ctx context.Context,
|
func (obj *postgresImpl) All_ApiKey_By_ProjectId_OrderBy_Asc_Name(ctx context.Context,
|
||||||
api_key_project_id ApiKey_ProjectId_Field) (
|
api_key_project_id ApiKey_ProjectId_Field) (
|
||||||
rows []*ApiKey, err error) {
|
rows []*ApiKey, err error) {
|
||||||
@ -12256,6 +12278,28 @@ func (obj *sqlite3Impl) Get_ApiKey_By_Head(ctx context.Context,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (obj *sqlite3Impl) Get_ApiKey_By_Name_And_ProjectId(ctx context.Context,
|
||||||
|
api_key_name ApiKey_Name_Field,
|
||||||
|
api_key_project_id ApiKey_ProjectId_Field) (
|
||||||
|
api_key *ApiKey, err error) {
|
||||||
|
|
||||||
|
var __embed_stmt = __sqlbundle_Literal("SELECT api_keys.id, api_keys.project_id, api_keys.head, api_keys.name, api_keys.secret, api_keys.partner_id, api_keys.created_at FROM api_keys WHERE api_keys.name = ? AND api_keys.project_id = ?")
|
||||||
|
|
||||||
|
var __values []interface{}
|
||||||
|
__values = append(__values, api_key_name.value(), api_key_project_id.value())
|
||||||
|
|
||||||
|
var __stmt = __sqlbundle_Render(obj.dialect, __embed_stmt)
|
||||||
|
obj.logStmt(__stmt, __values...)
|
||||||
|
|
||||||
|
api_key = &ApiKey{}
|
||||||
|
err = obj.driver.QueryRow(__stmt, __values...).Scan(&api_key.Id, &api_key.ProjectId, &api_key.Head, &api_key.Name, &api_key.Secret, &api_key.PartnerId, &api_key.CreatedAt)
|
||||||
|
if err != nil {
|
||||||
|
return nil, obj.makeErr(err)
|
||||||
|
}
|
||||||
|
return api_key, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (obj *sqlite3Impl) All_ApiKey_By_ProjectId_OrderBy_Asc_Name(ctx context.Context,
|
func (obj *sqlite3Impl) All_ApiKey_By_ProjectId_OrderBy_Asc_Name(ctx context.Context,
|
||||||
api_key_project_id ApiKey_ProjectId_Field) (
|
api_key_project_id ApiKey_ProjectId_Field) (
|
||||||
rows []*ApiKey, err error) {
|
rows []*ApiKey, err error) {
|
||||||
@ -16454,6 +16498,17 @@ func (rx *Rx) Get_ApiKey_By_Id(ctx context.Context,
|
|||||||
return tx.Get_ApiKey_By_Id(ctx, api_key_id)
|
return tx.Get_ApiKey_By_Id(ctx, api_key_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rx *Rx) Get_ApiKey_By_Name_And_ProjectId(ctx context.Context,
|
||||||
|
api_key_name ApiKey_Name_Field,
|
||||||
|
api_key_project_id ApiKey_ProjectId_Field) (
|
||||||
|
api_key *ApiKey, err error) {
|
||||||
|
var tx *Tx
|
||||||
|
if tx, err = rx.getTx(ctx); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return tx.Get_ApiKey_By_Name_And_ProjectId(ctx, api_key_name, api_key_project_id)
|
||||||
|
}
|
||||||
|
|
||||||
func (rx *Rx) Get_BucketMetainfo_By_ProjectId_And_Name(ctx context.Context,
|
func (rx *Rx) Get_BucketMetainfo_By_ProjectId_And_Name(ctx context.Context,
|
||||||
bucket_metainfo_project_id BucketMetainfo_ProjectId_Field,
|
bucket_metainfo_project_id BucketMetainfo_ProjectId_Field,
|
||||||
bucket_metainfo_name BucketMetainfo_Name_Field) (
|
bucket_metainfo_name BucketMetainfo_Name_Field) (
|
||||||
@ -17387,6 +17442,11 @@ type Methods interface {
|
|||||||
api_key_id ApiKey_Id_Field) (
|
api_key_id ApiKey_Id_Field) (
|
||||||
api_key *ApiKey, err error)
|
api_key *ApiKey, err error)
|
||||||
|
|
||||||
|
Get_ApiKey_By_Name_And_ProjectId(ctx context.Context,
|
||||||
|
api_key_name ApiKey_Name_Field,
|
||||||
|
api_key_project_id ApiKey_ProjectId_Field) (
|
||||||
|
api_key *ApiKey, err error)
|
||||||
|
|
||||||
Get_BucketMetainfo_By_ProjectId_And_Name(ctx context.Context,
|
Get_BucketMetainfo_By_ProjectId_And_Name(ctx context.Context,
|
||||||
bucket_metainfo_project_id BucketMetainfo_ProjectId_Field,
|
bucket_metainfo_project_id BucketMetainfo_ProjectId_Field,
|
||||||
bucket_metainfo_name BucketMetainfo_Name_Field) (
|
bucket_metainfo_name BucketMetainfo_Name_Field) (
|
||||||
|
@ -185,6 +185,13 @@ func (m *lockedAPIKeys) GetByHead(ctx context.Context, head []byte) (*console.AP
|
|||||||
return m.db.GetByHead(ctx, head)
|
return m.db.GetByHead(ctx, head)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetByNameAndProjectID retrieves APIKeyInfo for given key name and projectID
|
||||||
|
func (m *lockedAPIKeys) GetByNameAndProjectID(ctx context.Context, name string, projectID uuid.UUID) (*console.APIKeyInfo, error) {
|
||||||
|
m.Lock()
|
||||||
|
defer m.Unlock()
|
||||||
|
return m.db.GetByNameAndProjectID(ctx, name, projectID)
|
||||||
|
}
|
||||||
|
|
||||||
// GetPagedByProjectID is a method for querying API keys from the database by projectID and cursor
|
// GetPagedByProjectID is a method for querying API keys from the database by projectID and cursor
|
||||||
func (m *lockedAPIKeys) GetPagedByProjectID(ctx context.Context, projectID uuid.UUID, cursor console.APIKeyCursor) (akp *console.APIKeyPage, err error) {
|
func (m *lockedAPIKeys) GetPagedByProjectID(ctx context.Context, projectID uuid.UUID, cursor console.APIKeyCursor) (akp *console.APIKeyPage, err error) {
|
||||||
m.Lock()
|
m.Lock()
|
||||||
|
Loading…
Reference in New Issue
Block a user