diff --git a/back/pialert.py b/back/pialert.py index 7d31bf01..b6736526 100755 --- a/back/pialert.py +++ b/back/pialert.py @@ -308,7 +308,7 @@ def importConfig (): # Import setting if found in the dictionary # General - ENABLE_ARPSCAN = ccd('ENABLE_ARPSCAN', True , c_d, 'Enable arpscan', 'boolean', '', 'General') + ENABLE_ARPSCAN = ccd('ENABLE_ARPSCAN', True , c_d, 'Enable arpscan', 'boolean', '', 'General', ['run']) SCAN_SUBNETS = ccd('SCAN_SUBNETS', ['192.168.1.0/24 --interface=eth1', '192.168.1.0/24 --interface=eth0'] , c_d, 'Subnets to scan', 'subnets', '', 'General') PRINT_LOG = ccd('PRINT_LOG', False , c_d, 'Print additional logging', 'boolean', '', 'General') TIMEZONE = ccd('TIMEZONE', 'Europe/Berlin' , c_d, 'Time zone', 'text', '', 'General') @@ -1030,7 +1030,7 @@ def scan_network (): return reporting #------------------------------------------------------------------------------- -def query_ScanCycle_Data (pOpenCloseDB = False): +def query_ScanCycle_Data (pOpenCloseDB = False, cycle = 1): # Query Data sql.execute ("""SELECT cic_arpscanCycles, cic_EveryXmin FROM ScanCycles @@ -2251,8 +2251,12 @@ def send_notifications (): notiStruc = construct_notifications("", "Ports", True, changedPorts_json_struc) mail_html = mail_html.replace ('', notiStruc.html) - # mail_text = mail_text.replace ('', notiStruc.text + '\n') - mail_text = mail_text.replace ('', "Ports changed! Check PiAlert for details!" + '\n') + + portsTxt = "" + if changedPorts_json_struc is not None: + portsTxt = "Ports \n---------\n Ports changed! Check PiAlert for details!\n" + + mail_text = mail_text.replace ('', portsTxt ) json_final = { "internet": json_internet, @@ -2261,6 +2265,8 @@ def send_notifications (): "events": json_events, "ports": json_ports, } + + mail_text = removeDuplicateNewLines(mail_text) # Create clickable MAC links mail_html = generate_mac_links (mail_html, deviceUrl) @@ -2324,7 +2330,7 @@ def send_notifications (): sql.execute ("""UPDATE Events SET eve_PendingAlertEmail = 0 WHERE eve_PendingAlertEmail = 1""") - changedPorts = None + changedPorts_json_struc = None # DEBUG - print number of rows updated file_print(' Notifications: ', sql.rowcount) @@ -2355,10 +2361,11 @@ def construct_notifications(sqlQuery, tableTitle, skipText = False, suppliedJson text = "" if json["data"] != []: + text = tableTitle + "\n---------\n" html = convert(json, build_direction=build_direction, table_attributes=table_attributes) - html = format_table(html, "data", headerProps, tableTitle) + html = format_table(html, "data", headerProps, tableTitle).replace('
    ','
      ') headers = json_struc.columnNames @@ -3158,6 +3165,8 @@ def write_file (pPath, pText): file.close() else: file = open (pPath, 'w', encoding='utf-8') + if pText is None: + pText = "" file.write (pText) file.close() @@ -3304,6 +3313,14 @@ def get_all_devices(): return row +#------------------------------------------------------------------------------- +def removeDuplicateNewLines(text): + if "\n\n\n" in text: + return removeDuplicateNewLines(text.replace("\n\n\n", "\n\n")) + else: + return text + + #------------------------------------------------------------------------------- def hide_email(email): m = email.split('@') @@ -3327,6 +3344,8 @@ def check_and_run_event(): if event == 'test': handle_test(param) + if event == 'run': + handle_run(param) # clear event execution flag sql.execute ("UPDATE Parameters SET par_Value='finished' WHERE par_ID='Front_Event'") @@ -3334,16 +3353,27 @@ def check_and_run_event(): # commit to DB commitDB () +#------------------------------------------------------------------------------- +def handle_run(runType): + global last_network_scan + + file_print('[', timeNow(), '] START Run: ', runType) + + if runType == 'ENABLE_ARPSCAN': + last_network_scan = now_minus_24h + + file_print('[', timeNow(), '] END Run: ', runType) + #------------------------------------------------------------------------------- def handle_test(testType): file_print('[', timeNow(), '] START Test: ', testType) # Open text sample - sample_txt = get_file_content(pialertPath + '/back/report_sample_1.txt') + sample_txt = get_file_content(pialertPath + '/back/report_sample.txt') # Open html sample - sample_html = get_file_content(pialertPath + '/back/report_sample_2.html') + sample_html = get_file_content(pialertPath + '/back/report_sample.html') # Open json sample and get only the payload part sample_json_payload = json.loads(get_file_content(pialertPath + '/back/webhook_json_sample.json'))[0]["body"]["attachments"][0]["text"] diff --git a/back/report_sample_2.html b/back/report_sample.html similarity index 100% rename from back/report_sample_2.html rename to back/report_sample.html diff --git a/back/report_sample_1.txt b/back/report_sample.txt similarity index 100% rename from back/report_sample_1.txt rename to back/report_sample.txt diff --git a/back/report_template.txt b/back/report_template.txt index 91f94052..9e843ebe 100755 --- a/back/report_template.txt +++ b/back/report_template.txt @@ -1,18 +1,8 @@ Report Date: Server: -New Devices ----------------------- -Devices Down ----------------------- -Events ----------------------- -Internet ----------------------- -Ports ----------------------- diff --git a/config/pialert.conf b/config/pialert.conf index 65efaa8e..08c1766d 100755 --- a/config/pialert.conf +++ b/config/pialert.conf @@ -103,7 +103,7 @@ DHCP_ACTIVE=False # Pholus #--------------------------- PHOLUS_ACTIVE=False -PHOLUS_TIMEOUT=20 +PHOLUS_TIMEOUT=120 PHOLUS_FORCE=False PHOLUS_DAYS_DATA=7 PHOLUS_RUN='once' diff --git a/docker-compose.yml b/docker-compose.yml index 2627b339..7ffc77ab 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,13 +7,13 @@ services: network_mode: "host" restart: unless-stopped volumes: - - ${APP_DATA_LOCATION}/pialert/config:/home/pi/pialert/config + - ${APP_DATA_LOCATION}/pialert/config2:/home/pi/pialert/config # - ${APP_DATA_LOCATION}/pialert/db/pialert.db:/home/pi/pialert/db/pialert.db - ${APP_DATA_LOCATION}/pialert/db2:/home/pi/pialert/db # (optional) useful for debugging if you have issues setting up the container - ${LOGS_LOCATION}:/home/pi/pialert/front/log # DELETE START anyone trying to use this file: comment out / delete BELOW lines, they are only for development purposes - - ${DEV_LOCATION}/back:/home/pi/pialert/back + - ${DEV_LOCATION}/back/pialert.py:/home/pi/pialert/back/pialert.py - ${DEV_LOCATION}/pholus:/home/pi/pialert/pholus - ${DEV_LOCATION}/dockerfiles:/home/pi/pialert/dockerfiles - ${APP_DATA_LOCATION}/pialert/php.ini:/etc/php/7.4/fpm/php.ini diff --git a/docs/WEBHOOK_N8N.md b/docs/WEBHOOK_N8N.md index 13a5b07b..b3bb73ed 100755 --- a/docs/WEBHOOK_N8N.md +++ b/docs/WEBHOOK_N8N.md @@ -7,8 +7,8 @@ See [sample JSON](https://github.com/jokob-sk/Pi.Alert/blob/main/back/webhook_js ![Email template](/docs/img/WEBHOOK_N8N/n8n_send_email_settings.png) ``` -{{$json["body"]["attachments"][0]["text"]["new_devices"]}} -{{$json["body"]["attachments"][0]["text"]["events"]}} +Events count: {{ $json["body"]["attachments"][0]["text"]["events"].length }} +New devices count: {{ $json["body"]["attachments"][0]["text"]["new_devices"].length }} ``` ### Get your webhook in n8n diff --git a/docs/img/WEBHOOK_N8N/n8n_send_email_settings.png b/docs/img/WEBHOOK_N8N/n8n_send_email_settings.png index 64d4d84c..366ee5c2 100755 Binary files a/docs/img/WEBHOOK_N8N/n8n_send_email_settings.png and b/docs/img/WEBHOOK_N8N/n8n_send_email_settings.png differ diff --git a/docs/report_sample_1.html b/docs/report_sample_1.html deleted file mode 100755 index 5d4f7dda..00000000 --- a/docs/report_sample_1.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      - Pi.Alert Report -
      - - - - - - -
      Report Date: 2021-01-01 08:00 Scan Cycle: Internet Server: pi4
      -
      - -

      Internet:

      - - - - - - - - - - - - - - - - -
      Event Type Datetime IP Additional Info
      Internet IP Changed 2021-01-01 08:00:00 1.1.1.0 Previous Internet IP: 1.1.0.0
      - -
      - -
      - - - - - - -
      Puche 2021 Pi.Alert 2.50   /   2021-01-01 GNU GPLv3
      -
      -
      - - diff --git a/front/php/templates/language/en_us.php b/front/php/templates/language/en_us.php index c3de32ba..562e162e 100755 --- a/front/php/templates/language/en_us.php +++ b/front/php/templates/language/en_us.php @@ -462,6 +462,8 @@ $lang['en_us'] = array( 'test_event_tooltip' => 'Save your changes at first before you test your settings.', 'test_event_icon' => 'fa-vial-circle-check', +'run_event_tooltip' => 'Enable the setting and save your changes at first before you run it.', +'run_event_icon' => 'fa-play', 'general_event_title' => 'Executing an ad-hoc event', 'general_event_description' => 'The event you\'ve triggered might take a while until background processes finish. The execution ended once you see finished below. Check the error log if you didn\'t get the expected result.

      Status: ', diff --git a/front/settings.php b/front/settings.php index ab8e586c..88f0ddad 100755 --- a/front/settings.php +++ b/front/settings.php @@ -238,10 +238,11 @@ while ($row = $result -> fetchArray (SQLITE3_ASSOC)) { if(count($eventsList) > 0) { foreach ($eventsList as $event) { - $eventsHtml = $eventsHtml.' - + data-myevent="'.$event.'" + > + '; } @@ -451,7 +452,7 @@ while ($row = $result -> fetchArray (SQLITE3_ASSOC)) { // handling events on the backend initiated by the front end START // ----------------------------------------------------------------------------- $(window).on('load', function() { - $('i[data-myevent]').each(function(index, element){ + $('span[data-myevent]').each(function(index, element){ $(element).attr('onclick', 'handleEvent(\"' + $(element).attr('data-myevent') + '|'+ $(element).attr('data-myparam') + '\")' );