package com.qianwen.smartman.modules.auth.granter; import org.springframework.stereotype.Component; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.qianwen.core.secure.utils.AuthUtil; import com.qianwen.core.tool.support.Kv; import com.qianwen.core.tool.utils.Func; import com.qianwen.core.tool.utils.WebUtil; import com.qianwen.smartman.common.constant.CommonConstant; import com.qianwen.smartman.modules.auth.provider.ITokenGranter; import com.qianwen.smartman.modules.auth.provider.TokenParameter; import com.qianwen.smartman.modules.smis.entity.Machine; import com.qianwen.smartman.modules.smis.service.IMachineService; import com.qianwen.smartman.modules.system.entity.User; import com.qianwen.smartman.modules.system.entity.UserInfo; import io.jsonwebtoken.Claims; @Component public class MachineTokenGranter implements ITokenGranter { public static final String GRANT_TYPE = "machine"; private final IMachineService machineService; public MachineTokenGranter(IMachineService machineService) { this.machineService = machineService; } @Override // org.springblade.modules.auth.provider.ITokenGranter public UserInfo grant(TokenParameter tokenParameter) { WebUtil.getRequest(); String username = tokenParameter.getArgs().getStr("username"); String password = tokenParameter.getArgs().getStr(PasswordTokenGranter.GRANT_TYPE); String refreshToken = tokenParameter.getArgs().getStr("refreshToken"); boolean isRefreshToken = tokenParameter.getArgs().getBool("isRefreshToken").booleanValue(); UserInfo userInfo = new UserInfo(); if (isRefreshToken) { Claims claims = AuthUtil.parseJWT(refreshToken); if (Func.isEmpty(claims)) return null; Machine machine = (Machine)this.machineService.getById(Long.valueOf(Func.toLong(claims.get("user_id")))); User user = buildUser(machine); Kv param = Kv.create(); param.put("rootPath", machine.getShortCode()); userInfo.setDetail(param); userInfo.setUser(user); } else if (Func.isNoneBlank(new CharSequence[] { username, password })) { Machine machine = (Machine)this.machineService.getOne(new QueryWrapper() .lambda() .eq(Machine::getShortCode, username) .eq(Machine::getPinCode, password) .eq(Machine::getStatus, CommonConstant.ENABLE)); if (null == machine) return null; User user = buildUser(machine); Kv param = Kv.create(); param.put("rootPath", machine.getShortCode()); userInfo.setDetail(param); userInfo.setUser(user); } return userInfo; /* if (isRefreshToken) { Claims claims = AuthUtil.parseJWT(refreshToken); if (Func.isEmpty(claims)) { return null; } Machine machine = (Machine) this.machineService.getById(Long.valueOf(Func.toLong(claims.get("user_id")))); User user = buildUser(machine); Kv param = Kv.create(); param.put("rootPath", machine.getShortCode()); userInfo.setDetail(param); userInfo.setUser(user); } else if (Func.isNoneBlank(new CharSequence[]{username, password})) { Machine machine2 = (Machine) this.machineService.getOne((Wrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) new QueryWrapper().lambda().eq((v0) -> { return v0.getShortCode(); }, username)).eq((v0) -> { return v0.getPinCode(); }, password)).eq((v0) -> { return v0.getStatus(); }, CommonConstant.ENABLE)); if (null == machine2) { return null; } User user2 = buildUser(machine2); Kv param2 = Kv.create(); param2.put("rootPath", machine2.getShortCode()); userInfo.setDetail(param2); userInfo.setUser(user2); } return userInfo; */ } private User buildUser(Machine machine) { User user = new User(); user.setId(machine.getId()); user.setAccount(machine.getShortCode()); user.setTenantId("000000"); user.setDeptId(machine.getCreateDept().toString()); user.setRealName(machine.getMachineName()); user.setStatus(machine.getStatus()); return user; } }