parse_rust_server/routes/
features.rs1use std::sync::Arc;
8
9use axum::extract::State;
10use axum::response::{IntoResponse, Response};
11use serde_json::json;
12
13use crate::auth::Authority;
14use crate::config::{ServerConfig, REPORTED_PARSE_SERVER_VERSION};
15use crate::response::HttpError;
16
17pub async fn server_info(
18 State(config): State<Arc<ServerConfig>>,
19 authority: Authority,
20) -> Response {
21 if !authority.is_master() {
24 return HttpError::master_key_required(config.enable_sanitized_error_response)
25 .into_response();
26 }
27
28 let f = &config.features;
35 let features = json!({
36 "globalConfig": {
37 "create": f.global_config, "read": f.global_config,
38 "update": f.global_config, "delete": f.global_config,
39 },
40 "hooks": {
41 "create": f.hooks, "read": f.hooks, "update": f.hooks, "delete": f.hooks,
42 },
43 "cloudCode": { "jobs": f.cloud_code_jobs },
44 "logs": {
45 "level": f.logs, "size": f.logs, "order": f.logs, "until": f.logs, "from": f.logs,
46 },
47 "push": {
48 "immediatePush": config.has_push_support,
49 "scheduledPush": config.has_push_scheduled_support,
50 "storedPushData": config.has_push_support,
51 "pushAudiences": f.push_audiences,
52 "localization": f.push_audiences,
53 },
54 "schemas": {
55 "addField": f.schemas,
56 "removeField": f.schemas,
57 "addClass": f.schemas,
58 "removeClass": f.schemas,
59 "clearAllDataFromClass": f.schemas,
60 "exportClass": false,
63 "editClassLevelPermissions": f.schemas,
64 "editPointerPermissions": f.schemas,
65 },
66 "settings": { "securityCheck": config.security_check_enabled },
67 });
68
69 axum::Json(json!({
70 "features": features,
71 "parseServerVersion": REPORTED_PARSE_SERVER_VERSION,
72 }))
73 .into_response()
74}