Skip to content

Commit

Permalink
fix: missing resource for policies. (#5)
Browse files Browse the repository at this point in the history
  • Loading branch information
tjholm authored Sep 12, 2023
1 parent 402e694 commit 437f9ec
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 22 deletions.
4 changes: 2 additions & 2 deletions lib/src/main/kotlin/io/nitric/resources/BucketResource.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ enum class BucketPermission {
}


class BucketResource internal constructor(name: String) : SecureResource<BucketPermission>(name) {
class BucketResource internal constructor(name: String): SecureResource<BucketPermission>(name, ResourceType.Bucket) {
override fun register() = fluently {
registerResource(this)
}

private fun registerResource(resource: BucketResource) = runBlocking {
async {
resource.client.declare(ResourceDeclareRequest.newBuilder()
.setResource(io.nitric.proto.resource.v1.Resource.newBuilder().setName(resource.name).setType(ResourceType.Bucket).build())
.setResource(resource.asProtoResource())
.setBucket(io.nitric.proto.resource.v1.BucketResource.newBuilder().build()).build()
)
}.await()
Expand Down
6 changes: 3 additions & 3 deletions lib/src/main/kotlin/io/nitric/resources/CollectionResource.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ enum class CollectionPermission {
Delete
}

class CollectionResource<T>(name: String, private val type: Class<T>): SecureResource<CollectionPermission>(name) {
class CollectionResource<T> constructor(name: String, private val collectionType: Class<T>): SecureResource<CollectionPermission>(name, ResourceType.Collection) {
override fun permissionsToActions(permissions: List<CollectionPermission>): List<Action> {
return permissions.fold(mutableListOf()) { arr, perm ->
val actions: List<Action> = when (perm) {
Expand All @@ -32,13 +32,13 @@ class CollectionResource<T>(name: String, private val type: Class<T>): SecureRes

private fun registerResource(resource: CollectionResource<T>) {
resource.client.declare(ResourceDeclareRequest.newBuilder()
.setResource(Resource.newBuilder().setName(resource.name).setType(ResourceType.Collection).build())
.setResource(this.asProtoResource())
.setCollection(io.nitric.proto.resource.v1.CollectionResource.newBuilder().build()).build()
)
}

fun with(vararg permissions: CollectionPermission): io.nitric.api.documents.v0.Collection<T> {
this.registerPolicy(permissions.asList())
return Documents.collection(this.name, this.type)
return Documents.collection(this.name, this.collectionType)
}
}
7 changes: 2 additions & 5 deletions lib/src/main/kotlin/io/nitric/resources/QueueResource.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,15 @@ enum class QueuePermission {
Send, Receive
}

class QueueResource internal constructor(name: String): SecureResource<QueuePermission>(name) {
class QueueResource internal constructor(name: String): SecureResource<QueuePermission>(name, ResourceType.Queue) {
override fun register() = fluently {
registerResource(this)
}

private fun registerResource(resource: QueueResource) {
resource.client.declare(
ResourceDeclareRequest.newBuilder()
.setResource(
io.nitric.proto.resource.v1.Resource.newBuilder().setName(resource.name).setType(ResourceType.Queue)
.build()
)
.setResource(this.asProtoResource())
.setQueue(io.nitric.proto.resource.v1.QueueResource.newBuilder().build()).build()
)
}
Expand Down
11 changes: 8 additions & 3 deletions lib/src/main/kotlin/io/nitric/resources/Resource.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@ import io.nitric.util.GrpcChannelProvider

abstract class ResourceDetails(val id: String, val provider: String, val service: String)

abstract class Resource(val name: String) {
internal val client: ResourceServiceBlockingStub = ResourceServiceGrpc.newBlockingStub(GrpcChannelProvider.getChannel())
abstract class Resource(val name: String, val type: ResourceType) {
internal val client: ResourceServiceGrpc.ResourceServiceBlockingStub = ResourceServiceGrpc.newBlockingStub(GrpcChannelProvider.getChannel())
internal abstract fun register(): Resource

internal fun asProtoResource(): ProtoResource {
return ProtoResource.newBuilder().setName(this.name).setType(this.type).build()
}
}

abstract class SecureResource<P: Enum<P>>(name: String) : Resource(name) {
abstract class SecureResource<P: Enum<P>>(name: String, type: ResourceType) : Resource(name, type) {
internal abstract fun permissionsToActions(permissions: List<P>): List<Action>

internal fun registerPolicy(permissions: List<P>) {
Expand All @@ -28,6 +32,7 @@ abstract class SecureResource<P: Enum<P>>(name: String) : Resource(name) {
val policy = PolicyResource.newBuilder()
.addPrincipals(defaultPrincipal)
.addAllActions(actions)
.addResources(this.asProtoResource())
.build()

this.client.declare(
Expand Down
7 changes: 2 additions & 5 deletions lib/src/main/kotlin/io/nitric/resources/SecretResource.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ enum class SecretPermission {
Access
}

class SecretResource internal constructor(name: String): SecureResource<SecretPermission>(name) {
class SecretResource internal constructor(name: String): SecureResource<SecretPermission>(name, ResourceType.Secret) {
override fun permissionsToActions(permissions: List<SecretPermission>): List<Action> {
return permissions.fold(mutableListOf()) { arr, perm ->
val actions: List<Action> = when (perm) {
Expand All @@ -32,10 +32,7 @@ class SecretResource internal constructor(name: String): SecureResource<SecretPe
private fun registerResource(resource: SecretResource) {
resource.client.declare(
ResourceDeclareRequest.newBuilder()
.setResource(
io.nitric.proto.resource.v1.Resource.newBuilder().setName(resource.name)
.setType(ResourceType.Secret).build()
)
.setResource(this.asProtoResource())
.setSecret(io.nitric.proto.resource.v1.SecretResource.newBuilder().build())
.build()
)
Expand Down
4 changes: 2 additions & 2 deletions lib/src/main/kotlin/io/nitric/resources/TopicResource.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ enum class TopicPermission {
Publishing
}

class TopicResource internal constructor(name: String) : SecureResource<TopicPermission>(name) {
class TopicResource internal constructor(name: String) : SecureResource<TopicPermission>(name, ResourceType.Topic) {
override fun register() = fluently {
registerResource(this)
}

private fun registerResource(resource: TopicResource) {
resource.client.declare(
ResourceDeclareRequest.newBuilder()
.setResource(Resource.newBuilder().setName(resource.name).setType(ResourceType.Topic).build())
.setResource(this.asProtoResource())
.setTopic(io.nitric.proto.resource.v1.TopicResource.newBuilder().build())
.build()
)
Expand Down
4 changes: 2 additions & 2 deletions lib/src/main/kotlin/io/nitric/resources/WebsocketResource.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import kotlinx.coroutines.runBlocking
class WebsocketDetails(val url: String, id: String, provider: String, service: String): ResourceDetails(id, provider, service)


class WebsocketResource internal constructor(name: String) : Resource(name) {
class WebsocketResource internal constructor(name: String) : Resource(name, ResourceType.Websocket) {
// The document gRPC client
private val websocketClient = WebsocketServiceGrpc.newBlockingStub(GrpcChannelProvider.getChannel())

Expand All @@ -37,7 +37,7 @@ class WebsocketResource internal constructor(name: String) : Resource(name) {
resource.client.declare(
ResourceDeclareRequest.newBuilder()
.setResource(
ProtoResource.newBuilder().setName(resource.name).setType(ResourceType.Websocket).build()
resource.asProtoResource()
)
.build()
)
Expand Down

0 comments on commit 437f9ec

Please sign in to comment.