コード例 #1
0
  @SuppressWarnings("unchecked")
  protected Map<Long, String> populateNewServiceLinks(ApiRequest request) {
    final Map<Long, String> newServiceLinks = new HashMap<>();
    final Map<String, Long> newServiceLinksMaps =
        DataAccessor.fromMap(request.getRequestObject())
            .withKey(ServiceDiscoveryConstants.FIELD_SERVICE_LINKS)
            .withDefault(Collections.EMPTY_MAP)
            .as(Map.class);

    if (newServiceLinksMaps != null) {
      for (String linkName : newServiceLinksMaps.keySet()) {
        newServiceLinks.put(newServiceLinksMaps.get(linkName), linkName);
      }
    }

    final List<? extends Long> newConsumedServicesIds =
        DataAccessor.fromMap(request.getRequestObject())
            .withKey(ServiceDiscoveryConstants.FIELD_SERVICE_IDS)
            .asList(jsonMapper, Long.class);

    if (newConsumedServicesIds != null) {
      for (Long consumedServiceId : newConsumedServicesIds) {
        newServiceLinks.put(consumedServiceId, null);
      }
    }
    return newServiceLinks;
  }
コード例 #2
0
 public Account getAccountAccess(String token, ApiRequest request) {
   if (!StringUtils.equals(AbstractTokenUtil.TOKEN, request.getType()) && isConfigured()) {
     request.setAttribute(tokenUtils().tokenType(), token);
     return getAccountAccessInternal();
   }
   return null;
 }
コード例 #3
0
ファイル: DotMaker.java プロジェクト: stresler/cattle
 protected String getContent(ApiRequest request, String dot) {
   if ("html".equals(request.getResponseFormat())) {
     request.setResponseContentType("text/html; charset=utf-8");
     return asHtml(dot);
   } else {
     request.setResponseContentType("text/plain");
     return dot;
   }
 }
コード例 #4
0
ファイル: ADConfigManager.java プロジェクト: sergeikh/cattle
  @Override
  protected Object createInternal(String type, ApiRequest request) {
    if (!StringUtils.equals(ADConstants.CONFIG, request.getType())) {
      return null;
    }

    LDAPConstants config = request.proxyRequestObject(LDAPConstants.class);
    LDAPUtils.validateConfig(config);
    return updateCurrentConfig(config);
  }
コード例 #5
0
ファイル: AzureTokenUtil.java プロジェクト: kalw/cattle
 @Override
 protected void postAuthModification(Account account) {
   if (account != null) {
     ApiRequest request = ApiContext.getContext().getApiRequest();
     String accessToken = (String) request.getAttribute(AzureConstants.AZURE_ACCESS_TOKEN);
     String refreshToken = (String) request.getAttribute(AzureConstants.AZURE_REFRESH_TOKEN);
     DataAccessor.fields(account).withKey(AzureConstants.AZURE_ACCESS_TOKEN).set(accessToken);
     DataAccessor.fields(account).withKey(AzureConstants.AZURE_REFRESH_TOKEN).set(refreshToken);
     getObjectManager().persist(account);
   }
 }
コード例 #6
0
  private Account getAccountRequested(
      Account authenticatedAsAccount, Set<Identity> identities, ApiRequest request) {
    Account project;

    String projectId =
        request.getServletContext().getRequest().getHeader(ProjectConstants.PROJECT_HEADER);
    if (projectId == null || projectId.isEmpty()) {
      projectId = request.getServletContext().getRequest().getParameter("projectId");
    }
    if (projectId == null || projectId.isEmpty()) {
      projectId = (String) request.getAttribute(ProjectConstants.PROJECT_HEADER);
    }

    if (projectId == null || projectId.isEmpty()) {
      return authenticatedAsAccount;
    }

    String parsedProjectId;

    try {
      parsedProjectId = ApiContext.getContext().getIdFormatter().parseId(projectId);
    } catch (NumberFormatException e) {
      throw new ClientVisibleException(
          ResponseCodes.BAD_REQUEST,
          "InvalidFormat",
          "projectId header format is incorrect " + projectId,
          null);
    }

    if (StringUtils.isEmpty(parsedProjectId)) {
      throw new ClientVisibleException(ResponseCodes.FORBIDDEN);
    }
    try {
      project = authDao.getAccountById(new Long(parsedProjectId));
      if (project == null || !project.getState().equalsIgnoreCase(CommonStatesConstants.ACTIVE)) {
        throw new ClientVisibleException(ResponseCodes.FORBIDDEN);
      }
      if (authenticatedAsAccount.getId().equals(project.getId())) {
        return authenticatedAsAccount;
      }
    } catch (NumberFormatException e) {
      throw new ClientVisibleException(ResponseCodes.FORBIDDEN);
    }
    Policy tempPolicy =
        getPolicy(authenticatedAsAccount, authenticatedAsAccount, identities, request);
    if (authDao.hasAccessToProject(
        project.getId(),
        authenticatedAsAccount.getId(),
        tempPolicy.isOption(Policy.AUTHORIZED_FOR_ALL_ACCOUNTS),
        identities)) {
      return project;
    }
    throw new ClientVisibleException(ResponseCodes.FORBIDDEN);
  }
