/* ========== Cariddi ========== This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. @Repository: https://github.com/edoardottt/cariddi @Author: edoardottt, https://edoardottt.com @License: https://github.com/edoardottt/cariddi/blob/main/LICENSE */ package output import ( "fmt" "html" "log" "os" "time" fileUtils "github.com/edoardottt/cariddi/internal/file" ) const ( HTMLBanner = ` Cariddi Scan Results

Cariddi - Security Scanner Report

` HTMLBannerFooter = `
` ) // BannerHTML appends the initial banner to html file. func BannerHTML(filename string) { file, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, fileUtils.Permission0644) if err != nil { log.Println(err) os.Exit(1) } _, err = file.WriteString(HTMLBanner) if err != nil { log.Fatal(err) } file.Close() } // WriteSummaryCard adds a summary card. func WriteSummaryCard(filename string, results, secrets, endpoints, extensions, errors, infos int) { file, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, fileUtils.Permission0644) if err != nil { log.Println(err) os.Exit(1) } content := fmt.Sprintf(`

Scan Summary

Scan timestamp: %s

`, time.Now().Format("2006-01-02 15:04:05"), results, secrets, endpoints, extensions, errors, infos) _, err = file.WriteString(content) if err != nil { file.Close() log.Println(err) os.Exit(1) } file.Close() } // AppendOutputToHTML appends the output to html file. func AppendOutputToHTML(output string, status string, filename string, isLink bool) { file, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, fileUtils.Permission0644) if err != nil { log.Println(err) os.Exit(1) } if isLink { var statusColor string if status != "" { if string(status[0]) == "2" || string(status[0]) == "3" { statusColor = "

" + html.EscapeString(status) + "

" } else { statusColor = "

" + html.EscapeString(status) + "

" } } else { statusColor = status } if _, err := file.WriteString("
  • " + html.EscapeString(output) + " " + html.EscapeString(statusColor) + "
  • \n"); err != nil { log.Fatal(err) } } else { if _, err := file.WriteString("
  • " + html.EscapeString(output) + "
  • \n"); err != nil { log.Fatal(err) } } file.Close() } // HeaderHTML appends the html header. func HeaderHTML(header string, filename string) { file, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, fileUtils.Permission0644) if err != nil { log.Println(err) os.Exit(1) } if _, err := file.WriteString("

    " + html.EscapeString(header) + "

    \n"); err != nil { log.Fatal(err) } file.Close() } // BannerFooterHTML appends the final footer. func BannerFooterHTML(filename string) { file, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, fileUtils.Permission0644) if err != nil { log.Println(err) } _, err = file.WriteString(HTMLBannerFooter) if err != nil { log.Fatal(err) } file.Close() }