;;; util.lisp (in-package :seanut) (declaim (inline seanut-version generate-authorization)) (defun maybe-parse-integer (str) (or (parse-integer str :junk-allowed t) -1)) (defun string-to-keyword (str) (intern (string-upcase str) :keyword)) (defun validate-media-type (type) (car (member type *valid-media-types* :test #'string=))) (defun seanut-version () "gets the system version" #.(asdf:component-version (asdf:find-system :seanut))) (defun md5-string (str) "returns the MD5 hash of STR" (format nil "~{~X~}" (coerce (digest-sequence 'ironclad:md5 (string-to-octets str)) 'list))) (defun generate-authorization (token) "generates a properly formatted authorization header" (format nil *authorization-format* (seanut-version) (uiop:hostname) (md5-string (uiop:hostname)) (seanut-version) token)) (defmacro quit-with-message (code message &rest args) `(progn (format t ,message ,@args) (uiop:quit ,code)))