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; } }
} 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; }