Skip to content

Commit 2665be0

Browse files
committed
Update to console API 0.6.1
1 parent cb78a56 commit 2665be0

3 files changed

Lines changed: 58 additions & 2 deletions

File tree

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ arrow = "2.2.2"
1111
bucket4j = "8.17.0"
1212
buf = "0.11.0"
1313
bundletool = "1.18.3"
14-
console-api = "v0.4.0"
14+
console-api = "v0.6.1"
1515
google-cloud-libraries-bom = "26.77.0"
1616
google-cloud-sql-postgres-socket-factory = "1.28.1"
1717
htmlunit = "4.21.0"

parcelo/src/main/kotlin/app/accrescent/server/parcelo/api/console/OrganizationServiceImpl.kt

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,30 @@
55
package app.accrescent.server.parcelo.api.console
66

77
import app.accrescent.console.v1alpha1.ErrorReason
8+
import app.accrescent.console.v1alpha1.GetOrganizationRequest
9+
import app.accrescent.console.v1alpha1.GetOrganizationResponse
810
import app.accrescent.console.v1alpha1.ListOrganizationsRequest
911
import app.accrescent.console.v1alpha1.ListOrganizationsResponse
1012
import app.accrescent.console.v1alpha1.OrganizationService
13+
import app.accrescent.console.v1alpha1.getOrganizationResponse
1114
import app.accrescent.console.v1alpha1.listOrganizationsResponse
1215
import app.accrescent.console.v1alpha1.organization
1316
import app.accrescent.parcelo.impl.v1.ListOrganizationsPageToken
1417
import app.accrescent.parcelo.impl.v1.listOrganizationsPageToken
1518
import app.accrescent.server.parcelo.api.error.ConsoleApiError
19+
import app.accrescent.server.parcelo.data.App
1620
import app.accrescent.server.parcelo.data.Organization
1721
import app.accrescent.server.parcelo.security.AuthnContextKey
1822
import app.accrescent.server.parcelo.security.GrpcAuthenticationInterceptor
1923
import app.accrescent.server.parcelo.security.GrpcRateLimitInterceptor
2024
import app.accrescent.server.parcelo.security.GrpcRequestValidationInterceptor
25+
import app.accrescent.server.parcelo.security.HasPermissionRequest
26+
import app.accrescent.server.parcelo.security.PermissionService
2127
import com.google.protobuf.InvalidProtocolBufferException
2228
import io.quarkus.grpc.GrpcService
2329
import io.quarkus.grpc.RegisterInterceptor
2430
import io.smallrye.mutiny.Uni
31+
import jakarta.inject.Inject
2532
import jakarta.transaction.Transactional
2633
import kotlin.io.encoding.Base64
2734

@@ -32,7 +39,46 @@ private const val MAX_PAGE_SIZE = 50u
3239
@RegisterInterceptor(GrpcAuthenticationInterceptor::class)
3340
@RegisterInterceptor(GrpcRequestValidationInterceptor::class)
3441
@RegisterInterceptor(GrpcRateLimitInterceptor::class)
35-
class OrganizationServiceImpl : OrganizationService {
42+
class OrganizationServiceImpl @Inject constructor(
43+
private val permissionService: PermissionService,
44+
) : OrganizationService {
45+
@Transactional
46+
override fun getOrganization(request: GetOrganizationRequest): Uni<GetOrganizationResponse> {
47+
val userId = AuthnContextKey.USER_ID.get()
48+
49+
val canView = permissionService
50+
.hasPermission(HasPermissionRequest.ViewOrganization(request.organizationId, userId))
51+
if (!canView) {
52+
val exists = Organization.existsById(request.organizationId)
53+
val canViewExistence = permissionService.hasPermission(
54+
HasPermissionRequest.ViewOrganizationExistence(request.organizationId, userId)
55+
)
56+
57+
throw if (!exists || !canViewExistence) {
58+
organizationNotFoundException(request.organizationId)
59+
} else {
60+
ConsoleApiError(
61+
ErrorReason.ERROR_REASON_INSUFFICIENT_PERMISSION,
62+
"insufficient permission to view organization",
63+
)
64+
.toStatusRuntimeException()
65+
}
66+
}
67+
68+
val organization = Organization
69+
.findById(request.organizationId)
70+
?: throw organizationNotFoundException(request.organizationId)
71+
val response = getOrganizationResponse {
72+
this.organization = organization {
73+
id = organization.id
74+
publishedAppLimit = organization.publishedAppLimit
75+
publishedAppCount = App.countInOrganization(organization.id).toInt()
76+
}
77+
}
78+
79+
return Uni.createFrom().item { response }
80+
}
81+
3682
@Transactional
3783
override fun listOrganizations(
3884
request: ListOrganizationsRequest,
@@ -67,6 +113,8 @@ class OrganizationServiceImpl : OrganizationService {
67113
.map { organization ->
68114
organization {
69115
id = organization.id
116+
publishedAppLimit = organization.publishedAppLimit
117+
publishedAppCount = App.countInOrganization(organization.id).toInt()
70118
}
71119
}
72120

@@ -94,5 +142,11 @@ class OrganizationServiceImpl : OrganizationService {
94142
"provided page token is invalid",
95143
)
96144
.toStatusRuntimeException()
145+
146+
private fun organizationNotFoundException(organizationId: String) = ConsoleApiError(
147+
ErrorReason.ERROR_REASON_RESOURCE_NOT_FOUND,
148+
"organization \"$organizationId\" not found",
149+
)
150+
.toStatusRuntimeException()
97151
}
98152
}

parcelo/src/main/kotlin/app/accrescent/server/parcelo/security/GrpcRequestValidationInterceptor.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import app.accrescent.console.v1alpha1.GetAppDraftRequest
2929
import app.accrescent.console.v1alpha1.GetAppEditDownloadInfoRequest
3030
import app.accrescent.console.v1alpha1.GetAppEditRequest
3131
import app.accrescent.console.v1alpha1.GetAppRequest
32+
import app.accrescent.console.v1alpha1.GetOrganizationRequest
3233
import app.accrescent.console.v1alpha1.GetSelfRequest
3334
import app.accrescent.console.v1alpha1.ListAppDraftsRequest
3435
import app.accrescent.console.v1alpha1.ListAppEditsRequest
@@ -84,6 +85,7 @@ class GrpcRequestValidationInterceptor : ServerInterceptor {
8485
GetAppPackageInfoRequest.getDescriptor(),
8586
GetAppRequest.getDescriptor(),
8687
GetAppUpdateInfoRequest.getDescriptor(),
88+
GetOrganizationRequest.getDescriptor(),
8789
GetSelfRequest.getDescriptor(),
8890
ListAppDraftsRequest.getDescriptor(),
8991
ListAppEditsRequest.getDescriptor(),

0 commit comments

Comments
 (0)