Add register and verify to AuthenticationController

This commit is contained in:
2023-12-21 18:35:42 +08:00
parent e7c8311b83
commit c40bb0bbaa
25 changed files with 275 additions and 42 deletions

View File

@@ -11,6 +11,22 @@ import top.fatweb.api.vo.api.v1.avatar.AvatarBase64Vo
* @since 1.0.0
*/
interface IAvatarService {
/**
* Generate random avatar
*
* @author FatttSnake, fatttsnake@gmail.com
* @since 1.0.0
*/
fun random(avatarBaseParam: AvatarBaseParam?): ByteArray
/**
* Generate random avatar as base64
*
* @author FatttSnake, fatttsnake@gmail.com
* @since 1.0.0
*/
fun randomBase64(avatarBaseParam: AvatarBaseParam?): AvatarBase64Vo
/**
* Generate triangle style avatar
*

View File

@@ -25,6 +25,34 @@ import kotlin.io.encoding.ExperimentalEncodingApi
@OptIn(ExperimentalEncodingApi::class)
@Service
class AvatarServiceImpl : IAvatarService {
override fun random(avatarBaseParam: AvatarBaseParam?): ByteArray =
when ((1..4).random()) {
1 -> triangle(avatarBaseParam)
2 -> square(avatarBaseParam)
3 -> identicon(avatarBaseParam)
else -> github(AvatarGitHubParam().apply {
seed = avatarBaseParam?.seed
size = avatarBaseParam?.size
margin = avatarBaseParam?.margin
padding = avatarBaseParam?.padding
colors = avatarBaseParam?.colors
background = avatarBaseParam?.background
})
}
override fun randomBase64(avatarBaseParam: AvatarBaseParam?): AvatarBase64Vo = when ((1..4).random()) {
1 -> triangleBase64(avatarBaseParam)
2 -> squareBase64(avatarBaseParam)
3 -> identiconBase64(avatarBaseParam)
else -> githubBase64(AvatarGitHubParam().apply {
seed = avatarBaseParam?.seed
size = avatarBaseParam?.size
margin = avatarBaseParam?.margin
padding = avatarBaseParam?.padding
colors = avatarBaseParam?.colors
background = avatarBaseParam?.background
})
}
override fun triangle(avatarBaseParam: AvatarBaseParam?): ByteArray {
val avatar = (

View File

@@ -3,6 +3,8 @@ package top.fatweb.api.service.permission
import jakarta.servlet.http.HttpServletRequest
import top.fatweb.api.entity.permission.User
import top.fatweb.api.param.permission.LoginParam
import top.fatweb.api.param.permission.RegisterParam
import top.fatweb.api.param.permission.VerifyParam
import top.fatweb.api.vo.permission.LoginVo
import top.fatweb.api.vo.permission.TokenVo
@@ -13,6 +15,22 @@ import top.fatweb.api.vo.permission.TokenVo
* @since 1.0.0
*/
interface IAuthenticationService {
/**
* Register
*
* @author FatttSnake, fatttsnake@gmail.com
* @since 1.0.0
*/
fun register(registerParam: RegisterParam)
/**
* Verify
*
* @author FatttSnake, fatttsnake@gmail.com
* @since 1.0.0
*/
fun verify(verifyParam: VerifyParam)
/**
* Login
*

View File

@@ -6,15 +6,22 @@ import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.security.authentication.AuthenticationManager
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
import org.springframework.security.crypto.password.PasswordEncoder
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import top.fatweb.api.annotation.EventLogRecord
import top.fatweb.api.entity.permission.LoginUser
import top.fatweb.api.entity.permission.User
import top.fatweb.api.entity.permission.UserInfo
import top.fatweb.api.entity.system.EventLog
import top.fatweb.api.exception.TokenHasExpiredException
import top.fatweb.api.param.permission.LoginParam
import top.fatweb.api.param.permission.RegisterParam
import top.fatweb.api.param.permission.VerifyParam
import top.fatweb.api.properties.SecurityProperties
import top.fatweb.api.service.api.v1.IAvatarService
import top.fatweb.api.service.permission.IAuthenticationService
import top.fatweb.api.service.permission.IUserInfoService
import top.fatweb.api.service.permission.IUserService
import top.fatweb.api.util.JwtUtil
import top.fatweb.api.util.RedisUtil
@@ -23,6 +30,7 @@ import top.fatweb.api.vo.permission.LoginVo
import top.fatweb.api.vo.permission.TokenVo
import java.time.LocalDateTime
import java.time.ZoneOffset
import java.util.*
/**
* Authentication service implement
@@ -37,11 +45,33 @@ import java.time.ZoneOffset
@Service
class AuthenticationServiceImpl(
private val authenticationManager: AuthenticationManager,
private val passwordEncoder: PasswordEncoder,
private val redisUtil: RedisUtil,
private val userService: IUserService
private val userService: IUserService,
private val userInfoService: IUserInfoService,
private val avatarService: IAvatarService
) : IAuthenticationService {
private val logger: Logger = LoggerFactory.getLogger(this::class.java)
@Transactional
override fun register(registerParam: RegisterParam) {
val user = User().apply {
username = "\$UNNAMED_${UUID.randomUUID()}"
password = passwordEncoder.encode(registerParam.password)
locking = 0
enable = 1
}
userService.save(user)
userInfoService.save(UserInfo().apply {
userId = user.id
avatar = avatarService.randomBase64(null).base64
email = registerParam.email
})
}
override fun verify(verifyParam: VerifyParam) {
}
@EventLogRecord(EventLog.Event.LOGIN)
override fun login(request: HttpServletRequest, loginParam: LoginParam): LoginVo {
val usernamePasswordAuthenticationToken =