diff --git a/api/hash-intelligence.go b/api/hash-intelligence.go index 2a34d1898c0bb005ac4b253bff447e4da9438886..97bb1d34f35c74e88d88b0dceb0af8c95f615242 100644 --- a/api/hash-intelligence.go +++ b/api/hash-intelligence.go @@ -16,6 +16,7 @@ func HashIntelligence(c *gin.Context) { var hashInt []byte var err error + var completeInt bool hash := strings.TrimSpace(c.Query("hash")) @@ -28,21 +29,23 @@ func HashIntelligence(c *gin.Context) { fmt.Println("No Cache hit") // Perform the request - hashInt, err = hashSearch(hash) + hashInt, err, completeInt = hashSearch(hash) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"Error ": "Invalid response from third party API's."}) return } - // Add the data to the database - response, err := utils.Conn.Do("SETEX", "hash:"+hash, utils.CacheDurationHash, hashInt) - if err != nil { - fmt.Println("Error adding data to redis:" + err.Error()) - logging.Logerror(err, "Error adding data to redis, hash-intelligence") + if completeInt { + // Add the data to the database + response, err := utils.Conn.Do("SETEX", "hash:"+hash, utils.CacheDurationHash, hashInt) + if err != nil { + fmt.Println("Error adding data to redis:" + err.Error()) + logging.Logerror(err, "Error adding data to redis, hash-intelligence") - } + } - fmt.Println(response) + fmt.Println(response) + } } else { @@ -76,7 +79,7 @@ func HashIntelligence(c *gin.Context) { c.Data(http.StatusOK, "application/json", hashInt) } -func hashSearch(hash string) (data []byte, err error) { +func hashSearch(hash string) (data []byte, err error, complete bool) { var wg sync.WaitGroup var responseData [2]utils.FrontendResponse2 @@ -98,12 +101,25 @@ func hashSearch(hash string) (data []byte, err error) { utils.SetResultHash(resultPointer, len(responseData)) + complete = checkIfIntelligenceCompleteHash(resultResponse, len(responseData)) hashInt, err := json.Marshal(resultResponse) if err != nil { fmt.Println(err) logging.Logerror(err, "") - return nil, err + return nil, err, complete + } + + return hashInt, nil, complete +} + +func checkIfIntelligenceCompleteHash(jsonData utils.ResultFrontendResponse, size int) (complete bool) { + complete = true + + for i := 0; i <= size-1; i++ { + if jsonData.FrontendResponse[i].EN.Status == "Awaiting analysis" || jsonData.FrontendResponse[i].EN.Status == "Error" { + complete = false + } } - return hashInt, nil + return complete } diff --git a/logs/logging.go b/logs/logging.go index a15cbcfb031f2fb732ecefb35d689bf0c680571d..1936b19b73aa00653aaa0ce1eff86e4a72095962 100644 --- a/logs/logging.go +++ b/logs/logging.go @@ -1,64 +1,66 @@ package logging import ( - "log" - //"log/syslog" - "os" + "log" + //"log/syslog" + "os" ) +//Function to handle logging of errors to errorlog file with message func Logerror(err error, msg string) { - // log to custom file - LOG_FILE := "./logs/errorlog" - // open log file - logFile, err := os.OpenFile(LOG_FILE, os.O_APPEND|os.O_RDWR|os.O_CREATE, 0644) - if err != nil { - log.Panic(err) - } - defer logFile.Close() + // log to custom file + LOG_FILE := "./logs/errorlog" + // open log file + logFile, err := os.OpenFile(LOG_FILE, os.O_APPEND|os.O_RDWR|os.O_CREATE, 0644) + if err != nil { + log.Panic(err) + } + defer logFile.Close() - // Set log out put and enjoy :) - log.SetOutput(logFile) - - // optional: log date-time, filename, and line number - log.SetFlags(log.Lshortfile | log.LstdFlags) + // Set log output file + log.SetOutput(logFile) + // log date-time, filename + log.SetFlags(log.Lshortfile | log.LstdFlags) log.Println(msg, err) } -func Loginfo(msg string){ +//Function to handle information logging to infofile +func Loginfo(msg string) { LOG_FILE := "./logs/infolog" - // open log file - logFile, err := os.OpenFile(LOG_FILE, os.O_APPEND|os.O_RDWR|os.O_CREATE, 0644) - if err != nil { - log.Panic(err) - } - defer logFile.Close() + // open log file + logFile, err := os.OpenFile(LOG_FILE, os.O_APPEND|os.O_RDWR|os.O_CREATE, 0644) + if err != nil { + log.Panic(err) + } + defer logFile.Close() - // Set log out put and enjoy :) - log.SetOutput(logFile) + // Set log output + log.SetOutput(logFile) - // optional: log date-time, filename, and line number - log.SetFlags(log.Lshortfile | log.LstdFlags) + //log date-time, filename + log.SetFlags(log.Lshortfile | log.LstdFlags) log.Println(msg) } +//Function to handle error message display to file. func Logerrorinfo(msg string) { - // log to custom file - LOG_FILE := "./logs/errorlog" - // open log file - logFile, err := os.OpenFile(LOG_FILE, os.O_APPEND|os.O_RDWR|os.O_CREATE, 0644) - if err != nil { - log.Panic(err) - } - defer logFile.Close() + // log to custom file + LOG_FILE := "./logs/errorlog" + // open log file + logFile, err := os.OpenFile(LOG_FILE, os.O_APPEND|os.O_RDWR|os.O_CREATE, 0644) + if err != nil { + log.Panic(err) + } + defer logFile.Close() - // Set log out put and enjoy :) - log.SetOutput(logFile) + // Set log output file :) + log.SetOutput(logFile) - // optional: log date-time, filename, and line number - log.SetFlags(log.Lshortfile | log.LstdFlags) + //log date-time, filename + log.SetFlags(log.Lshortfile | log.LstdFlags) log.Println(msg) } \ No newline at end of file diff --git a/threat-total/src/components/source.js b/threat-total/src/components/source.js index 6a07e7c5837d1531885d194ebec6396803af2475..138aafa2e2532f4d0e8f5604c6a40c9c2c50e19e 100644 --- a/threat-total/src/components/source.js +++ b/threat-total/src/components/source.js @@ -44,7 +44,7 @@ if (props.Data === "") { </div> </div> <div className=""> - <p>Tags: {props.Data.en.tags}</p> + <p>Tags: {t("tags")}</p> <p>{t("shortForm")} {t("content")}</p> </div> </div> diff --git a/utils/validation.go b/utils/validation.go index 144cce16b89be0a691cdc1f09ddd8d8624f8ef6e..48f145ee4e785926ad3a13f190cb58cd95aac64e 100644 --- a/utils/validation.go +++ b/utils/validation.go @@ -156,7 +156,7 @@ func SetResponseObjectAlienVaultHash(jsonResponse AlienVaultHash, response *Fron response.EN.Status = "Safe" response.EN.Content = "We have no information indicating that this file is malicious." - response.NO.Content = "Trygg" + response.NO.Status = "Trygg" response.NO.Content = "Vi har ingen informasjon som tyder på at dette er en ondsinnet fil." } else { response.EN.Status = "Risk" @@ -197,11 +197,11 @@ func SetResponseObjectHybridAnalysisHash(jsonResponse HybridAnalysishash, respon response.NO.Status = "Trygg" response.NO.Content = "I henhold til informasjon gitt av HybridAnalysis tilsier ikke denne filen noen trussel." } else { - response.EN.Status = "Unknown" //Denne må byttes til at den er ukjent // grå farge elns på frontend. + response.EN.Status = "Unknown" response.EN.Content = "This file hash is not known to Hybrid Analysis." response.NO.Status = "Ukjent" - response.NO.Status = "Denne filhashen er ukjent for Hybrid Analysis." + response.NO.Content = "Denne filhashen er ukjent for Hybrid Analysis." } fmt.Println(jsonResponse[0].Verdict) // Set the filename field if known