package com.izouma.nineth.web; import com.izouma.nineth.domain.MetaTourist; import com.izouma.nineth.domain.User; import com.izouma.nineth.dto.MetaRestResult; import com.izouma.nineth.dto.MetaTouristDTO; import com.izouma.nineth.dto.MetaUserDTO; import com.izouma.nineth.enums.AuthorityName; import com.izouma.nineth.enums.InviteType; import com.izouma.nineth.exception.AuthenticationException; import com.izouma.nineth.exception.BusinessException; import com.izouma.nineth.repo.AssetRepo; import com.izouma.nineth.repo.MetaTouristRepo; import com.izouma.nineth.security.JwtTokenUtil; import com.izouma.nineth.security.JwtUserFactory; import com.izouma.nineth.service.ContentAuditService; import com.izouma.nineth.service.UserService; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; @Slf4j @AllArgsConstructor @RestController @RequestMapping("/auth") public class AuthenticationController { private final AuthenticationManager authenticationManager; private final JwtTokenUtil jwtTokenUtil; private final UserService userService; private ContentAuditService contentAuditService; private MetaTouristRepo metaTouristRepo; private AssetRepo assetRepo; @PostMapping("/login") public String loginByUserPwd(String username, String password, Integer expiration) { User user = userService.loginByUsernamePwd(username, password); return jwtTokenUtil.generateToken(JwtUserFactory.create(user)); } @PostMapping("/oasisLogin") public Map oasisLogin(String phone, String password, Integer expiration) { User user = userService.loginByPhonePwd(phone, password); Map result = userService.oasisInfo(user.getId()); result.put("token", jwtTokenUtil.generateToken(JwtUserFactory.create(user))); result.put("userId", user.getId()); return result; } @PostMapping("/oasisLoginPhone") public Map oasisLogin(String phone, String code) { User user = userService.loginByPhone(phone, code); Map result = userService.oasisInfo(user.getId()); result.put("token", jwtTokenUtil.generateToken(JwtUserFactory.create(user))); result.put("userId", user.getId()); return result; } @PostMapping("/loginAdmin") public String loginByUserPwdAdmin(String username, String password, Integer expiration) { User user = userService.loginByUsernamePwd(username, password); if (user.getAuthorities() == null || user.getAuthorities().stream().anyMatch(au -> au.getName().equals(AuthorityName.ROLE_ADMIN.name()))) { throw new AuthenticationException("禁止登录", null); } return jwtTokenUtil.generateToken(JwtUserFactory.create(user)); } @PostMapping("/phoneLogin") @ApiOperation(value = "手机号验证码登录") public String phoneLogin(String phone, String code, @RequestParam(required = false) Long invitor) { User user = userService.loginByPhone(phone, code); InviteType userInviteType = user.getInviteType(); if (invitor != null) { if (userInviteType != null) { if (!userInviteType.equals(InviteType.AUCTION)) { userService.bindAuctionInvitor(user.getId(), invitor); } } else { userService.bindAuctionInvitor(user.getId(), invitor); } } return jwtTokenUtil.generateToken(JwtUserFactory.create(user)); } @PostMapping("/metaPhoneLogin") @ApiOperation(value = "元宇宙手机号验证码登录") public MetaRestResult metaPhoneLogin(String phone, String code) { User user = userService.loginByPhone(phone, code); String token = jwtTokenUtil.generateToken(JwtUserFactory.create(user)); return MetaRestResult.returnSuccess(MetaUserDTO.create(user, token)); } @PostMapping("/phonePwdLogin") @ApiOperation(value = "手机号密码登录") public String phonePwdLogin(String phone, String password, @RequestParam(required = false) Long invitor) { User user = userService.loginByPhonePwd(phone, password); InviteType userInviteType = user.getInviteType(); if (invitor != null) { if (userInviteType != null) { if (!userInviteType.equals(InviteType.AUCTION)) { userService.bindAuctionInvitor(user.getId(), invitor); } } else { userService.bindAuctionInvitor(user.getId(), invitor); } } return jwtTokenUtil.generateToken(JwtUserFactory.create(user)); } @PostMapping("/metaPhonePwdLogin") @ApiOperation(value = "元宇宙手机号密码登录") public MetaRestResult metaPhonePwdLogin(String phone, String password) { User user = userService.loginByPhonePwd(phone, password); String token = jwtTokenUtil.generateToken(JwtUserFactory.create(user)); return MetaRestResult.returnSuccess(MetaUserDTO.create(user, token)); } @PostMapping("/metaDomainPwdLogin") @ApiOperation(value = "元宇宙元域名密码登录") public MetaRestResult metaDomainPwdLogin(String name, String password) { String phone = assetRepo.findPhone("RID元宇宙域名 ".concat(name).concat(".nft")); if (StringUtils.isEmpty(phone)){ return MetaRestResult.returnError("此域名暂无用户持有"); } User user = userService.loginByPhonePwd(phone, password); String token = jwtTokenUtil.generateToken(JwtUserFactory.create(user)); return MetaRestResult.returnSuccess(MetaUserDTO.create(user, token)); } @PostMapping("/tradingLogin") public Object tradingLogin(String phone, String password, String tradeCode) { return userService.loginTrading(phone, password, tradeCode); } @PostMapping("/phoneRegister") @ApiOperation(value = "手机号密码注册") public String phonePwdLogin(String phone, String code, String password, String inviteCode, Long invitor, Long collectionId, Long showroomId, InviteType inviteType) { User user = userService .phoneRegister(phone, code, password, inviteCode, invitor, collectionId, showroomId, inviteType, null); return jwtTokenUtil.generateToken(JwtUserFactory.create(user)); } @PostMapping("/meta/phoneRegister") @ApiOperation(value = "元宇宙手机号密码注册") public String metaPhonePwdLogin(String phone, String code, String password, String inviteCode, Long invitor, Long collectionId, Long showroomId, InviteType inviteType, String name) { if (!contentAuditService.auditText(name)) { throw new BusinessException("昵称包含不合法内容!"); } User user = userService .phoneRegister(phone, code, password, inviteCode, invitor, collectionId, showroomId, inviteType, name); return jwtTokenUtil.generateToken(JwtUserFactory.create(user)); } @PostMapping("/mqPhoneRegister") @ApiOperation(value = "手机号密码注册") public String mqPhoneRegister(String phone, String code, String password, String inviteCode, Long invitor, Long collectionId, Long showroomId) { // boolean verify = captchaService.verify(captchaKey, captcha); // if (!verify) { // throw new BusinessException("验证码错误"); // } return userService.mqRegister(phone, code, password, inviteCode, invitor, collectionId, showroomId); } @GetMapping("/registerResult") public Object registerResult(String phone) { Object res = userService.getRegisterResult(phone); Map map = new HashMap<>(); if (res == null) { map.put("status", "pending"); return map; } else { return res; } } @PostMapping("/mpLogin") @ApiOperation(value = "公众号登录") public String mpLogin(String code) { try { User user = userService.loginMp(code); return jwtTokenUtil.generateToken(JwtUserFactory.create(user)); } catch (Exception e) { log.error("loginByCode", e); throw new AuthenticationException("登陆错误", e); } } @PostMapping("/maLogin") @ApiOperation(value = "小程序登录") public String maLogin(String code) { try { User user = userService.loginMa(code); return jwtTokenUtil.generateToken(JwtUserFactory.create(user)); } catch (Exception e) { log.error("loginByCode", e); throw new AuthenticationException("登陆错误", e); } } @GetMapping("/getTime") public Long getTime() { return System.currentTimeMillis(); } @PostMapping("/oneKeyLogin") public String oneKeyLogin(String umengKey, String token) { User user = userService.oneKeyLogin(umengKey, token); return jwtTokenUtil.generateToken(JwtUserFactory.create(user)); } @GetMapping("/touristLogin") public MetaTouristDTO touristLogin() { MetaTourist save = metaTouristRepo.save(new MetaTourist()); MetaTouristDTO metaTouristDTO = new MetaTouristDTO(); metaTouristDTO.setUserId(-save.getUserId()); metaTouristDTO.setNickname("游客-" + RandomStringUtils.randomAlphabetic(8)); return metaTouristDTO; } }