コード例 #1
0
static int process_request(request_rec* r) {

    char message[MESSAGE_LEN];
    sprintf(message, "Starting Tractis auth module process for url %s\n", r->uri);
    log_debug(message);

    char *enabled = is_enabled(r);
    //Not enabled
    if (enabled == NULL || strcmp(enabled,"true") !=0) {
        char buff[MESSAGE_LEN];
        sprintf(buff,"Module not enabled for given url");
        log_debug(buff);
        return DECLINED;
    } else {
        char buff[MESSAGE_LEN];
        sprintf(buff,"Module enabled for given url");
        log_debug(buff);
    }

    //Recover credentials
    char *user = get_username(r);
    char *password = get_password(r);
    char *api_key = get_api_key(r);


    if (is_debug_enabled()) {
        char debug_message[MESSAGE_LEN];
        sprintf(debug_message, "Credentials are %s:%s and api key is %s", user,password,api_key);
        log_debug(debug_message);
    }

    char* certificate = (char*)apr_table_get(r->subprocess_env, "SSL_CLIENT_CERT");

    //The certificate is not present so the client is not allowed to use the service
    if (!certificate) {
        char error_message[MESSAGE_LEN];
        log_error(401, "No certificate has been provided");
        return 401; //HTTP unauthorized
    } else {
        if (is_debug_enabled()) {
            char message[MESSAGE_LEN + strlen(certificate)];
            sprintf(message, "User provided certificate \n->%s<-",certificate);
            log_debug(message);
        }
    }

    int certificate_status = validate_certificate(r,certificate, user, password, api_key);

    if (certificate_status == VALID) return OK;
    else {
        if(is_info_enabled()) {
            char validation_result[MESSAGE_LEN];
            sprintf(validation_result, "The provided certificate reported unsuccessful validation, result code is %d", certificate_status);
            log_info(validation_result);
        }
        //Non valid auth
        return 401;
    }
}
コード例 #2
0
}

static char* get_api_key() {
  static char buffer[33];
  if (persist_exists(KEY_API_KEY)) {
    persist_read_string(KEY_API_KEY, buffer, sizeof(buffer));
    return buffer;
  }
  return "";
}

Settings settings;

void configuration_load() {
  settings = (Settings){
    .api_key = get_api_key(),
    .is_minutely = get_val_bool(KEY_IS_MINUTELY, DEFAULT_IS_MINUTELY)
  };
}

void configuration_set_is_minutely(bool value) {
  persist_write_bool(KEY_IS_MINUTELY, value);
  settings.is_minutely = value;
  forecast_queue_refresh();
}

void configuration_set_api_key(char* value) {
  persist_write_string(KEY_API_KEY, value);
  settings.is_minutely = value;
}