Demonstration release of the principles underpinning krsd.
[krsd] / src / config.h
index d810a0e..c18cbe5 100644 (file)
@@ -31,7 +31,7 @@
  */
 
 // address & port to bind to
-#define RS_ADDRESS NULL
+#define RS_ADDRESS "0.0.0.0"
 extern int rs_port;
 #define RS_PORT rs_port
 
@@ -40,58 +40,33 @@ extern struct event_base *rs_event_base;
 #define RS_EVENT_BASE rs_event_base
 
 // only used for webfinger result at the moment
-#define RS_SCHEME "http"
+extern char *rs_scheme;
+#define RS_SCHEME rs_scheme
 extern char *rs_hostname;
 #define RS_HOSTNAME rs_hostname
-#define RS_STORAGE_API "draft-dejong-remotestorage-00"
+#define RS_STORAGE_API "draft-dejong-remotestorage-01"
 #define RS_AUTH_METHOD "http://tools.ietf.org/html/rfc6749#section-4.2"
-
-// static auth token
-#define RS_TOKEN "static-token-for-now"
-
-// request path to the storage-root
-#define RS_STORAGE_PATH "/storage"
-#define RS_STORAGE_PATH_LEN 8
-// request path to the authorization handler
-#define RS_AUTH_PATH "/auth"
-#define RS_AUTH_PATH_LEN 5
-// request path to webfinger handler
-#define RS_WEBFINGER_PATH "/.well-known/webfinger"
-#define RS_WEBFINGER_PATH_LEN 22
-
-// path to the storage-root on the filesystem
-extern char *rs_storage_root;
-#define RS_STORAGE_ROOT rs_storage_root
-extern int rs_storage_root_len;
-#define RS_STORAGE_ROOT_LEN rs_storage_root_len
-
-// serving home directories
-extern int rs_serve_homes;
-#define RS_SERVE_HOMES rs_serve_homes
-extern char *rs_serve_homes_dir;
-#define RS_SERVE_HOMES_DIR rs_serve_homes_dir
-extern gid_t rs_serve_homes_gid;
-#define RS_SERVE_HOMES_GID rs_serve_homes_gid
+#if 0
+extern char *rs_auth_uri;
+#define RS_AUTH_URI rs_auth_uri
+extern int rs_auth_uri_len;
+#define RS_AUTH_URI_LEN rs_auth_uri_len
+#endif
+extern int rs_webfinger_enabled;
+#define RS_WEBFINGER_ENABLED rs_webfinger_enabled
 
 // magic database file to use (NULL indicates system default)
 #define RS_MAGIC_DATABASE NULL
 
 // CORS header values
 #define RS_ALLOW_ORIGIN "*"
-#define RS_ALLOW_HEADERS "Authorization, Content-Type, Content-Length, ETag"
-#define RS_ALLOW_METHODS "GET, PUT, DELETE"
+#define RS_ALLOW_HEADERS "Authorization, Content-Type, If-Match, If-None-Match, Origin"
+#define RS_ALLOW_METHODS "HEAD, GET, PUT, DELETE"
+#define RS_EXPOSE_HEADERS "Content-Type, Content-Length, ETag"
 
 // permissions for newly created files
 #define RS_FILE_CREATE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
 
-// whether to change root before serving any files
-extern int rs_chroot;
-#define RS_CHROOT rs_chroot
-extern char *rs_real_storage_root;
-extern int rs_real_storage_root_len;
-#define RS_REAL_STORAGE_ROOT rs_real_storage_root
-#define RS_REAL_STORAGE_ROOT_LEN rs_real_storage_root_len
-
 // log file
 extern FILE *rs_log_file;
 #define RS_LOG_FILE rs_log_file
@@ -106,44 +81,42 @@ extern char *rs_pid_file_path;
 extern int rs_detach;
 #define RS_DETACH rs_detach
 
-// user ID / group ID to set after binding socket
-extern uid_t rs_set_uid;
-#define RS_SET_UID rs_set_uid
-extern gid_t rs_set_gid;
-#define RS_SET_GID rs_set_gid
+extern char *rs_home_serve_root;
+#define RS_HOME_SERVE_ROOT rs_home_serve_root
+extern int rs_home_serve_root_len;
+#define RS_HOME_SERVE_ROOT_LEN rs_home_serve_root_len
 
-/*
- * A NOTE ABOUT TOKEN SIZES:
- *
- * The token sizes are given in bytes here. These are the true numbers of random
- * bytes that will be generated for each token. The actual tokens transferred on the
- * wire will be encoded though (either hex- or base64-encoded, not sure yet), so will
- * be larger than those number of bytes.
- *
- * Before changing these numbers, keep in mind that while the CSRF token will only
- * be transferred twice (during authorization GET and POST), the bearer token is
- * transferred upon *every* request for data in storage.
- *
- */
+extern char *rs_static_dir;
+#define RS_STATIC_DIR rs_static_dir
+extern int rs_static_dir_len;
+#define RS_STATIC_DIR_LEN rs_static_dir_len
+
+extern struct rs_header rs_default_headers;
+#define RS_DEFAULT_HEADERS rs_default_headers
+
+#define RS_MIN_UID 1000
+
+//#define RS_AUTH_DB_PATH "/var/lib/rs-serve/authorizations"
+//#define RS_META_DB_PATH "/var/lib/rs-serve/meta"
+#define RS_AUTH_DB_PATH "var/authorizations"
+#define RS_META_DB_PATH "var/meta"
+
+extern int rs_use_xattr;
+#define RS_USE_XATTR rs_use_xattr
+
+extern int rs_experimental;
+#define RS_EXPERIMENTAL rs_experimental
+
+extern int rs_use_ssl;
+#define RS_USE_SSL rs_use_ssl
+extern char *rs_ssl_cert_path;
+#define RS_SSL_CERT_PATH rs_ssl_cert_path
+extern char *rs_ssl_key_path;
+#define RS_SSL_KEY_PATH rs_ssl_key_path
+extern char *rs_ssl_ca_path;
+#define RS_SSL_CA_PATH rs_ssl_ca_path
 
-// number of bytes to use for CSRF token
-#define RS_CSRF_TOKEN_SIZE 32
-// number of bytes to use for bearer token
-#define RS_BEARER_TOKEN_SIZE 32
-
-// number of bytes for session ID
-// (stored in cookie, used to associate request with correct CSRF token)
-#define RS_SESSION_ID_SIZE 16
-// cookie name for storing the session ID
-#define RS_SESSION_ID_NAME "rs_serve_session_id"
-#define RS_SESSION_ID_NAME_LEN 19
-
-// using hex-encoded tokens for now, so 2 bytes per byte.
-#define TOKEN_BYTESIZE(length) (length * 2)
-
-// maximum number of bytes to POST to /auth
-// (must fit the token, the requested scope, the redirect_uri, plus the parameter
-//  keys for that and the URI encoding overhead)
-#define RS_MAX_AUTH_BODY_SIZE 4096
+void init_config(int argc, char **argv);
+void cleanup_config(void);
 
 #endif /* !RS_CONFIG_H */