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 return err
} }
decryptedRefreshToken, err := security.Decrypt(stravaIntegration.RefreshToken, encryptionKey)
if err != nil {
return err
}
request := RefreshTokenRequest{ request := RefreshTokenRequest{
ClientID: stravaIntegration.ClientID, ClientID: stravaIntegration.ClientID,
ClientSecret: string(decryptedSecret), ClientSecret: string(decryptedSecret),
RefreshToken: stravaIntegration.RefreshToken, RefreshToken: string(decryptedRefreshToken),
GrantType: "refresh_token", GrantType: "refresh_token",
} }
r, err := GetStravaToken(request) r, err := GetStravaToken(request)

View File

@@ -9,6 +9,7 @@ import (
"os" "os"
"strconv" "strconv"
"strings" "strings"
"time"
"github.com/meilisearch/meilisearch-go" "github.com/meilisearch/meilisearch-go"
"github.com/pocketbase/dbx" "github.com/pocketbase/dbx"
@@ -97,9 +98,9 @@ func setupEventHandlers(app *pocketbase.PocketBase, client meilisearch.ServiceMa
app.OnRecordAfterCreateSuccess("comments").BindFunc(createCommentHandler()) app.OnRecordAfterCreateSuccess("comments").BindFunc(createCommentHandler())
app.OnRecordsListRequest("integrations").BindFunc(listIntegrationHandler()) app.OnRecordsListRequest("integrations").BindFunc(listIntegrationHandler())
app.OnRecordCreateRequest("integrations").BindFunc(createIntegrationHandler()) app.OnRecordCreate("integrations").BindFunc(createIntegrationHandler())
app.OnRecordAfterCreateSuccess("integrations").BindFunc(createUpdateIntegrationSuccessHandler()) app.OnRecordAfterCreateSuccess("integrations").BindFunc(createUpdateIntegrationSuccessHandler())
app.OnRecordUpdateRequest("integrations").BindFunc(updateIntegrationHandler()) app.OnRecordUpdate("integrations").BindFunc(updateIntegrationHandler())
app.OnRecordAfterUpdateSuccess("integrations").BindFunc(createUpdateIntegrationSuccessHandler()) app.OnRecordAfterUpdateSuccess("integrations").BindFunc(createUpdateIntegrationSuccessHandler())
app.OnRecordRequestEmailChangeRequest("users").BindFunc(changeUserEmailHandler()) 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 { func deleteTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
return func(e *core.RecordEvent) error { return func(e *core.RecordEvent) error {
record := e.Record record := e.Record
_, err := client.Index("trails").DeleteDocument(record.Id) task, err := client.Index("trails").DeleteDocument(record.Id)
if err != nil { if err != nil {
return err 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() return e.Next()
} }
} }
@@ -440,8 +448,8 @@ func listIntegrationHandler() func(e *core.RecordsListRequestEvent) error {
} }
} }
func createIntegrationHandler() func(e *core.RecordRequestEvent) error { func createIntegrationHandler() func(e *core.RecordEvent) error {
return func(e *core.RecordRequestEvent) error { return func(e *core.RecordEvent) error {
err := encryptIntegrationSecrets(e.App, e.Record) err := encryptIntegrationSecrets(e.App, e.Record)
if err != nil { if err != nil {
return err return err
@@ -461,8 +469,8 @@ func createUpdateIntegrationSuccessHandler() func(e *core.RecordEvent) error {
} }
} }
func updateIntegrationHandler() func(e *core.RecordRequestEvent) error { func updateIntegrationHandler() func(e *core.RecordEvent) error {
return func(e *core.RecordRequestEvent) error { return func(e *core.RecordEvent) error {
err := encryptIntegrationSecrets(e.App, e.Record) err := encryptIntegrationSecrets(e.App, e.Record)
if err != nil { if err != nil {
return err return err

View File

@@ -43,11 +43,33 @@ func CanDecryptSecret(ciphertext string) bool {
return false return false
} }
decryptedSecret, err := security.Decrypt(ciphertext, encryptionKey) // Decode Base64 first
cipherBytes, err := base64.StdEncoding.DecodeString(ciphertext)
if len(decryptedSecret) > 0 && err == nil { if err != nil {
return true 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
} }