Index: session.scm ================================================================== --- session.scm +++ session.scm @@ -24,11 +24,11 @@ ;; Concept of order num incremented with each page access ;; if a branch is taken then a new session would need to be created ;; ;; make-vector-record session session dbtype dbinit conn params path-params session-key session-id domain toppage page curr-page content-type page-type sroot twikidir pagedat alt-page-dat pagevars pagevars-before sessionvars sessionvars-before globalvars globalvars-before logpt formdat request-method session-cookie curr-err log-port logfile seen-pages page-dir-style debugmode -(define (make-sdat)(make-vector 35)) +(define (make-sdat)(make-vector 36)) (define (sdat-get-dbtype vec) (vector-ref vec 0)) (define (sdat-get-dbinit vec) (vector-ref vec 1)) (define (sdat-get-conn vec) (vector-ref vec 2)) (define (sdat-get-pgconn vec) (vector-ref (vector-ref vec 2) 1)) (define (sdat-get-params vec) (vector-ref vec 3)) @@ -61,10 +61,11 @@ (define (sdat-get-seen-pages vec) (vector-ref vec 30)) (define (sdat-get-page-dir-style vec) (vector-ref vec 31)) (define (sdat-get-debugmode vec) (vector-ref vec 32)) (define (sdat-get-shared-hash vec) (vector-ref vec 33)) (define (sdat-get-script vec) (vector-ref vec 34)) +(define (sdat-get-force-ssl vec) (vector-ref vec 35)) (define (session:get-shared vec varname) (hash-table-ref/default (vector-ref vec 33) varname #f)) (define (sdat-set-dbtype! vec val)(vector-set! vec 0 val)) @@ -100,10 +101,11 @@ (define (sdat-set-seen-pages! vec val)(vector-set! vec 30 val)) (define (sdat-set-page-dir-style! vec val)(vector-set! vec 31 val)) (define (sdat-set-debugmode! vec val)(vector-set! vec 32 val)) (define (sdat-set-shared-hash! vec val)(vector-set! vec 33 val)) (define (sdat-set-script! vec val)(vector-set! vec 34 val)) +(define (sdat-set-force-ssl! vec val)(vector-set! vec 35 val)) (define (session:set-shared! vec varname val) (hash-table-set! (vector-ref vec 33) varname val)) ;; The global session @@ -147,19 +149,21 @@ (dbinit (s:find-param 'dbinit configdat)) (domain (s:find-param 'domain configdat)) (twikidir (s:find-param 'twikidir configdat)) (page-dir (s:find-param 'page-dir-style configdat)) (debugmode (s:find-param 'debugmode configdat)) - (script (s:find-param 'script configdat))) + (script (s:find-param 'script configdat)) + (force-ssl (s:find-param 'force-ssl configdat))) (if sroot (sdat-set-sroot! self sroot)) (if logfile (sdat-set-logfile! self logfile)) (if dbtype (sdat-set-dbtype! self dbtype)) (if dbinit (sdat-set-dbinit! self dbinit)) (if domain (sdat-set-domain! self domain)) (if twikidir (sdat-set-twikidir! self twikidir)) (if debugmode (sdat-set-debugmode! self debugmode)) (if script (sdat-set-script! self script)) + (if force-ssl (sdat-set-force-ssl! self force-ssl)) (sdat-set-page-dir-style! self page-dir) ;; (print "configdat: ")(pp configdat) (if debugmode (session:log self "sroot: " sroot " logfile: " logfile " dbtype: " dbtype " dbinit: " dbinit " domain: " domain " page-dir-style: " page-dir)) @@ -694,11 +698,13 @@ (string-intersperse newresult "&") (loop (car tail)(cadr tail)(cddr tail) newresult)))))) (define (session:link-to self page params) (let* ((https-host (get-environment-variable "HTTPS_HOST")) - (server (or https-host ;; Assuming HTTPS_HOST is only set if available + (force-ssl (sdat-get-force-ssl self)) + (server (or (sdat-get-domain self) + https-host ;; Assuming HTTPS_HOST is only set if available (get-environment-variable "HTTP_HOST") (get-environment-variable "SERVER_NAME"))) (force-script (sdat-get-script self)) (script (or force-script (let ((script-name (string-split (get-environment-variable "SCRIPT_NAME") "/"))) @@ -706,13 +712,13 @@ (string-append (car script-name) "/" (cadr script-name)) (get-environment-variable "SCRIPT_NAME"))))) ;; build script name from first two elements. This is a hangover from before I used ? in the URL.) (session-key (sdat-get-session-key self)) (paramstr (session:param->string params))) ;; (session:log self "server=" server " script=" script " page=" page) - (string-append (if https-host - "https://" - "http://") + (string-append (if (or https-host force-ssl) + "https://" + "http://") server "/" script "/" page "?" paramstr))) ;; "/sn=" session-key))) (define (session:cgi-out self) (let* ((content (list (sdat-get-content-type self))) ;; '("Content-type: text/html; charset=iso-8859-1\n\n")) (header (let ((cookie (sdat-get-session-cookie self)))