Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pivotal-176168841: Allow to check inactive user registration #315

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ac.uk.ebi.biostd.client.integration.web

import ac.uk.ebi.biostd.client.exception.SecurityWebClientErrorHandler
import ac.uk.ebi.biostd.client.interceptor.ServerValidationInterceptor
import ebi.ac.uk.api.security.CheckUserRequest
import ebi.ac.uk.api.security.LoginRequest
import ebi.ac.uk.api.security.RegisterRequest
import ebi.ac.uk.api.security.UserProfile
Expand All @@ -26,6 +27,10 @@ class SecurityWebClient private constructor(
restTemplate.postForLocation("/auth/register", registerRequest)
}

override fun checkUser(checkUserRequest: CheckUserRequest) {
restTemplate.postForLocation("/auth/check-user", checkUserRequest)
}

companion object {
fun create(baseUrl: String) = SecurityWebClient(
baseUrl,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import ebi.ac.uk.api.UserFile
import ebi.ac.uk.api.dto.NonRegistration
import ebi.ac.uk.api.dto.RegisterConfig
import ebi.ac.uk.api.dto.SubmissionDto
import ebi.ac.uk.api.security.CheckUserRequest
import ebi.ac.uk.api.security.LoginRequest
import ebi.ac.uk.api.security.RegisterRequest
import ebi.ac.uk.api.security.UserProfile
Expand Down Expand Up @@ -78,6 +79,7 @@ interface SecurityOperations {
fun getAuthenticatedClient(user: String, password: String, onBehalf: String): BioWebClient
fun login(loginRequest: LoginRequest): UserProfile
fun registerUser(registerRequest: RegisterRequest)
fun checkUser(checkUserRequest: CheckUserRequest)
}

interface GeneralOperations {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package ebi.ac.uk.api.security

class CheckUserRequest(
val userEmail: String,
val userName: String
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ebi.ac.uk.security.integration.components

import ebi.ac.uk.api.security.ChangePasswordRequest
import ebi.ac.uk.api.security.CheckUserRequest
import ebi.ac.uk.api.security.GetOrRegisterUserRequest
import ebi.ac.uk.api.security.LoginRequest
import ebi.ac.uk.api.security.RegisterRequest
Expand All @@ -22,5 +23,6 @@ interface ISecurityService {
fun getUserProfile(authToken: String): UserInfo
fun getOrCreateInactive(email: String, username: String): SecurityUser
fun getOrRegisterUser(request: GetOrRegisterUserRequest): SecurityUser
fun checkUserRegistration(register: CheckUserRequest): SecurityUser
fun refreshUser(email: String): SecurityUser
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import ac.uk.ebi.biostd.persistence.model.DbUser
import ac.uk.ebi.biostd.persistence.repositories.UserDataRepository
import arrow.core.getOrElse
import ebi.ac.uk.api.security.ChangePasswordRequest
import ebi.ac.uk.api.security.CheckUserRequest
import ebi.ac.uk.api.security.GetOrRegisterUserRequest
import ebi.ac.uk.api.security.LoginRequest
import ebi.ac.uk.api.security.RegisterRequest
Expand Down Expand Up @@ -76,6 +77,10 @@ class SecurityService(
}
}

override fun checkUserRegistration(register: CheckUserRequest): SecurityUser {
return getOrCreateInactive(register.userEmail, register.userName)
}

override fun refreshUser(email: String): SecurityUser {
val user = userRepository.findByEmailAndActive(email, true)
.map { activate(it) }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ac.uk.ebi.biostd.security.web

import ebi.ac.uk.api.security.ChangePasswordRequest
import ebi.ac.uk.api.security.CheckUserRequest
import ebi.ac.uk.api.security.LoginRequest
import ebi.ac.uk.api.security.LogoutRequest
import ebi.ac.uk.api.security.RegisterRequest
Expand Down Expand Up @@ -45,6 +46,19 @@ class SecurityResource(
securityService.registerUser(register)
}

@PostMapping(value = ["/check-registration"])
@ApiOperation("""
Checks if a user with the given email is registered in the system.
In case it's not, a new user will be created using such email and the given user name.
The new user will be inactive and should be activated via activation link.
"""")
fun checkUser(
@ApiParam(name = "User Info", value = "Information for the new user")
@Valid @RequestBody register: CheckUserRequest
) {
securityService.checkUserRegistration(register)
}

@PostMapping(value = ["/signin", "/login"])
@ResponseBody
@ApiOperation("Authenticate")
Expand Down