|
|
@@ -90,6 +90,8 @@ public class FilterHttpResource { |
|
|
|
@Autowired private BlockStatsService blockStats; |
|
|
|
@Autowired private StandardFlexRouterService flexRouterService; |
|
|
|
|
|
|
|
private static final Response NO_FLEX_ROUTER = OK_EMPTY_LIST; |
|
|
|
|
|
|
|
private static final long ACTIVE_REQUEST_TIMEOUT = HOURS.toSeconds(12); |
|
|
|
|
|
|
|
@Getter(lazy=true) private final RedisService activeRequestCache = redis.prefixNamespace(getClass().getSimpleName()+".requests"); |
|
|
@@ -638,20 +640,25 @@ public class FilterHttpResource { |
|
|
|
@Produces(APPLICATION_JSON) |
|
|
|
public Response getFlexRouter(@Context Request req, |
|
|
|
@Context ContainerRequest ctx) { |
|
|
|
final String vpnIp = getRemoteAddr(req); |
|
|
|
final Device device = deviceService.findDeviceByIp(vpnIp); |
|
|
|
final String publicIp = getRemoteAddr(req); |
|
|
|
final Device device = deviceService.findDeviceByIp(publicIp); |
|
|
|
if (device == null) { |
|
|
|
log.warn("getFlexRouters: device not found: "+vpnIp); |
|
|
|
return ok(Collections.emptySet()); |
|
|
|
log.warn("getFlexRouter: device not found with IP: "+publicIp); |
|
|
|
return NO_FLEX_ROUTER; |
|
|
|
} |
|
|
|
|
|
|
|
if (log.isDebugEnabled()) log.debug("getFlexRouters: finding routers for vpnIp="+vpnIp); |
|
|
|
final DeviceStatus deviceStatus = deviceService.getDeviceStatus(device.getUuid()); |
|
|
|
final String publicIp = deviceStatus.getIp(); |
|
|
|
if (!deviceStatus.hasIp()) { |
|
|
|
log.error("getFlexRouter: no device status for device: "+device); |
|
|
|
return NO_FLEX_ROUTER; |
|
|
|
} |
|
|
|
final String vpnIp = deviceStatus.getIp(); |
|
|
|
|
|
|
|
if (log.isDebugEnabled()) log.debug("getFlexRouter: finding routers for vpnIp="+vpnIp); |
|
|
|
Collection<FlexRouterInfo> routers = flexRouterService.selectClosestRouter(device.getAccount(), vpnIp, publicIp); |
|
|
|
|
|
|
|
if (log.isDebugEnabled()) log.debug("getFlexRouters: found router(s) for vpnIp="+vpnIp+": "+json(routers)); |
|
|
|
if (routers.isEmpty()) return ok(Collections.emptySet()); |
|
|
|
if (log.isDebugEnabled()) log.debug("getFlexRouter: found router(s) for vpnIp="+vpnIp+": "+json(routers, COMPACT_MAPPER)); |
|
|
|
if (routers.isEmpty()) return NO_FLEX_ROUTER; |
|
|
|
return ok(routers.iterator().next().initAuth()); |
|
|
|
} |
|
|
|
|
|
|
|