43 lines
1.5 KiB
Kotlin
43 lines
1.5 KiB
Kotlin
package com.android.trisolarisserver.controller
|
|
|
|
import com.android.trisolarisserver.component.PropertyAccess
|
|
import com.android.trisolarisserver.models.property.AppUser
|
|
import com.android.trisolarisserver.models.property.Role
|
|
import com.android.trisolarisserver.repo.AppUserRepo
|
|
import com.android.trisolarisserver.security.MyPrincipal
|
|
import org.springframework.http.HttpStatus
|
|
import org.springframework.web.server.ResponseStatusException
|
|
import java.util.UUID
|
|
|
|
internal fun requirePrincipal(principal: MyPrincipal?): MyPrincipal {
|
|
return principal ?: throw ResponseStatusException(HttpStatus.UNAUTHORIZED, "Missing principal")
|
|
}
|
|
|
|
internal fun requireUser(appUserRepo: AppUserRepo, principal: MyPrincipal?): AppUser {
|
|
val resolved = requirePrincipal(principal)
|
|
return appUserRepo.findById(resolved.userId).orElseThrow {
|
|
ResponseStatusException(HttpStatus.UNAUTHORIZED, "User not found")
|
|
}
|
|
}
|
|
|
|
internal fun requireMember(
|
|
propertyAccess: PropertyAccess,
|
|
propertyId: UUID,
|
|
principal: MyPrincipal?
|
|
): MyPrincipal {
|
|
val resolved = requirePrincipal(principal)
|
|
propertyAccess.requireMember(propertyId, resolved.userId)
|
|
return resolved
|
|
}
|
|
|
|
internal fun requireRole(
|
|
propertyAccess: PropertyAccess,
|
|
propertyId: UUID,
|
|
principal: MyPrincipal?,
|
|
vararg roles: Role
|
|
): MyPrincipal {
|
|
val resolved = requireMember(propertyAccess, propertyId, principal)
|
|
propertyAccess.requireAnyRole(propertyId, resolved.userId, *roles)
|
|
return resolved
|
|
}
|