From 83f73108423b9fd11ebfc1dcf8f5095f8e9ff35d Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sat, 9 Aug 2014 22:42:58 -0400 Subject: Create utility module. * guix-web/server.scm (file-extension, directory?, request-path-components): Delete them. * guix-web/util.scm: New module. --- guix-web/server.scm | 11 ++--------- guix-web/util.scm | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 guix-web/util.scm diff --git a/guix-web/server.scm b/guix-web/server.scm index 49c6a07..af9f9dc 100644 --- a/guix-web/server.scm +++ b/guix-web/server.scm @@ -17,6 +17,7 @@ (define-module (guix-web server) #:use-module (ice-9 binary-ports) + #:use-module (ice-9 match) #:use-module (srfi srfi-1) #:use-module (web http) #:use-module (web request) @@ -25,22 +26,14 @@ #:use-module (guix-web config) #:use-module (guix-web controller) #:use-module (guix-web render) + #:use-module (guix-web util) #:export (start-guix-web)) -(define (file-extension file-name) - (last (string-split file-name #\.))) - -(define (directory? filename) - (string=? filename (dirname filename))) - (define file-mime-types '(("css" . (text/css)) ("js" . (text/javascript)) ("png" . (image/png)))) -(define (request-path-components request) - (split-and-decode-uri-path (uri-path (request-uri request)))) - (define (serve-static-asset request) (let ((filename (string-join (cons guix-web-asset-dir diff --git a/guix-web/util.scm b/guix-web/util.scm new file mode 100644 index 0000000..f99eed5 --- /dev/null +++ b/guix-web/util.scm @@ -0,0 +1,43 @@ +;;; guix-web - Web interface for GNU Guix +;;; Copyright © 2014 David Thompson +;;; +;;; This program is free software: you can redistribute it and/or +;;; modify it under the terms of the GNU Affero General Public License +;;; as published by the Free Software Foundation, either version 3 of +;;; the License, or (at your option) any later version. +;;; +;;; This program is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Affero General Public License for more details. +;;; +;;; You should have received a copy of the GNU Affero General Public +;;; License along with this program. If not, see +;;; . + +(define-module (guix-web util) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (web request) + #:use-module (web uri) + #:export (parse-query-string + request-path-components + file-extension + directory?)) + +(define (parse-query-string query) + "Parse and decode the URI query string QUERY and return an alist." + (let lp ((lst (map uri-decode (string-split query (char-set #\& #\=))))) + (match lst + ((key value . rest) + (cons (cons key value) (lp rest))) + (() '())))) + +(define (request-path-components request) + (split-and-decode-uri-path (uri-path (request-uri request)))) + +(define (file-extension file-name) + (last (string-split file-name #\.))) + +(define (directory? filename) + (string=? filename (dirname filename))) -- cgit v1.2.3