コード例 #7
0
 protected void saveInContext(ApiRequest request, Policy policy, SchemaFactory schemaFactory) {
   if (schemaFactory != null) {
     request.setSchemaFactory(schemaFactory);
   }
   String accountId =
       (String)
           ApiContext.getContext()
               .getIdFormatter()
               .formatId(objectManager.getType(Account.class), policy.getAccountId());
   request.getServletContext().getResponse().addHeader(ACCOUNT_ID_HEADER, accountId);
   ApiContext.getContext().setPolicy(policy);
 }
コード例 #8
0
  @Override
  public Object resourceAction(String type, ApiRequest request, ResourceManager next) {
    if (request.getAction().equalsIgnoreCase(ServiceDiscoveryConstants.ACTION_SERVICE_UPGRADE)) {
      Service service = objManager.loadResource(Service.class, request.getId());
      if (ServiceDiscoveryUtil.isNoopService(service, allocatorService)) {
        throw new ValidationErrorException(
            ValidationErrorCodes.INVALID_ACTION, "Can't upgrade selector only service");
      }
    }

    return super.resourceAction(type, request, next);
  }
コード例 #9
0
 @Override
 protected Object createInternal(String type, ApiRequest request) {
   if (!StringUtils.equals(AbstractTokenUtil.TOKEN, request.getType())) {
     return null;
   }
   return createToken(request);
 }
コード例 #10
0
  protected Account getAccount(ApiRequest request) {
    Account account = null;

    for (AccountLookup lookup : accountLookups) {
      if (lookup.isConfigured()) {
        account = lookup.getAccount(request);
        if (account != null) {
          request.setAttribute(AccountConstants.AUTH_TYPE, lookup.getName());
          break;
        }
      }
    }

    if (account != null) {
      return account;
    }

    if (SecurityConstants.SECURITY.get()) {
      for (AccountLookup lookup : accountLookups) {
        if (lookup.challenge(request)) {
          break;
        }
      }
    }

    return null;
  }
コード例 #11
0
  @Override
  public Object create(String type, ApiRequest request, ResourceManager next) {
    Service service = request.proxyRequestObject(Service.class);

    validateSelectorOnlyService(request, service);
    return super.create(type, request, next);
  }
コード例 #12
0
 @Override
 public Account getAccount(ApiRequest request) {
   if (!StringUtils.equals(AbstractTokenUtil.TOKEN, request.getType()) && isConfigured()) {
     tokenUtils().findAndSetJWT();
     return getAccountAccessInternal();
   }
   return null;
 }
コード例 #13
0
 @SuppressWarnings("unchecked")
 protected void validateSelectorOnlyService(ApiRequest request, Service service) {
   Map<String, Object> data = CollectionUtils.toMap(request.getRequestObject());
   Map<String, Object> primaryLaunchConfig =
       (Map<String, Object>) data.get(ServiceDiscoveryConstants.FIELD_LAUNCH_CONFIG);
   Object selector = data.get(ServiceDiscoveryConstants.FIELD_SELECTOR_CONTAINER);
   boolean isSelector = selector != null && !selector.toString().isEmpty();
   validateImage(primaryLaunchConfig, isSelector);
 }
