about summary refs log tree commit diff
path: root/web/webserver.scm
diff options
context:
space:
mode:
Diffstat (limited to 'web/webserver.scm')
-rw-r--r--web/webserver.scm42
1 files changed, 41 insertions, 1 deletions
diff --git a/web/webserver.scm b/web/webserver.scm
index 4041f50..70459a0 100644
--- a/web/webserver.scm
+++ b/web/webserver.scm
@@ -12,6 +12,9 @@
              (srfi srfi-26)
              (rnrs io ports)
              (rnrs bytevectors)
+             (config)
+             (config api)
+             (config parser sexp)
              (web http)
              (web client)
              (web request)
@@ -393,10 +396,47 @@ otherwise search for set/group data"
               (list #:addr (inet-pton AF_INET address)
                     #:port port)))
 
+(define string->exact (compose inexact->exact string->number))
+
+(define (user-port? parsed)
+  ;; (let ((parsed (string->exact val))))
+  (and (positive? parsed) (>= parsed 1024) (<= parsed 49151)))
+
+
+(define (parse-cli-options cmd-line)
+  (let ((config (configuration (name 'gn-guile)
+                               (synopsis "gn-guile web service: provide services
+ to main Genenetwork service.")
+                               (description "gn-guile web service is a small
+service, written in GNU Guile, that provides some functionality to the main
+Genenetwork service in the background. This is not meant for direct user
+interaction.")
+                               (keywords (list
+                                          (switch (name 'write)
+                                                  (default #f)
+                                                  (test boolean?)
+                                                  (character #f))
+                                          (setting (name 'port)
+                                                   (default 8091)
+                                                   (test user-port?)
+                                                   (handler string->exact))
+                                          (setting (name 'remote-url)
+                                                   (default "git@git.genenetwork.org:/home/git/public/gn-docs")
+                                                   (test string?))
+                                          (setting (name 'local-repo-path)
+                                                   (default (string-append (dirname (getcwd)) "/gn-guile-files/gn-docs"))
+                                                   (test file-exists?))))
+                               (parser sexp-parser)
+                               (directory (list (in-cwd ".instance/"))))))
+    (getopt-config-auto cmd-line config)))
+
 (define (main args)
   (write (string-append "Starting Guile REST API " get-version " server!"))
   (write args)
   (newline)
-  (let ((listen (inexact->exact (string->number (car (cdr args))))))
+  (let* ((options (parse-cli-options args))
+         (listen (option-ref options 'port)))
+    (when (option-ref options 'write)
+      (options-write options))
     (display `("listening on" ,listen))
     (start-web-server "127.0.0.1" listen)))