|
|
|
@ -4,8 +4,10 @@ import com.fanruan.workplace.http.HttpConstants;
|
|
|
|
|
import com.fanruan.workplace.http.HttpServiceMap; |
|
|
|
|
import com.fanruan.workplace.http.RepositoryManager; |
|
|
|
|
import com.fanruan.workplace.http.info.Stub; |
|
|
|
|
import com.fr.exception.RemoteDesignPermissionDeniedException; |
|
|
|
|
import com.fr.log.FineLoggerFactory; |
|
|
|
|
import com.fr.stable.StringUtils; |
|
|
|
|
import com.fr.workspace.engine.exception.RemoteDesignConnectionException; |
|
|
|
|
import com.fr.workspace.server.repository.authority.RemoteAuthorityRepository; |
|
|
|
|
import com.fr.workspace.server.repository.compatible.register.CompatibleRegister; |
|
|
|
|
import com.fr.workspace.server.repository.connect.FineWorkspaceHttpClient; |
|
|
|
@ -44,6 +46,7 @@ public class HttpWorkspaceConnector implements WorkspaceConnector {
|
|
|
|
|
LoginResponseInfoBean bean; |
|
|
|
|
try { |
|
|
|
|
bean = RemoteAuthorityRepository.getInstance().login(createLoginBean(connectionInfo)); |
|
|
|
|
checkValidAndUpdateInfo(client, connectionInfo, bean); |
|
|
|
|
} finally { |
|
|
|
|
client.closePool(); |
|
|
|
|
} |
|
|
|
@ -65,12 +68,7 @@ public class HttpWorkspaceConnector implements WorkspaceConnector {
|
|
|
|
|
throw new RuntimeException("Empty token, try connect again and check server"); |
|
|
|
|
} |
|
|
|
|
FineLoggerFactory.getLogger().info("[connector] infos:{}", bean.getAccessToken()); |
|
|
|
|
WorkspaceConnection connection = new WorkspaceConnection( |
|
|
|
|
UUID.randomUUID().toString(), |
|
|
|
|
connectionInfo.getUserName(), |
|
|
|
|
HttpConstants.AUTHORIZATION_PREFIX + bean.getAccessToken(), |
|
|
|
|
InetAddress.getLocalHost().getHostAddress()); |
|
|
|
|
client.updateConnection(connection); |
|
|
|
|
checkValidAndUpdateInfo(client, connectionInfo, bean); |
|
|
|
|
client.startHeartBeat(); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
client.closePool(); |
|
|
|
@ -81,6 +79,30 @@ public class HttpWorkspaceConnector implements WorkspaceConnector {
|
|
|
|
|
return client; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void checkValidAndUpdateInfo(FineWorkspaceHttpClient client, WorkspaceConnectionInfo connectionInfo, LoginResponseInfoBean bean) throws Exception { |
|
|
|
|
WorkspaceConnection connection = new WorkspaceConnection( |
|
|
|
|
UUID.randomUUID().toString(), |
|
|
|
|
connectionInfo.getUserName(), |
|
|
|
|
HttpConstants.AUTHORIZATION_PREFIX + bean.getAccessToken(), |
|
|
|
|
InetAddress.getLocalHost().getHostAddress()); |
|
|
|
|
client.updateConnection(connection); |
|
|
|
|
// 检查远程权限
|
|
|
|
|
if (!checkRemoteAuthority(connection)) { |
|
|
|
|
// 无权限则抛出无权限的错
|
|
|
|
|
throw new RemoteDesignPermissionDeniedException(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean checkRemoteAuthority(WorkspaceConnection connection) { |
|
|
|
|
try { |
|
|
|
|
return RemoteAuthorityRepository.getInstance().isRoot(connection.getUserName()) || RemoteAuthorityRepository.getInstance().hasAuthority(connection.getUserName()); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
// 如果这里出现异常,就认为fr服务没启动
|
|
|
|
|
throw new RemoteDesignConnectionException(e, StringUtils.EMPTY); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private LoginRequestInfoBean createLoginBean(WorkspaceConnectionInfo connectionInfo) { |
|
|
|
|
LoginRequestInfoBean bean = new LoginRequestInfoBean(); |
|
|
|
|
bean.setUsername(connectionInfo.getUserName()); |
|
|
|
|