code.gitea.io/gitea@v1.22.3/models/asymkey/gpg_key_list.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package asymkey 5 6 import ( 7 "context" 8 9 "code.gitea.io/gitea/models/db" 10 ) 11 12 type GPGKeyList []*GPGKey 13 14 func (keys GPGKeyList) keyIDs() []string { 15 ids := make([]string, len(keys)) 16 for i, key := range keys { 17 ids[i] = key.KeyID 18 } 19 return ids 20 } 21 22 func (keys GPGKeyList) LoadSubKeys(ctx context.Context) error { 23 subKeys := make([]*GPGKey, 0, len(keys)) 24 if err := db.GetEngine(ctx).In("primary_key_id", keys.keyIDs()).Find(&subKeys); err != nil { 25 return err 26 } 27 subKeysMap := make(map[string][]*GPGKey, len(subKeys)) 28 for _, key := range subKeys { 29 subKeysMap[key.PrimaryKeyID] = append(subKeysMap[key.PrimaryKeyID], key) 30 } 31 32 for _, key := range keys { 33 if subKeys, ok := subKeysMap[key.KeyID]; ok { 34 key.SubsKey = subKeys 35 } 36 } 37 return nil 38 }