code.gitea.io/gitea@v1.22.3/modules/activitypub/user_settings.go (about)

     1  // Copyright 2022 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package activitypub
     5  
     6  import (
     7  	"context"
     8  
     9  	user_model "code.gitea.io/gitea/models/user"
    10  	"code.gitea.io/gitea/modules/util"
    11  )
    12  
    13  const rsaBits = 3072
    14  
    15  // GetKeyPair function returns a user's private and public keys
    16  func GetKeyPair(ctx context.Context, user *user_model.User) (pub, priv string, err error) {
    17  	var settings map[string]*user_model.Setting
    18  	settings, err = user_model.GetSettings(ctx, user.ID, []string{user_model.UserActivityPubPrivPem, user_model.UserActivityPubPubPem})
    19  	if err != nil {
    20  		return pub, priv, err
    21  	} else if len(settings) == 0 {
    22  		if priv, pub, err = util.GenerateKeyPair(rsaBits); err != nil {
    23  			return pub, priv, err
    24  		}
    25  		if err = user_model.SetUserSetting(ctx, user.ID, user_model.UserActivityPubPrivPem, priv); err != nil {
    26  			return pub, priv, err
    27  		}
    28  		if err = user_model.SetUserSetting(ctx, user.ID, user_model.UserActivityPubPubPem, pub); err != nil {
    29  			return pub, priv, err
    30  		}
    31  		return pub, priv, err
    32  	}
    33  	priv = settings[user_model.UserActivityPubPrivPem].SettingValue
    34  	pub = settings[user_model.UserActivityPubPubPem].SettingValue
    35  	return pub, priv, err
    36  }
    37  
    38  // GetPublicKey function returns a user's public key
    39  func GetPublicKey(ctx context.Context, user *user_model.User) (pub string, err error) {
    40  	pub, _, err = GetKeyPair(ctx, user)
    41  	return pub, err
    42  }
    43  
    44  // GetPrivateKey function returns a user's private key
    45  func GetPrivateKey(ctx context.Context, user *user_model.User) (priv string, err error) {
    46  	_, priv, err = GetKeyPair(ctx, user)
    47  	return priv, err
    48  }