diff --git a/add-tool b/add-tool new file mode 100755 index 0000000..cfee01c Binary files /dev/null and b/add-tool differ diff --git a/add-tool.go b/add-tool.go new file mode 100644 index 0000000..bdd1fbb --- /dev/null +++ b/add-tool.go @@ -0,0 +1,172 @@ +package main + +import ( + "bufio" + "encoding/json" + "flag" + "fmt" + "golang.org/x/net/html" + "io" + "io/ioutil" + "net/http" + "net/url" + "os" + "strconv" + "strings" +) + +/* +template +| [WebHackersWeapons](https://github.com/hahwul/WebHackersWeapons) | template | ![](https://img.shields.io/github/stars/hahwul/WebHackersWeapons) | ![](https://img.shields.io/github/languages/top/hahwul/WebHackersWeapons) | ![](https://img.shields.io/github/repo-size/hahwul/WebHackersWeapons)
![](https://img.shields.io/github/license/hahwul/WebHackersWeapons)
![](https://img.shields.io/github/forks/hahwul/WebHackersWeapons)
![](https://img.shields.io/github/watchers/hahwul/WebHackersWeapons) | +*/ + +type Tools struct { + Type, Data string +} + +func isTitleElement(n *html.Node) bool { + return n.Type == html.ElementNode && n.Data == "title" +} + +func traverse(n *html.Node) (string, bool) { + if isTitleElement(n) { + return n.FirstChild.Data, true + } + + for c := n.FirstChild; c != nil; c = c.NextSibling { + result, ok := traverse(c) + if ok { + return result, ok + } + } + + return "", false +} + +func GetHtmlTitle(r io.Reader) (string, bool) { + doc, err := html.Parse(r) + if err != nil { + panic("Fail to parse html") + } + + return traverse(doc) +} + +func writeJSON(category string, name string, data string) { + jsonFile, err := os.Open("data.json") + // if we os.Open returns an error then handle it + if err != nil { + fmt.Println(err) + } + fmt.Println("Successfully Opened data.json") + // defer the closing of our jsonFile so that we can parse it later on + defer jsonFile.Close() + byteValue, _ := ioutil.ReadAll(jsonFile) + var result map[string]interface{} + json.Unmarshal([]byte(byteValue), &result) + tool := Tools{ + Type: category, + Data: data, + } + result[name] = tool + file, _ := json.MarshalIndent(result, "", " ") + _ = ioutil.WriteFile("data.json", file, 0644) +} + +func main() { + repourl := flag.String("url", "", "github / gitlab / bitbucket url") + first := flag.Bool("isFirst", false, "if you add new type, it use") + flag.Parse() + if flag.NFlag() == 0 { + flag.Usage() + return + } + u, err := url.Parse(*repourl) + if err != nil { + panic(err) + } + + if u.Host == "github.com" { + //fmt.Println(u.Path) + name := strings.Split(u.Path, "/")[2] + //fmt.Println(name) + desc := "asdf" + resp, err := http.Get(*repourl) + if err != nil { + panic(err) + } + defer resp.Body.Close() + + if title, ok := GetHtmlTitle(resp.Body); ok { + desc = strings.Split(string(title), ": ")[1] + } else { + println("Fail to get HTML title") + } + + typeFile, err := os.Open("type.lst") + // if we os.Open returns an error then handle it + if err != nil { + fmt.Println(err) + } + fmt.Println("Successfully Opened type.lst") + // defer the closing of our jsonFile so that we can parse it later on + defer typeFile.Close() + index := 0 + m := make(map[int]string) + reader := bufio.NewReader(typeFile) + for { + line, isPrefix, err := reader.ReadLine() + if isPrefix || err != nil { + break + } + m[index] = string(line) + fmt.Println("[" + strconv.Itoa(index) + "] " + string(line)) + index = index + 1 + } + var choicetype int + fmt.Println("What is type?") + _, err = fmt.Scan(&choicetype) + fmt.Println(m[choicetype]) + writeJSON(m[choicetype], name, "| ["+name+"]("+*repourl+") | "+desc+" | ![](https://img.shields.io/github/stars"+u.Path+") | ![](https://img.shields.io/github/languages /top"+u.Path+") | ![](https://img.shields.io/github/repo-size"+u.Path+")
![](https://img.shields.io/github/license"+u.Path+")
![](https://img.shields.io/ github/forks"+u.Path+")
![](https://img.shields.io/github/watchers"+u.Path+") |") + } else { + reader := bufio.NewReader(os.Stdin) + fmt.Println("[+] What is name?") + name, _ := reader.ReadString('\n') + name = strings.TrimRight(name, "\r\n") + fmt.Println("[+] Input Description?") + udesc, _ := reader.ReadString('\n') + udesc = strings.TrimRight(udesc, "\r\n") + + typeFile, err := os.Open("type.lst") + // if we os.Open returns an error then handle it + if err != nil { + fmt.Println(err) + } + fmt.Println("Successfully Opened type.lst") + // defer the closing of our jsonFile so that we can parse it later on + defer typeFile.Close() + index := 0 + m := make(map[int]string) + readerF := bufio.NewReader(typeFile) + for { + line, isPrefix, err := readerF.ReadLine() + if isPrefix || err != nil { + break + } + m[index] = string(line) + fmt.Println("[" + strconv.Itoa(index) + "] " + string(line)) + index = index + 1 + } + var choicetype int + fmt.Println("What is type?") + _, err = fmt.Scan(&choicetype) + fmt.Println(m[choicetype]) + writeJSON(m[choicetype], name, "| ["+name+"]("+*repourl+") | "+udesc+"|it's | not | github:dog:|") + } + + if *first { + fmt.Println("| Name | Description | Popularity | Language | Metadata |") + fmt.Println("| ---------- | :---------- | :----------: | :----------: | :----------: |") + } + //fmt.Println("| [" + name + "](" + *repourl + ") | " + desc + " | ![](https://img.shields.io/github/stars" + u.Path + ") | ![](https://img.shields.io/github/languages/top" + u.Path + ") | ![](https://img.shields.io/github/repo-size" + u.Path + ")
![](https://img.shields.io/github/license" + u.Path + ")
![](https://img.shields.io/github/forks" + u.Path + ")
![](https://img.shields.io/github/watchers" + u.Path + ") |") +} diff --git a/data.json b/data.json index 0db3279..59612b1 100644 --- a/data.json +++ b/data.json @@ -1,3 +1,6 @@ { - -} + "Xspear": { + "Type": "XSS", + "Data": "| [Xspear](https://github.com/hahwul/Xspear) | Powerfull XSS Scanning and Parameter analysis tool\u0026gem | ![](https://img.shields.io/github/stars/hahwul/Xspear) | ![](https://img.shields.io/github/languages /top/hahwul/Xspear) | ![](https://img.shields.io/github/repo-size/hahwul/Xspear)\u003cbr\u003e![](https://img.shields.io/github/license/hahwul/Xspear) \u003cbr\u003e ![](https://img.shields.io/ github/forks/hahwul/Xspear) \u003cbr\u003e ![](https://img.shields.io/github/watchers/hahwul/Xspear) |" + } +} \ No newline at end of file diff --git a/weapon-md b/weapon-md deleted file mode 100755 index a00935a..0000000 Binary files a/weapon-md and /dev/null differ diff --git a/weapon-md.go b/weapon-md.go deleted file mode 100644 index 4c64505..0000000 --- a/weapon-md.go +++ /dev/null @@ -1,79 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "golang.org/x/net/html" - "io" - "net/http" - "net/url" - "strings" -) - -/* -template -| [WebHackersWeapons](https://github.com/hahwul/WebHackersWeapons) | template | ![](https://img.shields.io/github/stars/hahwul/WebHackersWeapons) | ![](https://img.shields.io/github/languages/top/hahwul/WebHackersWeapons) | ![](https://img.shields.io/github/repo-size/hahwul/WebHackersWeapons)
![](https://img.shields.io/github/license/hahwul/WebHackersWeapons)
![](https://img.shields.io/github/forks/hahwul/WebHackersWeapons)
![](https://img.shields.io/github/watchers/hahwul/WebHackersWeapons) | -*/ - -func isTitleElement(n *html.Node) bool { - return n.Type == html.ElementNode && n.Data == "title" -} - -func traverse(n *html.Node) (string, bool) { - if isTitleElement(n) { - return n.FirstChild.Data, true - } - - for c := n.FirstChild; c != nil; c = c.NextSibling { - result, ok := traverse(c) - if ok { - return result, ok - } - } - - return "", false -} - -func GetHtmlTitle(r io.Reader) (string, bool) { - doc, err := html.Parse(r) - if err != nil { - panic("Fail to parse html") - } - - return traverse(doc) -} - -func main() { - repourl := flag.String("url", "", "github / gitlab / bitbucket url") - first := flag.Bool("isFirst", false, "if you add new type, it use") - flag.Parse() - if flag.NFlag() == 0 { - flag.Usage() - return - } - u, err := url.Parse(*repourl) - if err != nil { - panic(err) - } - - //fmt.Println(u.Path) - name := strings.Split(u.Path, "/")[2] - //fmt.Println(name) - desc := "asdf" - resp, err := http.Get(*repourl) - if err != nil { - panic(err) - } - defer resp.Body.Close() - - if title, ok := GetHtmlTitle(resp.Body); ok { - desc = strings.Split(string(title), ": ")[1] - } else { - println("Fail to get HTML title") - } - if *first { - fmt.Println("| Name | Description | Popularity | Language | Metadata |") - fmt.Println("| ---------- | :---------- | :----------: | :----------: | :----------: |") - } - fmt.Println("| [" + name + "](" + *repourl + ") | " + desc + " | ![](https://img.shields.io/github/stars" + u.Path + ") | ![](https://img.shields.io/github/languages/top" + u.Path + ") | ![](https://img.shields.io/github/repo-size" + u.Path + ")
![](https://img.shields.io/github/license" + u.Path + ")
![](https://img.shields.io/github/forks" + u.Path + ")
![](https://img.shields.io/github/watchers" + u.Path + ") |") -}