Created
March 19, 2011 20:33
-
-
Save maacl/877783 to your computer and use it in GitHub Desktop.
server.clj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns cmc.server | |
(:use net.cgrand.enlive-html | |
net.cgrand.moustache | |
somnium.congomongo | |
ring.util.response | |
[ring.middleware params multipart-params file reload session stacktrace] | |
[clojure.contrib logging] | |
[cmc templates handlers]) | |
(:require [clojure.contrib.io :as io]) | |
(:import [java.io File])) | |
; Globals | |
(declare routes) | |
(declare run-jetty) | |
(mongo! :db "mydb" | |
:host "192.168.1.7") | |
; Initialization | |
(def production? | |
(= "tomcat6" (System/getProperty "user.name"))) | |
(def development? | |
(not production?)) | |
(eval `(when ~(not (or production? *compile-files*)) | |
(use '~'ring.adapter.jetty) | |
(doto (Thread. #((ns-resolve '~'ring.adapter.jetty '~'run-jetty) #'routes {:port 8080})) | |
.start))) | |
; Middlewares | |
(defn wrap-if [handler pred middleware & args] | |
(if pred | |
(apply middleware handler args) | |
handler)) | |
;; thanks to lau -> http://www.bestinclass.dk/index.clj/2011/01/building-a-social-media-site.html | |
(defn wrap-security | |
[app] | |
(fn [req] | |
(let [uri (:uri req)] | |
(if (or (-> req :session :name seq) | |
(= uri "/users") | |
(= uri "/users/") | |
(= uri "/login")) | |
(app req) | |
(redirect "/app/users/?err=Not logged in"))))) | |
; Routes | |
(def cmc-application | |
(app | |
(wrap-session) | |
(wrap-if development? wrap-reload '[cmc.templates]) | |
(wrap-if development? wrap-stacktrace) | |
["app" &] | |
(app | |
(wrap-if development? wrap-file "resources") | |
(wrap-security) | |
(wrap-params) | |
["logout"] logout | |
["login"] {:get login-form | |
:post authenticate-user} | |
;;operate on collection | |
["users"] {:get get-all-users | |
:post create-new-user} | |
["users" ""] {:get get-all-users | |
:post create-new-user} | |
["users" "new"] {:get create-new-user-form} | |
["users" "new" ""] {:get create-new-user-form} | |
;;operate on a record | |
["users" id] {:get #(get-user % id) | |
:post (dispatch-on-param "_method" | |
{"update" #(update-user % id) | |
"delete" #(delete-user % id)})} | |
["users" id "edit"] {:get #(edit-user-form % id)} | |
["users" id "edit" ""] {:get #(edit-user-form % id)}))) | |
(def routes | |
(if development? | |
cmc-application | |
(app ["cmc" &] | |
cmc-application))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Slet fra linie 54 og ned, indsæt følgende istedet
(ikke testet/parantes afstemt)