(feature)(Headless) arrow flight sql endpoint (#634) (#1136)

This commit is contained in:
jipeli
2024-06-12 15:02:55 +08:00
committed by GitHub
parent 91a6308d9e
commit abf440c4d4
19 changed files with 697 additions and 7 deletions

View File

@@ -23,6 +23,8 @@ public interface UserAdaptor {
String login(UserReq userReq, HttpServletRequest request);
String login(UserReq userReq, String appKey);
List<User> getUserByOrg(String key);
Set<String> getUserAllOrgId(String userName);

View File

@@ -21,6 +21,8 @@ public interface UserService {
String login(UserReq userCmd, HttpServletRequest request);
String login(UserReq userCmd, String appKey);
Set<String> getUserAllOrgId(String userName);
List<User> getUserByOrg(String key);

View File

@@ -11,4 +11,6 @@ public interface UserStrategy {
User findUser(HttpServletRequest request, HttpServletResponse response);
User findUser(String token, String appKey);
}

View File

@@ -5,10 +5,9 @@ import com.tencent.supersonic.auth.api.authentication.service.UserStrategy;
import com.tencent.supersonic.common.pojo.SystemConfig;
import com.tencent.supersonic.common.service.SystemConfigService;
import com.tencent.supersonic.common.util.ContextUtils;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.CollectionUtils;
public final class UserHolder {
@@ -20,6 +19,15 @@ public final class UserHolder {
public static User findUser(HttpServletRequest request, HttpServletResponse response) {
User user = REPO.findUser(request, response);
return getUser(user);
}
public static User findUser(String token, String appKey) {
User user = REPO.findUser(token, appKey);
return getUser(user);
}
private static User getUser(User user) {
SystemConfigService sysParameterService = ContextUtils.getBean(SystemConfigService.class);
SystemConfig systemConfig = sysParameterService.getSystemConfig();
if (!CollectionUtils.isEmpty(systemConfig.getAdmins())

View File

@@ -90,25 +90,43 @@ public class DefaultUserAdaptor implements UserAdaptor {
@Override
public String login(UserReq userReq, HttpServletRequest request) {
UserTokenUtils userTokenUtils = ContextUtils.getBean(UserTokenUtils.class);
try {
UserWithPassword user = getUserWithPassword(userReq);
return userTokenUtils.generateToken(user, request);
} catch (Exception e) {
throw new RuntimeException("password encrypt error, please try again");
}
}
@Override
public String login(UserReq userReq, String appKey) {
UserTokenUtils userTokenUtils = ContextUtils.getBean(UserTokenUtils.class);
try {
UserWithPassword user = getUserWithPassword(userReq);
return userTokenUtils.generateToken(user, appKey);
} catch (Exception e) {
throw new RuntimeException("password encrypt error, please try again");
}
}
private UserWithPassword getUserWithPassword(UserReq userReq) {
UserDO userDO = getUser(userReq.getName());
if (userDO == null) {
throw new RuntimeException("user not exist,please register");
}
try {
String password = AESEncryptionUtil.encrypt(userReq.getPassword(),
AESEncryptionUtil.getBytesFromString(userDO.getSalt()));
if (userDO.getPassword().equals(password)) {
UserWithPassword user = UserWithPassword.get(userDO.getId(), userDO.getName(), userDO.getDisplayName(),
userDO.getEmail(), userDO.getPassword(), userDO.getIsAdmin());
return userTokenUtils.generateToken(user, request);
return user;
} else {
throw new RuntimeException("password not correct, please try again");
}
} catch (Exception e) {
throw new RuntimeException("password encrypt error, please try again");
}
}
@Override

View File

@@ -72,4 +72,9 @@ public class UserServiceImpl implements UserService {
return ComponentFactory.getUserAdaptor().login(userReq, request);
}
@Override
public String login(UserReq userReq, String appKey) {
return ComponentFactory.getUserAdaptor().login(userReq, appKey);
}
}

View File

@@ -20,4 +20,9 @@ public class FakeUserStrategy implements UserStrategy {
return User.getFakeUser();
}
@Override
public User findUser(String token, String appKey) {
return User.getFakeUser();
}
}

View File

@@ -28,4 +28,9 @@ public class HttpHeaderUserStrategy implements UserStrategy {
public User findUser(HttpServletRequest request, HttpServletResponse response) {
return userTokenUtils.getUser(request);
}
@Override
public User findUser(String token, String appKey) {
return userTokenUtils.getUser(token, appKey);
}
}

View File

@@ -37,6 +37,11 @@ public class UserTokenUtils {
}
public String generateToken(UserWithPassword user, HttpServletRequest request) {
String appKey = getAppKey(request);
return generateToken(user, appKey);
}
public String generateToken(UserWithPassword user, String appKey) {
Map<String, Object> claims = new HashMap<>(5);
claims.put(TOKEN_USER_ID, user.getId());
claims.put(TOKEN_USER_NAME, StringUtils.isEmpty(user.getName()) ? "" : user.getName());
@@ -44,7 +49,6 @@ public class UserTokenUtils {
claims.put(TOKEN_USER_DISPLAY_NAME, user.getDisplayName());
claims.put(TOKEN_CREATE_TIME, System.currentTimeMillis());
claims.put(TOKEN_IS_ADMIN, user.getIsAdmin());
String appKey = getAppKey(request);
return generate(claims, appKey);
}
@@ -61,6 +65,15 @@ public class UserTokenUtils {
public User getUser(HttpServletRequest request) {
String token = request.getHeader(authenticationConfig.getTokenHttpHeaderKey());
final Claims claims = getClaims(token, request);
return getUser(claims);
}
public User getUser(String token, String appKey) {
final Claims claims = getClaims(token, appKey);
return getUser(claims);
}
private User getUser(Claims claims) {
Long userId = Long.parseLong(claims.getOrDefault(TOKEN_USER_ID, 0).toString());
String userName = String.valueOf(claims.get(TOKEN_USER_NAME));
String email = String.valueOf(claims.get(TOKEN_USER_EMAIL));
@@ -92,6 +105,16 @@ public class UserTokenUtils {
Claims claims;
try {
String appKey = getAppKey(request);
claims = getClaims(token, appKey);
} catch (Exception e) {
throw new AccessException("parse user info from token failed :" + token);
}
return claims;
}
private Claims getClaims(String token, String appKey) {
Claims claims;
try {
String tokenSecret = getTokenSecret(appKey);
claims = Jwts.parser()
.setSigningKey(tokenSecret.getBytes(StandardCharsets.UTF_8))