diff options
Diffstat (limited to 'src/site.clj')
| -rw-r--r-- | src/site.clj | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/site.clj b/src/site.clj index e38020a..f88afaf 100644 --- a/src/site.clj +++ b/src/site.clj @@ -1000,23 +1000,36 @@ WHERE u.user_id = ANY(?)" favs (reduce (fn [m fav] (assoc m (str (fav :message_id)) (fav :content))) {} raw-favs)]
(str "RawFavs=" (json-str favs))))
-(defn ghetto-search-query [num-tokens]
+(defn search-query [num-tokens]
(str "select
url from image_urls
where url ilike " (str-join " and url ilike " (take num-tokens (repeat "?"))) "
order by last_posted desc
limit 200;"))
-(def *ghetto-search-regex* #"^[A-Za-z0-9\-_.+]*$")
+;; note: _ is a wildcard in a postgres 'like' query...
+(defn search-replace-weird-chars [token]
+ (str (.replaceAll token "[^A-Za-z0-9\\-.=+]" "_"))
+)
+
+;; timb: this can be called with a callback or not...
+;;
+;; dump.fm/cmd/search/foo -> [result, result]
+;; cons: can only be ajax get'd from the same domain
+;;
+;; dump.fm/cmd/search/foo?callback=someFunc -> someFunc([result, result])
+;; cons: has to use a <script> tag. seems to freeze browser until results returned
+;;
+(defn json-search [undecoded-url-searchterms params]
+ (let [tokens (map url-decode (re-split #"\+" undecoded-url-searchterms))
+ tokens (map search-replace-weird-chars tokens)
+ tokens (map #(str "%" %1 "%") tokens)
+ query (search-query (count tokens))
+ rows (do-select (vec (concat [query] tokens)))]
+ (if (:callback params)
+ (str (:callback params) "(" (json-str rows) ")")
+ (json-str rows))))
-(defn json-ghetto-search [undecoded-url-searchterms]
- (if (re-matches *ghetto-search-regex* undecoded-url-searchterms)
- (let [tokens (map url-decode (re-split #"\+" undecoded-url-searchterms))
- tokens (map #(str "%" %1 "%") tokens)
- query (ghetto-search-query (count tokens))
- rows (do-select (vec (concat [query] tokens)))]
- (str "Search.searchResult(" (json-str rows) ")"))
- (str "Search.searchError('sorry, no fancy characters')")))
;; Local testing
@@ -1279,7 +1292,7 @@ WHERE u.user_id = ANY(?)" (GET "/reports" (list-reports-dir session))
(GET "/reports/:file" (show-report session (params :file)))
- (GET "/cmd/ghettosearch/:searchterm" (json-ghetto-search (undecoded-url-piece (request-url request) 2)))
+ (GET "/cmd/search/:searchterm" (json-search (undecoded-url-piece (request-url request) 2) params))
(GET "/search" (serve-template "search_files" session))
;; Memes
|
