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  }