From d79d59073b1a5379a50b74d34c4ffb7204554ad2 Mon Sep 17 00:00:00 2001 From: Aleksejs Date: Fri, 20 Dec 2024 16:42:47 +0200 Subject: [PATCH] Option to show partial search results when limit is triggered --- README.md | 1 - account.go | 3 +++ api.go | 15 +++++++++--- assets/css/profile.css | 3 +++ assets/js/charts.js | 2 +- assets/js/options.js | 1 + assets/tmpl/profile.html | 24 +++++++++++++++---- docs/search.md | 14 ++++++++++- files/features.yaml | 7 +++--- go.mod | 2 +- go.sum | 4 ++-- plugins/src/abuseipdb/abuseipdb.go | 2 +- plugins/src/abuseipdb/plugin.go | 2 +- plugins/src/circl_passive_ssl/passive_ssl.go | 2 +- plugins/src/circl_passive_ssl/plugin.go | 2 +- plugins/src/elasticsearch.v7/elasticsearch.go | 2 +- plugins/src/elasticsearch.v7/plugin.go | 2 +- plugins/src/elasticsearch.v8/elasticsearch.go | 2 +- plugins/src/elasticsearch.v8/plugin.go | 2 +- plugins/src/file/csv/csv.go | 2 +- plugins/src/file/csv/plugin.go | 2 +- plugins/src/hashlookup/hashlookup.go | 2 +- plugins/src/hashlookup/plugin.go | 2 +- plugins/src/http/http.go | 2 +- plugins/src/http/plugin.go | 2 +- plugins/src/ipinfo/ipinfo.go | 2 +- plugins/src/ipinfo/plugin.go | 2 +- plugins/src/misp/misp.go | 2 +- plugins/src/misp/plugin.go | 2 +- plugins/src/mongodb/mongodb.go | 2 +- plugins/src/mongodb/plugin.go | 2 +- plugins/src/mysql/mysql.go | 2 +- plugins/src/mysql/plugin.go | 2 +- plugins/src/pastelyzer/pastelyzer.go | 2 +- plugins/src/pastelyzer/plugin.go | 2 +- plugins/src/phishtank/phishtank.go | 2 +- plugins/src/phishtank/plugin.go | 2 +- plugins/src/postgresql/plugin.go | 2 +- plugins/src/postgresql/postgresql.go | 2 +- plugins/src/rest/plugin.go | 2 +- plugins/src/rest/rest.go | 2 +- plugins/src/shodan/plugin.go | 2 +- plugins/src/shodan/shodan.go | 2 +- plugins/src/sqlite/plugin.go | 2 +- plugins/src/sqlite/sqlite.go | 2 +- plugins/src/template/template.go | 2 +- profile.go | 14 ++++++++++- upload.go | 2 +- websocket.go | 4 ++-- 49 files changed, 110 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index 2c6f08a..6c89896 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,6 @@ Response example for the first query: - [ ] Edges groups styling. **TODO** from `search.js`. Implement https://github.com/visjs/vis-network/issues/1229 - [ ] Data sources access based on user groups permissions - [ ] API can return an image instead of JSON -- [ ] Option to show partial results when limit is triggered - [ ] Data source plugins: - [ ] RTIR - [ ] MS SQL diff --git a/account.go b/account.go index c8c7d37..0d926df 100644 --- a/account.go +++ b/account.go @@ -91,6 +91,9 @@ type Options struct { // Will be a part of each SQL query, set to 0 to disable Limit int `bson:"limit"` + // Whether to show partial search results when limit exceeded + ShowLimited bool `bson:"showLimited"` + // Whether to display queries debug info Debug bool `bson:"debug"` } diff --git a/api.go b/api.go index b09ecb8..dad1a81 100644 --- a/api.go +++ b/api.go @@ -34,6 +34,7 @@ func apiHandler(w http.ResponseWriter, r *http.Request) { // - SQL request uuid := r.FormValue("uuid") format := r.FormValue("format") + showLimited := false includeDebug := false sql := r.FormValue("sql") @@ -67,6 +68,11 @@ func apiHandler(w http.ResponseWriter, r *http.Request) { return } + // Show partial results when limit exceeded + if r.FormValue("show_limited") == "true" { + showLimited = true + } + // Disable debug info by default if r.FormValue("debug") == "true" { includeDebug = true @@ -88,7 +94,7 @@ func apiHandler(w http.ResponseWriter, r *http.Request) { source := match[1] // Query data sources for the new relations - response = querySources(source, sql, includeDebug, account.Username) + response = querySources(source, sql, showLimited, includeDebug, account.Username) if len(response.Stats) != 0 { if response.Error != "" { @@ -106,7 +112,7 @@ func apiHandler(w http.ResponseWriter, r *http.Request) { /* * Query all the requested data sources */ -func querySources(source, sql string, includeDebug bool, username string) *APIresponse { +func querySources(source, sql string, showLimited, includeDebug bool, username string) *APIresponse { // Response to send back response := &APIresponse{ @@ -173,7 +179,10 @@ func querySources(source, sql string, includeDebug bool, username string) *APIre } response.Lock() - response.Relations = append(response.Relations, result...) + + if stat == nil || (stat != nil && showLimited) { + response.Relations = append(response.Relations, result...) + } if includeDebug { response.Debug[collector.Conf().Name] = debug diff --git a/assets/css/profile.css b/assets/css/profile.css index 30e71da..f366f4d 100644 --- a/assets/css/profile.css +++ b/assets/css/profile.css @@ -22,6 +22,9 @@ margin-top: 9px; position: absolute; } +.ui.toggle.checkbox { + margin-top: 9px; +} .ui.grid>.row.username { padding-bottom: 2rem; diff --git a/assets/js/charts.js b/assets/js/charts.js index 746dd8f..e4d5993 100644 --- a/assets/js/charts.js +++ b/assets/js/charts.js @@ -54,7 +54,7 @@ class Charts { this.header.innerHTML = '' + data.source.toUpperCase() + ' returns too many results. '; if (issql) this.header.innerHTML += 'Add filters manually or use the charts (based on limited data) to reduce the amount of returned data. '; - this.header.innerHTML += 'Close the charts to see the possible data from the other sources'; + this.header.innerHTML += 'Close the charts to see the possible limited data'; this.container.style.display = 'block'; diff --git a/assets/js/options.js b/assets/js/options.js index 4a4bfc6..9020a4c 100644 --- a/assets/js/options.js +++ b/assets/js/options.js @@ -37,6 +37,7 @@ class Options { save() { const options = document.getElementById('stabilization').value + ',' + document.getElementById('limit').value + ',' + + $('.ui.checkbox.show_limited').checkbox('is checked') + ',' + $('.ui.checkbox.debug').checkbox('is checked'); // Send to the server diff --git a/assets/tmpl/profile.html b/assets/tmpl/profile.html index 1567849..d8773af 100644 --- a/assets/tmpl/profile.html +++ b/assets/tmpl/profile.html @@ -7,10 +7,10 @@ - - - - + + + + @@ -91,6 +91,22 @@

