|
|
@@ -0,0 +1,47 @@ |
|
|
|
(ns scan.lang.php.laravel5 |
|
|
|
(:require [clojure.string :as str] |
|
|
|
[clojure.java.io :as io])) |
|
|
|
|
|
|
|
(def |
|
|
|
^{} |
|
|
|
load-method-signature! |
|
|
|
(fn [route] |
|
|
|
(cond (.exists (io/file (:ctl route))) |
|
|
|
(let [src (slurp (:ctl route))] |
|
|
|
(->> |
|
|
|
(-> (re-pattern (str "function " (:act route) "\\((.*)\\)")) |
|
|
|
(re-find src) |
|
|
|
last |
|
|
|
(or "") |
|
|
|
(str/split #",")) |
|
|
|
(map str/trim) |
|
|
|
(filter (fn [e] (not (str/includes? e "Request")))) |
|
|
|
(into []))) |
|
|
|
:else nil))) |
|
|
|
|
|
|
|
(def |
|
|
|
^{} |
|
|
|
routes |
|
|
|
(fn [project-path] |
|
|
|
(map (fn [route] |
|
|
|
(assoc route |
|
|
|
:signature |
|
|
|
(load-method-signature! route))) |
|
|
|
(let [route-file (str project-path "/routes/web.php")] |
|
|
|
(filter |
|
|
|
(fn [e] |
|
|
|
(not (nil? e))) |
|
|
|
(map |
|
|
|
(fn [hit] |
|
|
|
(let [[_ verb raw-params] hit |
|
|
|
params (map (fn [e] (str/trim (str/escape e {\' ""}))) (str/split raw-params #",")) |
|
|
|
[route ctl] params] |
|
|
|
(if ctl |
|
|
|
{:verb verb |
|
|
|
:path route |
|
|
|
:ctl (str project-path "/app/Http/Controllers/" (str/replace (str/replace ctl #"\@(.*)" ".php") "\\" "/")) |
|
|
|
:act (str/replace ctl #"(.*)\@" "")} |
|
|
|
nil))) |
|
|
|
(re-seq |
|
|
|
#"router->(.*)\((.*)\)" |
|
|
|
(slurp route-file)))))))) |