init from gitlab
This commit is contained in:
47
internal/server/secrets.go
Normal file
47
internal/server/secrets.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rsa"
|
||||
"database/sql"
|
||||
"encoding/gob"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/rs/zerolog/log"
|
||||
"gitlab.com/texm/shokku/internal/models"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type secrets struct {
|
||||
signingKey []byte
|
||||
privKey *rsa.PrivateKey
|
||||
}
|
||||
|
||||
func getServerSecrets(db *gorm.DB) (*secrets, error) {
|
||||
var s models.ServerSecrets
|
||||
if err := db.Find(&s).Error; err != nil && err != sql.ErrNoRows {
|
||||
log.Error().
|
||||
Err(err).
|
||||
Msg("failed to get server secrets")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var key *rsa.PrivateKey
|
||||
if len(s.DokkuSSHKeyGob) == 0 {
|
||||
return nil, errors.New("no ssh key stored")
|
||||
}
|
||||
|
||||
r := bytes.NewReader(s.DokkuSSHKeyGob)
|
||||
if decodeErr := gob.NewDecoder(r).Decode(&key); decodeErr != nil {
|
||||
return nil, fmt.Errorf("failed to decode priv key: %w", decodeErr)
|
||||
}
|
||||
|
||||
if validErr := key.Validate(); validErr != nil {
|
||||
return nil, fmt.Errorf("private key validation failed: %w", validErr)
|
||||
}
|
||||
|
||||
return &secrets{
|
||||
privKey: key,
|
||||
signingKey: s.SigningKey,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user