Skip to content

Commit

Permalink
I think this should work to fix the new bug I made
Browse files Browse the repository at this point in the history
  • Loading branch information
NovaFox161 committed Oct 2, 2023
1 parent 97ec1c2 commit 591e68d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 46 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@ class DefaultCredentialService(
) : CredentialService {

override suspend fun createCredential(credential: Credential): Credential {
val encryptedRefreshToken = Credential.aes.encrypt(credential.refreshToken).awaitSingle()
val encryptedAccessToken = Credential.aes.encrypt(credential.accessToken).awaitSingle()

val saved = credentialsRepository.save(CredentialData(
credentialNumber = credential.credentialNumber,
accessToken = credential.encryptedAccessToken,
refreshToken = credential.encryptedRefreshToken,
accessToken = encryptedAccessToken,
refreshToken = encryptedRefreshToken,
expiresAt = credential.expiresAt.toEpochMilli(),
)).map(::Credential).awaitSingle()

Expand All @@ -40,10 +43,13 @@ class DefaultCredentialService(
}

override suspend fun updateCredential(credential: Credential) {
val encryptedRefreshToken = Credential.aes.encrypt(credential.refreshToken).awaitSingle()
val encryptedAccessToken = Credential.aes.encrypt(credential.accessToken).awaitSingle()

credentialsRepository.updateByCredentialNumber(
credentialNumber = credential.credentialNumber,
refreshToken = credential.encryptedRefreshToken,
accessToken = credential.encryptedAccessToken,
refreshToken = encryptedRefreshToken,
accessToken = encryptedAccessToken,
expiresAt = credential.expiresAt.toEpochMilli(),
).awaitSingleOrNull()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ class AESEncryption(privateKey: String) {
this.decryptCipher.init(Cipher.DECRYPT_MODE, this.secretKeySpec, this.ivParameterSpec)
}

@Deprecated("Use #decryptFixed(string) instead")
fun encrypt(data: String): Mono<String> {
return Mono.fromCallable {
val encrypted = this.encryptCipher.doFinal(data.toByteArray(StandardCharsets.UTF_8))
Expand All @@ -38,18 +37,6 @@ class AESEncryption(privateKey: String) {
}


fun encryptFixed(data: String): String {
return try {
val encrypted = this.encryptCipher.doFinal(data.toByteArray(StandardCharsets.UTF_8))

Base64.encodeBase64String(encrypted)
} catch (ex: Exception) {
LOGGER.error("Encrypt failure", ex)
throw IllegalStateException("Encrypt Failure", ex)
}
}

@Deprecated("Use #decryptFixed(string) instead")
fun decrypt(data: String): Mono<String> {
return Mono.fromCallable {
val decrypted = this.decryptCipher.doFinal(Base64.decodeBase64(data))
Expand All @@ -61,16 +48,4 @@ class AESEncryption(privateKey: String) {
Mono.error(IllegalStateException("Decrypt Failure", it))
}.subscribeOn(Schedulers.single()).switchIfEmpty(Mono.error(EmptyNotAllowedException()))
}

fun decryptFixed(data: String): String {
return try {
val decrypted = this.decryptCipher.doFinal(Base64.decodeBase64(data))

String(decrypted!!, StandardCharsets.UTF_8)
} catch (ex: Exception) {
LOGGER.error("Decrypt failure", ex)
throw IllegalStateException("Decrypt Failure", ex)
} finally {
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.dreamexposure.discal.core.`object`.new

import kotlinx.coroutines.reactor.awaitSingle
import org.dreamexposure.discal.core.config.Config
import org.dreamexposure.discal.core.crypto.AESEncryption
import org.dreamexposure.discal.core.database.CredentialData
Expand All @@ -9,29 +10,21 @@ import java.time.Instant
data class Credential(
val credentialNumber: Int,
var expiresAt: Instant,
var refreshToken: String,
var accessToken: String,
) {
/**
* Returns the encrypted refresh token, note that this will run the encryption on every access.
*/
val encryptedRefreshToken: String
get() = aes.encryptFixed(refreshToken)

/**
* Returns the encrypted access token, note that this will run the encryption on every access.
*/
val encryptedAccessToken: String
get() = aes.encryptFixed(accessToken)
lateinit var refreshToken: String
lateinit var accessToken: String

constructor(data: CredentialData) : this(
credentialNumber = data.credentialNumber,
expiresAt = data.expiresAt.asInstantMilli(),
refreshToken = aes.decryptFixed(data.refreshToken),
accessToken = aes.decryptFixed(data.accessToken),
)
) {
suspend {
refreshToken = aes.decrypt(data.refreshToken).awaitSingle()
accessToken = aes.decrypt(data.accessToken).awaitSingle()
}
}

companion object {
private val aes = AESEncryption(Config.SECRET_GOOGLE_CREDENTIAL_KEY.getString())
val aes = AESEncryption(Config.SECRET_GOOGLE_CREDENTIAL_KEY.getString())
}
}

0 comments on commit 591e68d

Please sign in to comment.