コード例 #14
0
ファイル: DotMaker.java プロジェクト: stresler/cattle
  public boolean writeResponse(String dot, ApiRequest request) throws IOException {
    if (dot != null) {
      String content = getContent(request, dot);
      try {
        request.getOutputStream().write(content.getBytes("UTF-8"));
      } catch (UnsupportedEncodingException e) {
        throw new IllegalStateException(e);
      }
      return true;
    }

    return false;
  }
コード例 #15
0
  protected Map<String, ServiceLink> populateNewServiceLinks(ApiRequest request) {
    Map<String, ServiceLink> newServiceLinks = new HashMap<>();
    List<? extends ServiceLink> serviceLinks =
        DataAccessor.fromMap(request.getRequestObject())
            .withKey(ServiceConstants.FIELD_SERVICE_LINKS)
            .withDefault(Collections.EMPTY_LIST)
            .asList(jsonMapper, ServiceLink.class);

    if (serviceLinks != null) {
      for (ServiceLink serviceLink : serviceLinks) {
        newServiceLinks.put(serviceLink.getUuid(), serviceLink);
      }
    }

    return newServiceLinks;
  }
コード例 #16
0
  @Override
  public Object create(String type, ApiRequest request, ResourceManager next) {
    ServiceEvent event = request.proxyRequestObject(ServiceEvent.class);

    /* Will never return null, MissingRequired will be thrown if missing */
    Agent agent = getAgent();
    if (agent == null) {
      throw new ClientVisibleException(ResponseCodes.FORBIDDEN, VERIFY_AGENT);
    }

    HealthcheckInstanceHostMap healthcheckInstanceHostMap = null;
    String[] splitted = event.getHealthcheckUuid().split("_");
    if (splitted.length > 2) {
      healthcheckInstanceHostMap = serviceDao.getHealthCheckInstanceUUID(splitted[0], splitted[1]);
    } else {
      healthcheckInstanceHostMap =
          objectManager.findOne(
              HealthcheckInstanceHostMap.class, ObjectMetaDataManager.UUID_FIELD, splitted[0]);
    }

    if (healthcheckInstanceHostMap == null) {
      throw new ClientVisibleException(ResponseCodes.FORBIDDEN, VERIFY_AGENT);
    }

    HealthcheckInstance healthcheckInstance =
        objectManager.loadResource(
            HealthcheckInstance.class, healthcheckInstanceHostMap.getHealthcheckInstanceId());

    if (healthcheckInstance == null) {
      return null;
    }
    Long resourceAccId =
        DataAccessor.fromDataFieldOf(agent)
            .withKey(AgentConstants.DATA_AGENT_RESOURCES_ACCOUNT_ID)
            .as(Long.class);

    if (!healthcheckInstanceHostMap.getAccountId().equals(resourceAccId)) {
      throw new ClientVisibleException(ResponseCodes.FORBIDDEN, VERIFY_AGENT);
    }

    event.setInstanceId(healthcheckInstance.getInstanceId());
    event.setHealthcheckInstanceId(healthcheckInstance.getId());
    event.setHostId(healthcheckInstanceHostMap.getHostId());

    return super.create(type, request, next);
  }
コード例 #17
0
  @Override
  public Object create(String type, ApiRequest request, ResourceManager next) {
    Environment env = request.proxyRequestObject(Environment.class);

    if (env.getName().startsWith("-") || env.getName().endsWith("-")) {
      ValidationErrorCodes.throwValidationError(ValidationErrorCodes.INVALID_CHARACTERS, "name");
    }

    ResourceManager rm = locator.getResourceManagerByType(type);

    Map<Object, Object> criteria = new HashMap<>();
    criteria.put(ObjectMetaDataManager.NAME_FIELD, env.getName());
    criteria.put(ObjectMetaDataManager.REMOVED_FIELD, new Condition(ConditionType.NULL));
    List<?> existingEnv = rm.list(type, criteria, null);
    if (!existingEnv.isEmpty()) {
      ValidationErrorCodes.throwValidationError(ValidationErrorCodes.NOT_UNIQUE, "name");
    }
    return super.create(type, request, next);
  }