mirror of
https://github.com/hanzoui/registry-backend.git
synced 2026-10-30 20:30:45 +00:00
231 lines
6.7 KiB
Go
231 lines
6.7 KiB
Go
package drip_authorization
|
|
|
|
import (
|
|
"registry-backend/drip"
|
|
"registry-backend/ent/schema"
|
|
"slices"
|
|
|
|
strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo"
|
|
)
|
|
|
|
func (m *AuthorizationManager) AuthorizationMiddleware() drip.StrictMiddlewareFunc {
|
|
subMiddlewares := map[string][]drip.StrictMiddlewareFunc{
|
|
"CreatePublisher": {
|
|
m.assertUserBanned(),
|
|
},
|
|
"UpdatePublisher": {
|
|
m.assertUserBanned(),
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.UpdatePublisherRequestObject).PublisherId
|
|
},
|
|
),
|
|
},
|
|
"CreateNode": {
|
|
m.assertUserBanned(),
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.CreateNodeRequestObject).PublisherId
|
|
},
|
|
),
|
|
},
|
|
"DeleteNode": {
|
|
m.assertUserBanned(),
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.DeleteNodeRequestObject).PublisherId
|
|
},
|
|
),
|
|
m.assertNodeBelongsToPublisher(
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.DeleteNodeRequestObject).PublisherId
|
|
},
|
|
func(req interface{}) (nodeID string) {
|
|
return req.(drip.DeleteNodeRequestObject).NodeId
|
|
},
|
|
),
|
|
},
|
|
"UpdateNode": {
|
|
m.assertUserBanned(),
|
|
m.assertNodeBanned(
|
|
func(req interface{}) (nodeid string) {
|
|
return req.(drip.UpdateNodeRequestObject).NodeId
|
|
},
|
|
),
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.UpdateNodeRequestObject).PublisherId
|
|
},
|
|
),
|
|
m.assertNodeBelongsToPublisher(
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.UpdateNodeRequestObject).PublisherId
|
|
},
|
|
func(req interface{}) (nodeID string) {
|
|
return req.(drip.UpdateNodeRequestObject).NodeId
|
|
},
|
|
),
|
|
},
|
|
"GetNode": {
|
|
m.assertNodeBanned(
|
|
func(req interface{}) (nodeid string) {
|
|
return req.(drip.GetNodeRequestObject).NodeId
|
|
},
|
|
),
|
|
},
|
|
"PublishNodeVersion": {
|
|
m.assertPublisherBanned(
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.PublishNodeVersionRequestObject).PublisherId
|
|
}),
|
|
m.assertNodeBanned(
|
|
func(req interface{}) (nodeid string) {
|
|
return req.(drip.PublishNodeVersionRequestObject).NodeId
|
|
},
|
|
),
|
|
m.assertNodeBelongsToPublisher(
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.PublishNodeVersionRequestObject).PublisherId
|
|
},
|
|
func(req interface{}) (NodeId string) {
|
|
return req.(drip.PublishNodeVersionRequestObject).NodeId
|
|
},
|
|
),
|
|
m.assertPersonalAccessTokenValid(
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.PublishNodeVersionRequestObject).PublisherId
|
|
},
|
|
func(req interface{}) (pat string) {
|
|
return req.(drip.PublishNodeVersionRequestObject).Body.PersonalAccessToken
|
|
},
|
|
),
|
|
},
|
|
"UpdateNodeVersion": {
|
|
m.assertUserBanned(),
|
|
m.assertNodeBanned(
|
|
func(req interface{}) (nodeid string) {
|
|
return req.(drip.UpdateNodeVersionRequestObject).NodeId
|
|
},
|
|
),
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.UpdateNodeVersionRequestObject).PublisherId
|
|
},
|
|
),
|
|
m.assertNodeBelongsToPublisher(
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.UpdateNodeVersionRequestObject).PublisherId
|
|
},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.UpdateNodeVersionRequestObject).NodeId
|
|
},
|
|
),
|
|
},
|
|
"DeleteNodeVersion": {
|
|
m.assertUserBanned(),
|
|
m.assertNodeBanned(
|
|
func(req interface{}) (nodeid string) {
|
|
return req.(drip.DeleteNodeVersionRequestObject).NodeId
|
|
},
|
|
),
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.DeleteNodeVersionRequestObject).PublisherId
|
|
},
|
|
),
|
|
m.assertNodeBelongsToPublisher(
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.DeleteNodeVersionRequestObject).PublisherId
|
|
},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.DeleteNodeVersionRequestObject).NodeId
|
|
},
|
|
),
|
|
},
|
|
"GetNodeVersion": {
|
|
m.assertNodeBanned(
|
|
func(req interface{}) (nodeid string) {
|
|
return req.(drip.GetNodeVersionRequestObject).NodeId
|
|
},
|
|
),
|
|
},
|
|
"ListNodeVersions": {
|
|
m.assertNodeBanned(
|
|
func(req interface{}) (nodeid string) {
|
|
return req.(drip.ListNodeVersionsRequestObject).NodeId
|
|
},
|
|
),
|
|
},
|
|
"InstallNode": {
|
|
m.assertNodeBanned(
|
|
func(req interface{}) (nodeid string) {
|
|
return req.(drip.InstallNodeRequestObject).NodeId
|
|
},
|
|
),
|
|
},
|
|
"CreatePersonalAccessToken": {
|
|
m.assertUserBanned(),
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.CreatePersonalAccessTokenRequestObject).PublisherId
|
|
},
|
|
),
|
|
},
|
|
"DeletePersonalAccessToken": {
|
|
m.assertUserBanned(),
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.DeletePersonalAccessTokenRequestObject).PublisherId
|
|
},
|
|
),
|
|
},
|
|
"ListPersonalAccessTokens": {
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.ListPersonalAccessTokensRequestObject).PublisherId
|
|
},
|
|
),
|
|
},
|
|
"GetPermissionOnPublisherNodes": {
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.GetPermissionOnPublisherNodesRequestObject).PublisherId
|
|
},
|
|
),
|
|
},
|
|
"GetPermissionOnPublisher": {
|
|
m.assertPublisherPermission(
|
|
[]schema.PublisherPermissionType{schema.PublisherPermissionTypeOwner},
|
|
func(req interface{}) (publisherID string) {
|
|
return req.(drip.GetPermissionOnPublisherRequestObject).PublisherId
|
|
},
|
|
),
|
|
},
|
|
}
|
|
for _, v := range subMiddlewares {
|
|
slices.Reverse(v)
|
|
}
|
|
|
|
return func(f strictecho.StrictEchoHandlerFunc, operationID string) strictecho.StrictEchoHandlerFunc {
|
|
middlewares, ok := subMiddlewares[operationID]
|
|
if !ok {
|
|
return f
|
|
}
|
|
|
|
for _, mw := range middlewares {
|
|
f = mw(f, operationID)
|
|
}
|
|
return f
|
|
}
|
|
}
|