11import { Either , left , right , isLeft } from "fp-ts/Either"
2- import { hasOwnProperty , isNumber , isNonEmptyString , isArray } from "../utils/validation.utils"
3- import { Pagination , HealthResponse , GetEntityInfo200Response , GroupInfo } from "../../generated/openapi/model/models"
2+ import { hasOwnProperty , isNumber , isNonEmptyString , isArray , isUUIDv4 } from "../utils/validation.utils"
3+ import {
4+ Pagination ,
5+ HealthResponse ,
6+ GetEntityInfo200Response ,
7+ GroupInfo ,
8+ RoleOperationItem
9+ } from "../../generated/openapi/model/models"
410import { validateGroupInfo } from "./groups.validators"
11+ import { validateRoleOperationItem } from "./users.validators"
512
613export type PaginationValidationError =
714 | "malformed_object"
@@ -104,6 +111,12 @@ export type GetEntityInfo200ResponseValidationError =
104111 | "invalid_entity_type"
105112 | "missing_groups"
106113 | "invalid_groups"
114+ | "missing_id"
115+ | "invalid_id"
116+ | "missing_roles"
117+ | "invalid_roles"
118+ | "missing_org_role"
119+ | "invalid_org_role"
107120
108121export function validateGetEntityInfo200Response (
109122 object : unknown
@@ -113,6 +126,9 @@ export function validateGetEntityInfo200Response(
113126 if ( ! hasOwnProperty ( object , "entityType" ) || ! isNonEmptyString ( object . entityType ) )
114127 return left ( hasOwnProperty ( object , "entityType" ) ? "invalid_entity_type" : "missing_entity_type" )
115128
129+ if ( ! hasOwnProperty ( object , "id" ) ) return left ( "missing_id" )
130+ if ( ! isNonEmptyString ( object . id ) || ! isUUIDv4 ( object . id ) ) return left ( "invalid_id" )
131+
116132 if ( ! hasOwnProperty ( object , "groups" ) || ! isArray ( object . groups ) )
117133 return left ( hasOwnProperty ( object , "groups" ) ? "invalid_groups" : "missing_groups" )
118134
@@ -123,8 +139,35 @@ export function validateGetEntityInfo200Response(
123139 groups . push ( validatedItem . right )
124140 }
125141
126- return right ( {
127- entityType : object . entityType ,
128- groups
129- } )
142+ if ( ! hasOwnProperty ( object , "roles" ) ) return left ( "missing_roles" )
143+ if ( ! isArray ( object . roles ) ) return left ( "invalid_roles" )
144+
145+ const roles : RoleOperationItem [ ] = [ ]
146+ for ( const role of object . roles ) {
147+ const validatedRole = validateRoleOperationItem ( role )
148+ if ( isLeft ( validatedRole ) ) return left ( "invalid_roles" )
149+ roles . push ( validatedRole . right )
150+ }
151+
152+ if ( object . entityType === "user" ) {
153+ if ( ! hasOwnProperty ( object , "orgRole" ) ) return left ( "missing_org_role" )
154+ if ( object . orgRole !== "admin" && object . orgRole !== "member" ) return left ( "invalid_org_role" )
155+
156+ return right ( {
157+ entityType : "user" as const ,
158+ id : object . id ,
159+ groups,
160+ roles,
161+ orgRole : object . orgRole
162+ } )
163+ } else if ( object . entityType === "agent" ) {
164+ return right ( {
165+ entityType : "agent" as const ,
166+ id : object . id ,
167+ groups,
168+ roles
169+ } )
170+ }
171+
172+ return left ( "invalid_entity_type" )
130173}
0 commit comments