+
+

Whether to show partial search results when limit exceeded. By default only statistics charts are displayed to update the query when possible. But in some cases you may want to see partial results too.

+
+ +
+
+ Show limited results: +
+
+
+ + +
+
+
+

Whether to display queries debug info. During the user interaction many actions happen like SQL to Elasticsearch JSON query conversion, fields name adaptation, etc. Each plugin can save progress information and return to the user. Accessible in a browser's console.

diff --git a/docs/search.md b/docs/search.md index 495d0b5..d67c148 100644 --- a/docs/search.md +++ b/docs/search.md @@ -11,7 +11,8 @@ 11. [Direct API usage](#direct-api-usage) 12. [Limit the amount of returned data](#limit-the-amount-of-returned-data) 13. [Order of returned data](#order-of-returned-data) -14. [Output format](#output-format) +14. [Show partial search results](#show-partial-search-results) +15. [Output format](#output-format) ![datasources](assets/img/datasources.png) @@ -200,6 +201,17 @@ However, `LIMIT` is not a total amount of graph nodes or edges - it goes to the Direct queries also can include `ORDER BY field` or `ORDER BY field DESC`. The default sorting method is alphabetical. However, `DESC` can be used for displaying rows in descending order. +## Show partial search results + +When search results limit exceeded - partial results can be displayed. By default only statistics charts are displayed to update the query when possible. But in some cases you may want to see partial results too. + +Example in API query: +```sh +curl -XGET 'https://server/api?uuid=09e545f2-3986-493c-983a-e39d310f695a&show_limited=true&sql=FROM+people+WHERE+age>30' +``` +... where `show_limited=true` parameter enables or disables partial results. + + ## Output format By default JSON is used to represent graph relations data. However, sometimes you may need to display data as a table. In such cases the output formatting feature can be used.`json` or `table` are currently supported. diff --git a/files/features.yaml b/files/features.yaml index 5aef7a9..7043a57 100644 --- a/files/features.yaml +++ b/files/features.yaml @@ -1,7 +1,6 @@ [ - "13.11.2024", + "20.12.2024", - "Saved dashboard can be accessed directly by URL", - "Data sources dropdown shows which sources do not support SQL or datetime range", - "Latest plugins: ipinfo.io, phishtank.org" + "An option to show partial search results when limit exceeded", + "Latest plugin: Shodan" ] \ No newline at end of file diff --git a/go.mod b/go.mod index 1bbca6e..e0a4a40 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/mithrandie/csvq-driver v1.7.0 github.com/ns3777k/go-shodan/v4 v4.2.0 github.com/olekukonko/tablewriter v0.0.5 - github.com/redis/go-redis/v9 v9.5.3 + github.com/redis/go-redis/v9 v9.7.0 github.com/rs/zerolog v1.33.0 github.com/umpc/go-sortedmap v0.0.0-20180422175548-64ab94c482f4 github.com/yukithm/json2csv v0.1.2 diff --git a/go.sum b/go.sum index adb6e8d..0987099 100644 --- a/go.sum +++ b/go.sum @@ -213,8 +213,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/sftp v1.10.0/go.mod h1:NxmoDg/QLVWluQDUYG7XBZTLUpKeFa8e3aMf1BfjyHk= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/redis/go-redis/v9 v9.5.3 h1:fOAp1/uJG+ZtcITgZOfYFmTKPE7n4Vclj1wZFgRciUU= -github.com/redis/go-redis/v9 v9.5.3/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= +github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E= +github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= diff --git a/plugins/src/abuseipdb/abuseipdb.go b/plugins/src/abuseipdb/abuseipdb.go index 5d5b2fb..799a8f8 100644 --- a/plugins/src/abuseipdb/abuseipdb.go +++ b/plugins/src/abuseipdb/abuseipdb.go @@ -158,7 +158,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/abuseipdb/plugin.go b/plugins/src/abuseipdb/plugin.go index 5ec44cf..ae7a1c9 100644 --- a/plugins/src/abuseipdb/plugin.go +++ b/plugins/src/abuseipdb/plugin.go @@ -9,7 +9,7 @@ import ( */ var ( Name = "abuseipdb" - Version = "1.0.0" + Version = "1.0.1" Plugin plugin ) diff --git a/plugins/src/circl_passive_ssl/passive_ssl.go b/plugins/src/circl_passive_ssl/passive_ssl.go index 96129a4..dd7e084 100644 --- a/plugins/src/circl_passive_ssl/passive_ssl.go +++ b/plugins/src/circl_passive_ssl/passive_ssl.go @@ -158,7 +158,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/circl_passive_ssl/plugin.go b/plugins/src/circl_passive_ssl/plugin.go index 8cf08b7..0a16894 100644 --- a/plugins/src/circl_passive_ssl/plugin.go +++ b/plugins/src/circl_passive_ssl/plugin.go @@ -9,7 +9,7 @@ import ( */ var ( Name = "circl_passive_ssl" - Version = "1.0.0" + Version = "1.0.1" Plugin plugin ) diff --git a/plugins/src/elasticsearch.v7/elasticsearch.go b/plugins/src/elasticsearch.v7/elasticsearch.go index ffa0ff3..6d67835 100644 --- a/plugins/src/elasticsearch.v7/elasticsearch.go +++ b/plugins/src/elasticsearch.v7/elasticsearch.go @@ -225,7 +225,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } entry, ok := hit["_source"].(map[string]interface{}) diff --git a/plugins/src/elasticsearch.v7/plugin.go b/plugins/src/elasticsearch.v7/plugin.go index aface4b..8a31764 100644 --- a/plugins/src/elasticsearch.v7/plugin.go +++ b/plugins/src/elasticsearch.v7/plugin.go @@ -10,7 +10,7 @@ import ( */ var ( Name = "elasticsearch.v7" - Version = "1.0.8" + Version = "1.0.9" Plugin plugin ) diff --git a/plugins/src/elasticsearch.v8/elasticsearch.go b/plugins/src/elasticsearch.v8/elasticsearch.go index a64409f..768e6ad 100644 --- a/plugins/src/elasticsearch.v8/elasticsearch.go +++ b/plugins/src/elasticsearch.v8/elasticsearch.go @@ -225,7 +225,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } entry, ok := hit["_source"].(map[string]interface{}) diff --git a/plugins/src/elasticsearch.v8/plugin.go b/plugins/src/elasticsearch.v8/plugin.go index ddf4eaa..01053fc 100644 --- a/plugins/src/elasticsearch.v8/plugin.go +++ b/plugins/src/elasticsearch.v8/plugin.go @@ -10,7 +10,7 @@ import ( */ var ( Name = "elasticsearch.v8" - Version = "1.0.1" + Version = "1.0.2" Plugin plugin ) diff --git a/plugins/src/file/csv/csv.go b/plugins/src/file/csv/csv.go index 36ae798..a7eb3c5 100644 --- a/plugins/src/file/csv/csv.go +++ b/plugins/src/file/csv/csv.go @@ -159,7 +159,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } if err := rows.Scan(row...); err != nil { diff --git a/plugins/src/file/csv/plugin.go b/plugins/src/file/csv/plugin.go index 7bb65fb..40e3812 100644 --- a/plugins/src/file/csv/plugin.go +++ b/plugins/src/file/csv/plugin.go @@ -11,7 +11,7 @@ import ( */ var ( Name = "file-csv" - Version = "1.0.6" + Version = "1.0.7" Plugin plugin ) diff --git a/plugins/src/hashlookup/hashlookup.go b/plugins/src/hashlookup/hashlookup.go index 56a84cf..b9caa36 100644 --- a/plugins/src/hashlookup/hashlookup.go +++ b/plugins/src/hashlookup/hashlookup.go @@ -226,7 +226,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, nil, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/hashlookup/plugin.go b/plugins/src/hashlookup/plugin.go index 3d64be2..a6501a1 100644 --- a/plugins/src/hashlookup/plugin.go +++ b/plugins/src/hashlookup/plugin.go @@ -9,7 +9,7 @@ import ( */ var ( Name = "hashlookup" - Version = "1.0.0" + Version = "1.0.1" Plugin plugin ) diff --git a/plugins/src/http/http.go b/plugins/src/http/http.go index 9f1a505..3c97e70 100644 --- a/plugins/src/http/http.go +++ b/plugins/src/http/http.go @@ -117,7 +117,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/http/plugin.go b/plugins/src/http/plugin.go index ef7010f..e87cada 100644 --- a/plugins/src/http/plugin.go +++ b/plugins/src/http/plugin.go @@ -9,7 +9,7 @@ import ( */ var ( Name = "http" - Version = "1.0.4" + Version = "1.0.5" Plugin plugin ) diff --git a/plugins/src/ipinfo/ipinfo.go b/plugins/src/ipinfo/ipinfo.go index 7ecb87d..fb066fd 100644 --- a/plugins/src/ipinfo/ipinfo.go +++ b/plugins/src/ipinfo/ipinfo.go @@ -138,7 +138,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/ipinfo/plugin.go b/plugins/src/ipinfo/plugin.go index 8fb3acb..46c4b32 100644 --- a/plugins/src/ipinfo/plugin.go +++ b/plugins/src/ipinfo/plugin.go @@ -9,7 +9,7 @@ import ( */ var ( Name = "ipinfo" - Version = "1.0.0" + Version = "1.0.1" Plugin plugin ) diff --git a/plugins/src/misp/misp.go b/plugins/src/misp/misp.go index da29e8f..643f20f 100644 --- a/plugins/src/misp/misp.go +++ b/plugins/src/misp/misp.go @@ -119,7 +119,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/misp/plugin.go b/plugins/src/misp/plugin.go index 1751d78..dc567f3 100644 --- a/plugins/src/misp/plugin.go +++ b/plugins/src/misp/plugin.go @@ -9,7 +9,7 @@ import ( */ var ( Name = "misp" - Version = "1.0.0" + Version = "1.0.1" Plugin plugin ) diff --git a/plugins/src/mongodb/mongodb.go b/plugins/src/mongodb/mongodb.go index 556226c..72aa935 100644 --- a/plugins/src/mongodb/mongodb.go +++ b/plugins/src/mongodb/mongodb.go @@ -214,7 +214,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Deserialize diff --git a/plugins/src/mongodb/plugin.go b/plugins/src/mongodb/plugin.go index ae729e3..de4d7a0 100644 --- a/plugins/src/mongodb/plugin.go +++ b/plugins/src/mongodb/plugin.go @@ -10,7 +10,7 @@ import ( */ var ( Name = "mongodb" - Version = "1.0.5" + Version = "1.0.6" Plugin plugin ) diff --git a/plugins/src/mysql/mysql.go b/plugins/src/mysql/mysql.go index 88d9a2d..23d7597 100644 --- a/plugins/src/mysql/mysql.go +++ b/plugins/src/mysql/mysql.go @@ -158,7 +158,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } columns := make([]string, len(cols)) diff --git a/plugins/src/mysql/plugin.go b/plugins/src/mysql/plugin.go index 80b8243..e7185c4 100644 --- a/plugins/src/mysql/plugin.go +++ b/plugins/src/mysql/plugin.go @@ -11,7 +11,7 @@ import ( */ var ( Name = "mysql" - Version = "1.0.4" + Version = "1.0.5" Plugin plugin ) diff --git a/plugins/src/pastelyzer/pastelyzer.go b/plugins/src/pastelyzer/pastelyzer.go index b2890d8..69c70ee 100644 --- a/plugins/src/pastelyzer/pastelyzer.go +++ b/plugins/src/pastelyzer/pastelyzer.go @@ -123,7 +123,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/pastelyzer/plugin.go b/plugins/src/pastelyzer/plugin.go index 78c4db5..8fdc1d5 100644 --- a/plugins/src/pastelyzer/plugin.go +++ b/plugins/src/pastelyzer/plugin.go @@ -9,7 +9,7 @@ import ( */ var ( Name = "pastelyzer" - Version = "1.0.3" + Version = "1.0.4" Plugin plugin ) diff --git a/plugins/src/phishtank/phishtank.go b/plugins/src/phishtank/phishtank.go index 33e7502..43f6b3d 100644 --- a/plugins/src/phishtank/phishtank.go +++ b/plugins/src/phishtank/phishtank.go @@ -122,7 +122,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/phishtank/plugin.go b/plugins/src/phishtank/plugin.go index ac8691f..4c133da 100644 --- a/plugins/src/phishtank/plugin.go +++ b/plugins/src/phishtank/plugin.go @@ -9,7 +9,7 @@ import ( */ var ( Name = "phishtank" - Version = "1.0.0" + Version = "1.0.1" Plugin plugin ) diff --git a/plugins/src/postgresql/plugin.go b/plugins/src/postgresql/plugin.go index d942279..4d9dcbf 100644 --- a/plugins/src/postgresql/plugin.go +++ b/plugins/src/postgresql/plugin.go @@ -10,7 +10,7 @@ import ( */ var ( Name = "postgresql" - Version = "1.0.4" + Version = "1.0.5" Plugin plugin ) diff --git a/plugins/src/postgresql/postgresql.go b/plugins/src/postgresql/postgresql.go index 1a3ecf0..156135e 100644 --- a/plugins/src/postgresql/postgresql.go +++ b/plugins/src/postgresql/postgresql.go @@ -176,7 +176,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/rest/plugin.go b/plugins/src/rest/plugin.go index 695aa7c..9d360ad 100644 --- a/plugins/src/rest/plugin.go +++ b/plugins/src/rest/plugin.go @@ -9,7 +9,7 @@ import ( */ var ( Name = "rest" - Version = "1.0.0" + Version = "1.0.1" Plugin plugin ) diff --git a/plugins/src/rest/rest.go b/plugins/src/rest/rest.go index 9fbcd80..77cd175 100644 --- a/plugins/src/rest/rest.go +++ b/plugins/src/rest/rest.go @@ -132,7 +132,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/shodan/plugin.go b/plugins/src/shodan/plugin.go index ce6d9bb..eff7818 100644 --- a/plugins/src/shodan/plugin.go +++ b/plugins/src/shodan/plugin.go @@ -9,7 +9,7 @@ import ( */ var ( Name = "shodan" - Version = "1.0.0" + Version = "1.0.1" Plugin plugin ) diff --git a/plugins/src/shodan/shodan.go b/plugins/src/shodan/shodan.go index cc1fcad..f280f3b 100644 --- a/plugins/src/shodan/shodan.go +++ b/plugins/src/shodan/shodan.go @@ -131,7 +131,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/plugins/src/sqlite/plugin.go b/plugins/src/sqlite/plugin.go index 5123679..b2bafa3 100644 --- a/plugins/src/sqlite/plugin.go +++ b/plugins/src/sqlite/plugin.go @@ -11,7 +11,7 @@ import ( */ var ( Name = "sqlite" - Version = "1.0.4" + Version = "1.0.5" Plugin plugin ) diff --git a/plugins/src/sqlite/sqlite.go b/plugins/src/sqlite/sqlite.go index 8a24c10..1918785 100644 --- a/plugins/src/sqlite/sqlite.go +++ b/plugins/src/sqlite/sqlite.go @@ -146,7 +146,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } if err := rows.Scan(row...); err != nil { diff --git a/plugins/src/template/template.go b/plugins/src/template/template.go index 4f78a97..2f79c65 100644 --- a/plugins/src/template/template.go +++ b/plugins/src/template/template.go @@ -199,7 +199,7 @@ func (p *plugin) Search(stmt *sqlparser.Select) ([]map[string]interface{}, map[s return nil, nil, debug, err } - return nil, top, debug, nil + return results, top, debug, nil } // Update stats diff --git a/profile.go b/profile.go index aabbf7b..84b0bd7 100644 --- a/profile.go +++ b/profile.go @@ -97,7 +97,18 @@ func (a *Account) optionsHandler(data string) { return } - debug, err := strconv.ParseBool(parts[2]) + showLimited, err := strconv.ParseBool(parts[2]) + if err != nil { + log.Error(). + Str("ip", a.Session.IP). + Str("username", a.Username). + Msg("Can't parse showLimited value: " + err.Error()) + + a.send("error", "Invalid showLimited value given, boolean expected.", "Can't save!") + return + } + + debug, err := strconv.ParseBool(parts[3]) if err != nil { log.Error(). Str("ip", a.Session.IP). @@ -112,6 +123,7 @@ func (a *Account) optionsHandler(data string) { options := &Options{ StabilizationTime: stabilization, Limit: limit, + ShowLimited: showLimited, Debug: debug, } diff --git a/upload.go b/upload.go index a7077d4..536d850 100644 --- a/upload.go +++ b/upload.go @@ -322,7 +322,7 @@ func (a *Account) processUploads(filename string, upload *Upload) error { upload.Source, strings.TrimSpace(line), upload.StartTime, upload.EndTime) // Query data sources for a new relations data - response := querySources(upload.Source, sql, a.Options.Debug, a.Username) + response := querySources(upload.Source, sql, a.Options.ShowLimited, a.Options.Debug, a.Username) if len(response.Relations) != 0 { rRelations += "\n\nIndicator: " + line + "\n\n" diff --git a/websocket.go b/websocket.go index b7ea2f2..7fe4561 100644 --- a/websocket.go +++ b/websocket.go @@ -254,7 +254,7 @@ func (a *Account) sqlHandler(sql string) { source := match[1] // Query data sources for a new data - response := querySources(source, sql, a.Options.Debug, a.Username) + response := querySources(source, sql, a.Options.ShowLimited, a.Options.Debug, a.Username) // Get users initial query sql = reDatetimeLimit.ReplaceAllString(sql, "") @@ -299,7 +299,7 @@ func (a *Account) commonHandler(data string, datetime string) { nodes = append(nodes, field[1][:len(field[1])-1]) // Query data sources for a new data - result := querySources("global", "FROM global WHERE ("+query+") AND datetime BETWEEN "+datetime, a.Options.Debug, a.Username) + result := querySources("global", "FROM global WHERE ("+query+") AND datetime BETWEEN "+datetime, a.Options.ShowLimited, a.Options.Debug, a.Username) results = append(results, result.Relations) if result.Error != "" {