Skip to content

Commit a6106e0

Browse files
committed
feat(services): add runtime RPC request validation
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 1840212 commit a6106e0

37 files changed

Lines changed: 453 additions & 43 deletions

services/flipcash/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ dependencies {
3737
implementation(libs.grpc.okhttp)
3838
implementation(libs.grpc.kotlin)
3939
implementation(libs.grpc.protobuf.lite)
40+
implementation(libs.protobuf.validate.runtime)
4041
implementation(libs.androidx.lifecycle.runtime)
4142
implementation(libs.androidx.room.runtime)
4243
implementation(libs.androidx.room.ktx)

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/AccountApi.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.flipcash.services.internal.network.api
22

33
import com.codeinc.flipcash.gen.account.v1.AccountGrpcKt
4+
import com.codeinc.flipcash.gen.account.v1.validate
45
import com.codeinc.flipcash.gen.common.v1.Common
56
import com.flipcash.services.internal.annotations.FlipcashManagedChannel
67
import com.flipcash.services.internal.network.extensions.asCountryCode
@@ -12,6 +13,7 @@ import com.getcode.ed25519.Ed25519.KeyPair
1213
import com.getcode.opencode.internal.network.core.GrpcApi
1314
import com.getcode.opencode.model.core.ID
1415
import com.google.protobuf.Timestamp
16+
import dev.bmcreations.protovalidate.orThrow
1517
import io.grpc.ManagedChannel
1618
import kotlinx.coroutines.Dispatchers
1719
import kotlinx.coroutines.withContext
@@ -37,6 +39,8 @@ internal class AccountApi @Inject constructor(
3739
.apply { setSignature(sign(owner)) }
3840
.build()
3941

42+
request.validate().orThrow()
43+
4044
return withContext(Dispatchers.IO) {
4145
api.register(request)
4246
}
@@ -52,6 +56,8 @@ internal class AccountApi @Inject constructor(
5256
.apply { setAuth(authenticate(owner)) }
5357
.build()
5458

59+
request.validate().orThrow()
60+
5561
return withContext(Dispatchers.IO) {
5662
api.login(request)
5763
}
@@ -72,6 +78,8 @@ internal class AccountApi @Inject constructor(
7278
.apply { setAuth(authenticate(owner)) }
7379
.build()
7480

81+
request.validate().orThrow()
82+
7583
return withContext(Dispatchers.IO) {
7684
api.getUserFlags(request)
7785
}

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ActivityFeedApi.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.flipcash.services.internal.network.api
33
import com.codeinc.flipcash.gen.activity.v1.ActivityFeedGrpcKt
44
import com.codeinc.flipcash.gen.activity.v1.ActivityFeedService
55
import com.codeinc.flipcash.gen.activity.v1.Model
6+
import com.codeinc.flipcash.gen.activity.v1.validate
67
import com.flipcash.services.internal.annotations.FlipcashManagedChannel
78
import com.flipcash.services.internal.network.extensions.asQueryOptions
89
import com.flipcash.services.internal.network.extensions.authenticate
@@ -12,6 +13,7 @@ import com.flipcash.services.models.QueryOptions
1213
import com.getcode.ed25519.Ed25519.KeyPair
1314
import com.getcode.opencode.internal.network.core.GrpcApi
1415
import com.getcode.opencode.model.core.ID
16+
import dev.bmcreations.protovalidate.orThrow
1517
import io.grpc.ManagedChannel
1618
import kotlinx.coroutines.Dispatchers
1719
import kotlinx.coroutines.withContext
@@ -45,6 +47,8 @@ internal class ActivityFeedApi @Inject constructor(
4547
.apply { setAuth(authenticate(owner)) }
4648
.build()
4749

50+
request.validate().orThrow()
51+
4852
return withContext(Dispatchers.IO) {
4953
api.getLatestNotifications(request)
5054
}
@@ -68,6 +72,8 @@ internal class ActivityFeedApi @Inject constructor(
6872
.apply { setAuth(authenticate(owner)) }
6973
.build()
7074

75+
request.validate().orThrow()
76+
7177
return withContext(Dispatchers.IO) {
7278
api.getPagedNotifications(request)
7379
}
@@ -90,6 +96,8 @@ internal class ActivityFeedApi @Inject constructor(
9096
setAuth(authenticate(owner))
9197
}.build()
9298

99+
request.validate().orThrow()
100+
93101
return withContext(Dispatchers.IO) {
94102
api.getBatchNotifications(request)
95103
}

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/EmailVerificationApi.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import com.flipcash.services.internal.network.extensions.authenticate
88
import com.flipcash.services.models.ContactMethod
99
import com.getcode.ed25519.Ed25519
1010
import com.getcode.opencode.internal.network.core.GrpcApi
11+
import com.codeinc.flipcash.gen.email.v1.validate
12+
import dev.bmcreations.protovalidate.orThrow
1113
import io.grpc.ManagedChannel
1214
import kotlinx.coroutines.Dispatchers
1315
import kotlinx.coroutines.withContext
@@ -38,6 +40,8 @@ internal class EmailVerificationApi @Inject constructor(
3840
.apply { setAuth(authenticate(owner)) }
3941
.build()
4042

43+
request.validate().orThrow()
44+
4145
return withContext(Dispatchers.IO) {
4246
api.sendVerificationCode(request)
4347
}
@@ -57,6 +61,8 @@ internal class EmailVerificationApi @Inject constructor(
5761
.apply { setAuth(authenticate(owner)) }
5862
.build()
5963

64+
request.validate().orThrow()
65+
6066
return withContext(Dispatchers.IO) {
6167
api.checkVerificationCode(request)
6268
}
@@ -71,6 +77,8 @@ internal class EmailVerificationApi @Inject constructor(
7177
.apply { setAuth(authenticate(owner)) }
7278
.build()
7379

80+
request.validate().orThrow()
81+
7482
return withContext(Dispatchers.IO) {
7583
api.unlink(request)
7684
}

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ModerationApi.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package com.flipcash.services.internal.network.api
22

33
import com.codeinc.flipcash.gen.moderation.v1.ModerationGrpcKt
44
import com.codeinc.flipcash.gen.moderation.v1.ModerationService
5+
import com.codeinc.flipcash.gen.moderation.v1.validate
56
import com.flipcash.services.internal.annotations.FlipcashManagedChannel
67
import com.flipcash.services.internal.network.extensions.authenticate
78
import com.getcode.ed25519.Ed25519
89
import com.getcode.opencode.internal.network.core.GrpcApi
910
import com.getcode.utils.toByteString
11+
import dev.bmcreations.protovalidate.orThrow
1012
import io.grpc.ManagedChannel
1113
import kotlinx.coroutines.Dispatchers
1214
import kotlinx.coroutines.withContext
@@ -27,6 +29,8 @@ internal class ModerationApi @Inject constructor(
2729
.apply { setAuth(authenticate(owner)) }
2830
.build()
2931

32+
request.validate().orThrow()
33+
3034
return withContext(Dispatchers.IO) {
3135
api.moderateText(request)
3236
}
@@ -38,6 +42,8 @@ internal class ModerationApi @Inject constructor(
3842
.apply { setAuth(authenticate(owner)) }
3943
.build()
4044

45+
request.validate().orThrow()
46+
4147
return withContext(Dispatchers.IO) {
4248
api.moderateImage(request)
4349
}

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PhoneVerificationApi.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import com.flipcash.services.internal.network.extensions.authenticate
99
import com.flipcash.services.models.ContactMethod
1010
import com.getcode.ed25519.Ed25519
1111
import com.getcode.opencode.internal.network.core.GrpcApi
12+
import com.codeinc.flipcash.gen.phone.v1.validate
13+
import dev.bmcreations.protovalidate.orThrow
1214
import io.grpc.ManagedChannel
1315
import kotlinx.coroutines.Dispatchers
1416
import kotlinx.coroutines.withContext
@@ -39,6 +41,8 @@ internal class PhoneVerificationApi @Inject constructor(
3941
.apply { setAuth(authenticate(owner)) }
4042
.build()
4143

44+
request.validate().orThrow()
45+
4246
return withContext(Dispatchers.IO) {
4347
api.sendVerificationCode(request)
4448
}
@@ -58,6 +62,8 @@ internal class PhoneVerificationApi @Inject constructor(
5862
.apply { setAuth(authenticate(owner)) }
5963
.build()
6064

65+
request.validate().orThrow()
66+
6167
return withContext(Dispatchers.IO) {
6268
api.checkVerificationCode(request)
6369
}
@@ -75,6 +81,8 @@ internal class PhoneVerificationApi @Inject constructor(
7581
.apply { setAuth(authenticate(owner)) }
7682
.build()
7783

84+
request.validate().orThrow()
85+
7886
return withContext(Dispatchers.IO) {
7987
api.unlink(request)
8088
}

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ProfileApi.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import com.flipcash.services.models.SocialAccountUnlinkRequest
1111
import com.getcode.ed25519.Ed25519
1212
import com.getcode.opencode.internal.network.core.GrpcApi
1313
import com.getcode.opencode.model.core.ID
14+
import com.codeinc.flipcash.gen.profile.v1.validate
15+
import dev.bmcreations.protovalidate.orThrow
1416
import io.grpc.ManagedChannel
1517
import kotlinx.coroutines.Dispatchers
1618
import kotlinx.coroutines.withContext
@@ -52,6 +54,8 @@ internal class ProfileApi @Inject constructor(
5254
.apply { setAuth(authenticate(owner)) }
5355
.build()
5456

57+
request.validate().orThrow()
58+
5559
return withContext(Dispatchers.IO) {
5660
api.setDisplayName(request)
5761
}

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PurchaseApi.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ package com.flipcash.services.internal.network.api
33
import com.codeinc.flipcash.gen.common.v1.Common
44
import com.codeinc.flipcash.gen.iap.v1.IapGrpcKt
55
import com.codeinc.flipcash.gen.iap.v1.IapService
6+
import com.codeinc.flipcash.gen.iap.v1.validate
67
import com.flipcash.services.internal.annotations.FlipcashManagedChannel
78
import com.flipcash.services.internal.model.billing.IapMetadata
89
import com.flipcash.services.internal.model.billing.Receipt
910
import com.flipcash.services.internal.network.extensions.authenticate
1011
import com.getcode.ed25519.Ed25519.KeyPair
1112
import com.getcode.opencode.internal.network.core.GrpcApi
13+
import dev.bmcreations.protovalidate.orThrow
1214
import io.grpc.ManagedChannel
1315
import kotlinx.coroutines.Dispatchers
1416
import kotlinx.coroutines.withContext
@@ -40,6 +42,8 @@ internal class PurchaseApi @Inject constructor(
4042
.apply { setAuth(authenticate(owner)) }
4143
.build()
4244

45+
request.validate().orThrow()
46+
4347
return withContext(Dispatchers.IO) {
4448
api.onPurchaseCompleted(request)
4549
}

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PushApi.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import com.codeinc.flipcash.gen.common.v1.Common
44
import com.codeinc.flipcash.gen.push.v1.Model
55
import com.codeinc.flipcash.gen.push.v1.PushGrpcKt
66
import com.codeinc.flipcash.gen.push.v1.PushService
7+
import com.codeinc.flipcash.gen.push.v1.validate
78
import com.flipcash.services.internal.annotations.FlipcashManagedChannel
89
import com.flipcash.services.internal.network.extensions.authenticate
910
import com.getcode.ed25519.Ed25519.KeyPair
1011
import com.getcode.opencode.internal.network.core.GrpcApi
12+
import dev.bmcreations.protovalidate.orThrow
1113
import io.grpc.Deadline
1214
import io.grpc.ManagedChannel
1315
import kotlinx.coroutines.Dispatchers
@@ -41,6 +43,8 @@ internal class PushApi @Inject constructor(
4143
.apply { setAuth(authenticate(owner)) }
4244
.build()
4345

46+
request.validate().orThrow()
47+
4448
return withContext(Dispatchers.IO) {
4549
api.addToken(request)
4650
}
@@ -59,6 +63,8 @@ internal class PushApi @Inject constructor(
5963
.apply { setAuth(authenticate(owner)) }
6064
.build()
6165

66+
request.validate().orThrow()
67+
6268
return withContext(Dispatchers.IO) {
6369
api.deleteTokens(request)
6470
}

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/SettingsApi.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package com.flipcash.services.internal.network.api
33
import com.codeinc.flipcash.gen.common.v1.Common
44
import com.codeinc.flipcash.gen.settings.v1.SettingsGrpcKt
55
import com.codeinc.flipcash.gen.settings.v1.SettingsService
6+
import com.codeinc.flipcash.gen.settings.v1.validate
67
import com.flipcash.services.internal.annotations.FlipcashManagedChannel
78
import com.flipcash.services.internal.network.extensions.authenticate
89
import com.getcode.ed25519.Ed25519
910
import com.getcode.opencode.internal.network.core.GrpcApi
11+
import dev.bmcreations.protovalidate.orThrow
1012
import io.grpc.ManagedChannel
1113
import kotlinx.coroutines.Dispatchers
1214
import kotlinx.coroutines.withContext
@@ -39,6 +41,8 @@ internal class SettingsApi @Inject constructor(
3941
.apply { setAuth(authenticate(owner)) }
4042
.build()
4143

44+
request.validate().orThrow()
45+
4246
return withContext(Dispatchers.IO) {
4347
api.updateSettings(request)
4448
}

0 commit comments

Comments
 (0)