fixes decryption check method

This commit is contained in:
Christian Beutel
2025-03-28 20:15:03 +01:00
parent 123470b81b
commit 07edb2c457
3 changed files with 48 additions and 13 deletions

View File

@@ -52,10 +52,15 @@ func SyncStrava(app core.App) error {
return err
}
decryptedRefreshToken, err := security.Decrypt(stravaIntegration.RefreshToken, encryptionKey)
if err != nil {
return err
}
request := RefreshTokenRequest{
ClientID: stravaIntegration.ClientID,
ClientSecret: string(decryptedSecret),
RefreshToken: stravaIntegration.RefreshToken,
RefreshToken: string(decryptedRefreshToken),
GrantType: "refresh_token",
}
r, err := GetStravaToken(request)

View File

@@ -9,6 +9,7 @@ import (
"os"
"strconv"
"strings"
"time"
"github.com/meilisearch/meilisearch-go"
"github.com/pocketbase/dbx"
@@ -97,9 +98,9 @@ func setupEventHandlers(app *pocketbase.PocketBase, client meilisearch.ServiceMa
app.OnRecordAfterCreateSuccess("comments").BindFunc(createCommentHandler())
app.OnRecordsListRequest("integrations").BindFunc(listIntegrationHandler())
app.OnRecordCreateRequest("integrations").BindFunc(createIntegrationHandler())
app.OnRecordCreate("integrations").BindFunc(createIntegrationHandler())
app.OnRecordAfterCreateSuccess("integrations").BindFunc(createUpdateIntegrationSuccessHandler())
app.OnRecordUpdateRequest("integrations").BindFunc(updateIntegrationHandler())
app.OnRecordUpdate("integrations").BindFunc(updateIntegrationHandler())
app.OnRecordAfterUpdateSuccess("integrations").BindFunc(createUpdateIntegrationSuccessHandler())
app.OnRecordRequestEmailChangeRequest("users").BindFunc(changeUserEmailHandler())
@@ -197,10 +198,17 @@ func updateTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEv
func deleteTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
return func(e *core.RecordEvent) error {
record := e.Record
_, err := client.Index("trails").DeleteDocument(record.Id)
task, err := client.Index("trails").DeleteDocument(record.Id)
if err != nil {
return err
}
interval := 500 * time.Millisecond
_, err = client.WaitForTask(task.TaskUID, interval)
if err != nil {
log.Fatalf("Error waiting for task completion: %v", err)
}
return e.Next()
}
}
@@ -440,8 +448,8 @@ func listIntegrationHandler() func(e *core.RecordsListRequestEvent) error {
}
}
func createIntegrationHandler() func(e *core.RecordRequestEvent) error {
return func(e *core.RecordRequestEvent) error {
func createIntegrationHandler() func(e *core.RecordEvent) error {
return func(e *core.RecordEvent) error {
err := encryptIntegrationSecrets(e.App, e.Record)
if err != nil {
return err
@@ -461,8 +469,8 @@ func createUpdateIntegrationSuccessHandler() func(e *core.RecordEvent) error {
}
}
func updateIntegrationHandler() func(e *core.RecordRequestEvent) error {
return func(e *core.RecordRequestEvent) error {
func updateIntegrationHandler() func(e *core.RecordEvent) error {
return func(e *core.RecordEvent) error {
err := encryptIntegrationSecrets(e.App, e.Record)
if err != nil {
return err

View File

@@ -43,11 +43,33 @@ func CanDecryptSecret(ciphertext string) bool {
return false
}
decryptedSecret, err := security.Decrypt(ciphertext, encryptionKey)
if len(decryptedSecret) > 0 && err == nil {
return true
// Decode Base64 first
cipherBytes, err := base64.StdEncoding.DecodeString(ciphertext)
if err != nil {
return false // Not a valid Base64 string
}
return false
// Get nonce size from encryption parameters
block, err := aes.NewCipher([]byte(encryptionKey))
if err != nil {
return false
}
gcm, err := cipher.NewGCM(block)
if err != nil {
return false
}
nonceSize := gcm.NonceSize()
// Ensure decoded cipherBytes is long enough to contain a nonce
if len(cipherBytes) < nonceSize {
return false
}
// Try to decrypt (only now)
decryptedSecret, err := security.Decrypt(ciphertext, encryptionKey)
// Check if decryption was successful
return err == nil && len(decryptedSecret) > 0
}