Fix HOME-DIR-HANDLER and TILDE-HOME-DIR-HANDLER.
This commit is contained in:
		
							parent
							
								
									4c98437ce0
								
							
						
					
					
						commit
						f5b7f76bd6
					
				|  | @ -24,40 +24,41 @@ | ||||||
| 
 | 
 | ||||||
| (define (home-dir-handler user-public-dir) | (define (home-dir-handler user-public-dir) | ||||||
|   (lambda (path req)		 |   (lambda (path req)		 | ||||||
|     (if (pair? path) |     (if (null? path) | ||||||
|  | 	(make-http-error-response http-status/bad-request | ||||||
|  | 				  req | ||||||
|  | 				  "Path contains no home directory.") | ||||||
| 	(make-rooted-file-path-response (string-append (http-homedir (car path) req) | 	(make-rooted-file-path-response (string-append (http-homedir (car path) req) | ||||||
| 						       "/" | 						       "/" | ||||||
| 						       user-public-dir) | 						       user-public-dir) | ||||||
| 					(cdr path) | 					(cdr path) | ||||||
| 					file-serve-response | 					file-serve-response | ||||||
| 					req) | 					req)))) | ||||||
| 	(make-http-error-response http-status/bad-request |  | ||||||
| 				  req |  | ||||||
| 				  "Path contains no home directory.")))) |  | ||||||
| 
 | 
 | ||||||
| ;;; (tilde-home-dir-handler-predicate path) | ;;; (tilde-home-dir-handler user-public-dir default-path-handler) | ||||||
| ;;; (tilde-home-dir-handler user-public-dir) |  | ||||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||||
| ;;; If the car of the path is a tilde-marked home directory (e.g., "~kgk"), | ;;; If the car of the path is a tilde-marked home directory (e.g., "~kgk"), | ||||||
| ;;; do home-directory service as in HOME-DIR-HANDLER, otherwise punt to the | ;;; do home-directory service as in HOME-DIR-HANDLER, otherwise punt to the | ||||||
| ;;; default handler. | ;;; default handler. | ||||||
| 
 | 
 | ||||||
| (define (tilde-home-dir-handler-predicate path) | (define (tilde-home-dir? path req) | ||||||
|   (lambda (path) |   (and (not (null? path)) | ||||||
|     (and (pair? path)			; Is it a ~foo/... |        (let ((head (car path)))		; home-directory path? | ||||||
| 	 (let ((head (car path)))	; home-directory path? | 	 (and (> (string-length head) 0) | ||||||
| 	   (and (> (string-length head) 0) | 	      (char=? (string-ref head 0) #\~))))) | ||||||
| 		(char=? (string-ref head 0) #\~)))))) |  | ||||||
| 
 | 
 | ||||||
| (define (tilde-home-dir-handler user-public-dir) | (define (tilde-home-dir-handler user-public-dir default-ph) | ||||||
|   (lambda (path req) |   (make-request-handler | ||||||
|     (let* ((tilde-home (car path))	; Yes. |    tilde-home-dir? | ||||||
| 	   (slen (string-length tilde-home)) |    (lambda (path req) | ||||||
| 	   (subdir (string-append |      (let* ((tilde-home (car path))	; Yes. | ||||||
| 		    (http-homedir (substring tilde-home 1 slen) req) | 	    (slen (string-length tilde-home)) | ||||||
| 		    "/" | 	    (subdir (string-append | ||||||
| 		    user-public-dir))) | 		     (http-homedir (substring tilde-home 1 slen) req) | ||||||
|       (make-rooted-file-path-response subdir (cdr path) file-serve-response req)))) | 		     "/" | ||||||
|  | 		     user-public-dir))) | ||||||
|  |        (make-rooted-file-path-response subdir (cdr path) file-serve-response req))) | ||||||
|  |    default-ph)) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| ;;; Make a handler that serves files relative to a particular root | ;;; Make a handler that serves files relative to a particular root | ||||||
|  |  | ||||||
|  | @ -374,7 +374,6 @@ | ||||||
| (define-interface httpd-file-directory-handlers-interface | (define-interface httpd-file-directory-handlers-interface | ||||||
|   (export home-dir-handler |   (export home-dir-handler | ||||||
| 	  tilde-home-dir-handler | 	  tilde-home-dir-handler | ||||||
| 	  tilde-home-dir-handler-predicate |  | ||||||
| 	  rooted-file-handler | 	  rooted-file-handler | ||||||
| 	  rooted-file-or-directory-handler | 	  rooted-file-or-directory-handler | ||||||
| 	  null-path-handler)) | 	  null-path-handler)) | ||||||
|  | @ -771,6 +770,7 @@ | ||||||
| 	httpd-request | 	httpd-request | ||||||
| 	httpd-responses | 	httpd-responses | ||||||
| 	httpd-error | 	httpd-error | ||||||
|  | 	httpd-basic-handlers | ||||||
| 	httpd-read-options | 	httpd-read-options | ||||||
| 	url | 	url | ||||||
| 	htmlout | 	htmlout | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 sperber
						sperber