feat(cloudron): add tirreno package artifacts
- Add CloudronStack/output/CloudronPackages-Artifacts/tirreno/ directory and its contents - Includes package manifest, Dockerfile, source code, documentation, and build artifacts - Add tirreno-1761840148.tar.gz as a build artifact - Add tirreno-cloudron-package-1761841304.tar.gz as the Cloudron package - Include all necessary files for the tirreno Cloudron package This adds the complete tirreno Cloudron package artifacts to the repository.
This commit is contained in:
		@@ -0,0 +1,206 @@
 | 
			
		||||
import {Loader} from '../Loader.js?v=2';
 | 
			
		||||
import {Tooltip} from '../Tooltip.js?v=2';
 | 
			
		||||
import {fireEvent} from '../utils/Event.js?v=2';
 | 
			
		||||
import {handleAjaxError} from '../utils/ErrorHandler.js?v=2';
 | 
			
		||||
 | 
			
		||||
export class BasePanel {
 | 
			
		||||
 | 
			
		||||
    constructor(eventParams) {
 | 
			
		||||
        this.enrichment = eventParams.enrichment;
 | 
			
		||||
        this.type = eventParams.type;
 | 
			
		||||
        this.url = eventParams.url;
 | 
			
		||||
        this.cardId = eventParams.cardId;
 | 
			
		||||
        this.panelClosed = eventParams.panelClosed;
 | 
			
		||||
        this.closePanel = eventParams.closePanel;
 | 
			
		||||
        this.rowClicked = eventParams.rowClicked;
 | 
			
		||||
 | 
			
		||||
        this.loader = new Loader();
 | 
			
		||||
 | 
			
		||||
        this.itemId = null;
 | 
			
		||||
 | 
			
		||||
        const onCloseDetailsPanel = this.onCloseDetailsPanel.bind(this);
 | 
			
		||||
        window.addEventListener(this.closePanel, onCloseDetailsPanel, false);
 | 
			
		||||
 | 
			
		||||
        const onTableRowClicked = this.onTableRowClicked.bind(this);
 | 
			
		||||
        window.addEventListener(this.rowClicked, onTableRowClicked, false);
 | 
			
		||||
 | 
			
		||||
        const onKeydown = this.onKeydown.bind(this);
 | 
			
		||||
        window.addEventListener('keydown', onKeydown, false);
 | 
			
		||||
 | 
			
		||||
        const onCloseButtonClick = this.onCloseButtonClick.bind(this);
 | 
			
		||||
        this.closeButton.addEventListener('click', onCloseButtonClick, false);
 | 
			
		||||
 | 
			
		||||
        if (this.enrichment) {
 | 
			
		||||
            const onEnrichmentButtonClick = this.onEnrichmentButtonClick.bind(this);
 | 
			
		||||
            this.reenrichmentButton.addEventListener('click', onEnrichmentButtonClick, false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.allPanels = {
 | 
			
		||||
            'event':    {id: 'event-card',  closeEvent: 'eventPanelClosed'},
 | 
			
		||||
            'logbook':  {id: 'logbook-card',closeEvent: 'logbookPanelClosed'},
 | 
			
		||||
            'email':    {id: 'email-card',  closeEvent: 'emailPanelClosed'},
 | 
			
		||||
            'device':   {id: 'device-card', closeEvent: 'devicePanelClosed'},
 | 
			
		||||
            'phone':    {id: 'phone-card',  closeEvent: 'phonePanelClosed'},
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key
 | 
			
		||||
    onKeydown(e) {
 | 
			
		||||
        // procced keydown even if event was processed
 | 
			
		||||
 | 
			
		||||
        switch (e.key) {
 | 
			
		||||
            case 'Esc': // IE/Edge specific value
 | 
			
		||||
            case 'Escape': {
 | 
			
		||||
                this.close();
 | 
			
		||||
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            default: {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Cancel the default action to avoid it being handled twice
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onEnrichmentButtonClick(e) {
 | 
			
		||||
        this.contentDiv.classList.add('is-hidden');
 | 
			
		||||
        this.loaderDiv.classList.remove('is-hidden');
 | 
			
		||||
        this.card.classList.remove('is-hidden');
 | 
			
		||||
 | 
			
		||||
        const el = this.loaderDiv;
 | 
			
		||||
        this.loader.start(el);
 | 
			
		||||
 | 
			
		||||
        this.reenrichmentButton.setAttribute('disabled', '');
 | 
			
		||||
        this.reenrichmentButton.classList.add('is-hidden');
 | 
			
		||||
 | 
			
		||||
        const onEnrichmentLoaded = this.onEnrichmentLoaded.bind(this);
 | 
			
		||||
        const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
 | 
			
		||||
 | 
			
		||||
        $.ajax({
 | 
			
		||||
            url: '/admin/reenrichment',
 | 
			
		||||
            type: 'post',
 | 
			
		||||
            data: {type: this.type, entityId: this.itemId, token: token},
 | 
			
		||||
            success: onEnrichmentLoaded,
 | 
			
		||||
            error: handleAjaxError,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onEnrichmentLoaded(data, status) {
 | 
			
		||||
        if ('success' !== status || 0 === data.length) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.loadData(this.itemId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onCloseButtonClick(e) {
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
        this.close();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onCloseDetailsPanel() {
 | 
			
		||||
        this.close();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    loadData(id) {
 | 
			
		||||
        this.contentDiv.classList.add('is-hidden');
 | 
			
		||||
        this.loaderDiv.classList.remove('is-hidden');
 | 
			
		||||
        this.card.classList.remove('is-hidden');
 | 
			
		||||
 | 
			
		||||
        const el = this.loaderDiv;
 | 
			
		||||
        this.loader.start(el);
 | 
			
		||||
 | 
			
		||||
        const onDetailsLoaded = this.onDetailsLoaded.bind(this);
 | 
			
		||||
        const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
 | 
			
		||||
 | 
			
		||||
        $.ajax({
 | 
			
		||||
            url: this.url,
 | 
			
		||||
            type: 'get',
 | 
			
		||||
            data: {id: id, token: token},
 | 
			
		||||
            success: onDetailsLoaded,
 | 
			
		||||
            error: handleAjaxError,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onTableRowClicked({detail}) {
 | 
			
		||||
        this.itemId = detail.itemId;
 | 
			
		||||
        this.loadData(this.itemId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onDetailsLoaded(data, status) {
 | 
			
		||||
 | 
			
		||||
        if ('success' !== status || 0 === data.length) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        data = this.proceedData(data);
 | 
			
		||||
 | 
			
		||||
        if (this.enrichment && data.hasOwnProperty('checked') && this.reenrichmentButton) {
 | 
			
		||||
            if (data.checked === false && data.enrichable) {
 | 
			
		||||
                this.reenrichmentButton.removeAttribute('disabled');
 | 
			
		||||
                this.reenrichmentButton.classList.remove('is-hidden');
 | 
			
		||||
            } else {
 | 
			
		||||
                this.reenrichmentButton.setAttribute('disabled', '');
 | 
			
		||||
                this.reenrichmentButton.classList.add('is-hidden');
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.loader.stop();
 | 
			
		||||
        this.contentDiv.classList.remove('is-hidden');
 | 
			
		||||
        this.loaderDiv.classList.add('is-hidden');
 | 
			
		||||
 | 
			
		||||
        let span = null;
 | 
			
		||||
        //todo: foreach and arrow fn ?
 | 
			
		||||
        for (const key in data) {
 | 
			
		||||
            span = this.card.querySelector(`#details_${key}`);
 | 
			
		||||
            if (span) {
 | 
			
		||||
                if (data[key] instanceof Node) {
 | 
			
		||||
                    span.replaceChildren(data[key]);
 | 
			
		||||
                } else {
 | 
			
		||||
                    span.innerHTML = data[key];
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.initTooltips();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    initTooltips() {
 | 
			
		||||
        Tooltip.addTooltipsToEventDetailsPanel();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    proceedData(data) {
 | 
			
		||||
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    close() {
 | 
			
		||||
        fireEvent(this.panelClosed);
 | 
			
		||||
        this.card.classList.add('is-hidden');
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get loaderDiv() {
 | 
			
		||||
        return this.card.querySelector('div.text-loader');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get contentDiv() {
 | 
			
		||||
        return this.card.querySelector('div.content');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get card() {
 | 
			
		||||
        return document.querySelector(`.details-card#${this.cardId}`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get closeButton() {
 | 
			
		||||
        return this.card.querySelector('.delete');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get reenrichmentButton() {
 | 
			
		||||
        return this.card.querySelector('.reenrichment-button');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,51 @@
 | 
			
		||||
import {BasePanel} from './BasePanel.js?v=2';
 | 
			
		||||
import {
 | 
			
		||||
    renderDeviceWithOs,
 | 
			
		||||
    renderBrowser,
 | 
			
		||||
    renderLanguage,
 | 
			
		||||
    renderDate,
 | 
			
		||||
    renderBoolean,
 | 
			
		||||
    renderUserAgent,
 | 
			
		||||
} from '../DataRenderers.js?v=2';
 | 
			
		||||
 | 
			
		||||
export class DevicePanel extends BasePanel {
 | 
			
		||||
 | 
			
		||||
    constructor() {
 | 
			
		||||
        let eventParams = {
 | 
			
		||||
            //enrichment: true,
 | 
			
		||||
            enrichemnt: false,
 | 
			
		||||
            type: 'device',
 | 
			
		||||
            url: '/admin/deviceDetails',
 | 
			
		||||
            cardId: 'device-card',
 | 
			
		||||
            panelClosed: 'devicePanelClosed',
 | 
			
		||||
            closePanel: 'closeDevicePanel',
 | 
			
		||||
            rowClicked: 'deviceTableRowClicked',
 | 
			
		||||
        };
 | 
			
		||||
        super(eventParams);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    proceedData(data) {
 | 
			
		||||
        let browser_name    = data.browser_name;
 | 
			
		||||
        let browser_version = data.browser_version;
 | 
			
		||||
        browser_name        = (browser_name !== null && browser_name !== undefined) ? browser_name : '';
 | 
			
		||||
        browser_version     = (browser_version !== null && browser_version !== undefined) ? browser_version : '';
 | 
			
		||||
 | 
			
		||||
        const device_record   = {
 | 
			
		||||
            ua:             data.ua,
 | 
			
		||||
            os_name:        data.os_name,
 | 
			
		||||
            os_version:     data.os_version,
 | 
			
		||||
            device_name:    data.device,
 | 
			
		||||
            browser:        `${browser_name} ${browser_version}`,
 | 
			
		||||
            lang:           data.lang
 | 
			
		||||
        };
 | 
			
		||||
        data.device               = renderDeviceWithOs(device_record);
 | 
			
		||||
        data.browser              = renderBrowser(device_record);
 | 
			
		||||
        data.lang                 = renderLanguage(device_record);
 | 
			
		||||
        data.device_created       = renderDate(data.created);
 | 
			
		||||
 | 
			
		||||
        data.ua_modified          = renderBoolean(data.modified);
 | 
			
		||||
        data.ua                   = renderUserAgent(data);
 | 
			
		||||
 | 
			
		||||
        return data;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,66 @@
 | 
			
		||||
import {BasePanel} from './BasePanel.js?v=2';
 | 
			
		||||
import {
 | 
			
		||||
    renderEmail,
 | 
			
		||||
    renderReputation,
 | 
			
		||||
    renderBoolean,
 | 
			
		||||
    renderDefaultIfEmptyElement,
 | 
			
		||||
    renderDate,
 | 
			
		||||
    renderClickableDomain,
 | 
			
		||||
    renderHttpCode,
 | 
			
		||||
} from '../DataRenderers.js?v=2';
 | 
			
		||||
 | 
			
		||||
export class EmailPanel extends BasePanel {
 | 
			
		||||
 | 
			
		||||
    constructor() {
 | 
			
		||||
        let eventParams = {
 | 
			
		||||
            enrichment: true,
 | 
			
		||||
            type: 'email',
 | 
			
		||||
            url: '/admin/emailDetails',
 | 
			
		||||
            cardId: 'email-card',
 | 
			
		||||
            panelClosed: 'emailPanelClosed',
 | 
			
		||||
            closePanel: 'closeEmailPanel',
 | 
			
		||||
            rowClicked: 'emailTableRowClicked',
 | 
			
		||||
        };
 | 
			
		||||
        super(eventParams);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    proceedData(data) {
 | 
			
		||||
        data.email                  = renderEmail(data, 'long');
 | 
			
		||||
        data.reputation             = renderReputation(data);
 | 
			
		||||
 | 
			
		||||
        // to 'No breach'
 | 
			
		||||
        data.data_breach            = renderBoolean(data.data_breach === null ? null : !data.data_breach);
 | 
			
		||||
        // to 'No Profiles'
 | 
			
		||||
        // data.profiles               = renderBoolean(data.profiles === null ? null : data.profiles === 0);
 | 
			
		||||
        data.data_breaches          = renderDefaultIfEmptyElement(data.data_breaches);
 | 
			
		||||
 | 
			
		||||
        data.earliest_breach        = renderDate(data.earliest_breach);
 | 
			
		||||
        data.fraud_detected         = renderBoolean(data.fraud_detected);
 | 
			
		||||
        data.blockemails            = renderBoolean(data.blockemails);
 | 
			
		||||
        //  TODO: return alert_list back in next release
 | 
			
		||||
        //data.alert_list           = renderBoolean(data.alert_list);
 | 
			
		||||
        data.domain_contact_email   = renderBoolean(data.domain_contact_email);
 | 
			
		||||
 | 
			
		||||
        data.free_email_provider    = renderBoolean(data.free_email_provider);
 | 
			
		||||
 | 
			
		||||
        const domain_record = {
 | 
			
		||||
            domain:     data.domain,
 | 
			
		||||
            id:         data.domain_id,
 | 
			
		||||
        };
 | 
			
		||||
        data.domain                 = renderClickableDomain(domain_record, 'long');
 | 
			
		||||
        data.blockdomains           = renderBoolean(data.blockdomains);
 | 
			
		||||
        data.disabled               = renderBoolean(data.disabled);
 | 
			
		||||
        data.mx_record              = renderBoolean(data.mx_record === null ? null : !data.mx_record);
 | 
			
		||||
        data.disposable_domains     = renderBoolean(data.disposable_domains);
 | 
			
		||||
        data.disabled               = renderBoolean(data.disabled);
 | 
			
		||||
        data.tranco_rank            = renderDefaultIfEmptyElement(data.tranco_rank);
 | 
			
		||||
        data.creation_date          = renderDate(data.creation_date);
 | 
			
		||||
        data.expiration_date        = renderDate(data.expiration_date);
 | 
			
		||||
        data.closest_snapshot       = renderDate(data.closest_snapshot);
 | 
			
		||||
        data.return_code            = renderHttpCode({http_code: data.return_code});
 | 
			
		||||
 | 
			
		||||
        // also data.checked is used
 | 
			
		||||
 | 
			
		||||
        return data;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,213 @@
 | 
			
		||||
import {BasePanel} from './BasePanel.js?v=2';
 | 
			
		||||
import {
 | 
			
		||||
    renderTime,
 | 
			
		||||
    renderHttpCode,
 | 
			
		||||
    renderHttpMethod,
 | 
			
		||||
    renderClickableImportantUserWithScore,
 | 
			
		||||
    renderUserId,
 | 
			
		||||
    renderUserReviewedStatus,
 | 
			
		||||
    renderDate,
 | 
			
		||||
    renderScoreDetails,
 | 
			
		||||
    renderEmail,
 | 
			
		||||
    renderReputation,
 | 
			
		||||
    renderBoolean,
 | 
			
		||||
    renderDefaultIfEmptyElement,
 | 
			
		||||
    renderClickableDomain,
 | 
			
		||||
    renderPhone,
 | 
			
		||||
    renderFullCountry,
 | 
			
		||||
    renderPhoneCarrierName,
 | 
			
		||||
    renderPhoneType,
 | 
			
		||||
    renderUserCounter,
 | 
			
		||||
    renderClickableResourceWithoutQuery,
 | 
			
		||||
    renderDeviceWithOs,
 | 
			
		||||
    // renderClickableDeviceId,
 | 
			
		||||
    renderBrowser,
 | 
			
		||||
    renderLanguage,
 | 
			
		||||
    renderCidr,
 | 
			
		||||
    renderNetName,
 | 
			
		||||
    renderClickableIpWithCountry,
 | 
			
		||||
    renderClickableCountryName,
 | 
			
		||||
    renderReferer,
 | 
			
		||||
    renderUserAgent,
 | 
			
		||||
    renderQuery,
 | 
			
		||||
    renderClickableAsn,
 | 
			
		||||
    renderUserFirstname,
 | 
			
		||||
    renderUserLastname,
 | 
			
		||||
    renderIpType,
 | 
			
		||||
    renderJsonTextarea,
 | 
			
		||||
} from '../DataRenderers.js?v=2';
 | 
			
		||||
 | 
			
		||||
export class EventPanel extends BasePanel {
 | 
			
		||||
 | 
			
		||||
    constructor() {
 | 
			
		||||
        let eventParams = {
 | 
			
		||||
            enrichment: false,
 | 
			
		||||
            type: 'event',
 | 
			
		||||
            url: '/admin/eventDetails',
 | 
			
		||||
            cardId: 'event-card',
 | 
			
		||||
            panelClosed: 'eventPanelClosed',
 | 
			
		||||
            closePanel: 'closeEventPanel',
 | 
			
		||||
            rowClicked: 'eventTableRowClicked',
 | 
			
		||||
        };
 | 
			
		||||
        super(eventParams);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    proceedData(data) {
 | 
			
		||||
        const event_record = {
 | 
			
		||||
            time:           data.event_time,
 | 
			
		||||
            http_code:      data.event_http_code,
 | 
			
		||||
            http_method:    data.event_http_method_name,
 | 
			
		||||
        };
 | 
			
		||||
        data.event_time                 = renderTime(event_record.time);
 | 
			
		||||
        data.event_http_code            = renderHttpCode(event_record);
 | 
			
		||||
        data.event_http_method          = renderHttpMethod(event_record);
 | 
			
		||||
        //data.event_type_name            = data.event_type_name;
 | 
			
		||||
 | 
			
		||||
        //Convert to boolean if number exists
 | 
			
		||||
        //if(Number.isInteger(data.profiles)) {
 | 
			
		||||
        //    data.email_profiles = !!data.profiles;
 | 
			
		||||
        //
 | 
			
		||||
        //    //Revert profiles to "No profiles"
 | 
			
		||||
        //    data.email_profiles = !data.email_profiles;
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //Convert to boolean if number exists
 | 
			
		||||
        //if(Number.isInteger(data.phone_profiles)) {
 | 
			
		||||
        //    data.phone_profiles = !!data.phone_profiles;
 | 
			
		||||
        //
 | 
			
		||||
        //    //Revert profiles to "No profiles"
 | 
			
		||||
        //    data.phone_profiles = !data.phone_profiles;
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        if ('boolean' === typeof data.data_breach) {
 | 
			
		||||
            //Revert data_breach to "No breach"
 | 
			
		||||
            data.data_breach = !data.data_breach;
 | 
			
		||||
        }
 | 
			
		||||
        const current_email_record = {
 | 
			
		||||
            accountid:          data.accountid,
 | 
			
		||||
            accounttitle:       data.accounttitle,
 | 
			
		||||
            email:              data.current_email,
 | 
			
		||||
            score_updated_at:   data.score_updated_at,
 | 
			
		||||
            score:              data.score,
 | 
			
		||||
            fraud:              data.fraud,
 | 
			
		||||
        };
 | 
			
		||||
        data.user_id              = renderClickableImportantUserWithScore(current_email_record, 'long');
 | 
			
		||||
        data.accounttitle         = renderUserId(data.accounttitle);
 | 
			
		||||
        data.reviewed_status      = renderUserReviewedStatus(data);
 | 
			
		||||
        data.latest_decision      = renderDate(data.latest_decision);
 | 
			
		||||
        data.score_details        = renderScoreDetails(data);
 | 
			
		||||
 | 
			
		||||
        if (!!document.getElementById('details_email')) {
 | 
			
		||||
            data.email                = renderEmail(data, 'long');
 | 
			
		||||
            data.reputation           = renderReputation(data);
 | 
			
		||||
            //data.email_profiles       = renderBoolean(data.email_profiles);
 | 
			
		||||
            data.free_provider        = renderBoolean(data.free_email_provider);
 | 
			
		||||
            data.data_breach          = renderBoolean(data.data_breach);
 | 
			
		||||
            data.data_breaches        = renderDefaultIfEmptyElement(data.data_breaches);
 | 
			
		||||
            data.blockemails          = renderBoolean(data.blockemails);
 | 
			
		||||
            data.email_fraud_detected = renderBoolean(data.email_fraud_detected);
 | 
			
		||||
            //  TODO: return alert_list back in next release
 | 
			
		||||
            //data.email_alert_list     = renderBoolean(data.email_alert_list);
 | 
			
		||||
            data.email_earliest_breach= renderDate(data.email_earliest_breach);
 | 
			
		||||
 | 
			
		||||
            const domain_record = {
 | 
			
		||||
                domain:     data.domain,
 | 
			
		||||
                id:         data.domainid,
 | 
			
		||||
                http_code:  data.domain_return_code,
 | 
			
		||||
            };
 | 
			
		||||
            data.domain                 = renderClickableDomain(domain_record, 'long');
 | 
			
		||||
            data.tranco_rank            = renderDefaultIfEmptyElement(data.tranco_rank);
 | 
			
		||||
            data.blockdomains           = renderBoolean(data.blockdomains);
 | 
			
		||||
            data.disposable_domains     = renderBoolean(data.disposable_domains);
 | 
			
		||||
            data.domain_disabled        = renderBoolean(data.domain_disabled);
 | 
			
		||||
            data.domain_creation_date   = renderDate(data.domain_creation_date);
 | 
			
		||||
            data.domain_expiration_date = renderDate(data.domain_expiration_date);
 | 
			
		||||
            data.domain_return_code     = renderHttpCode(domain_record);
 | 
			
		||||
 | 
			
		||||
            const phone_record = {
 | 
			
		||||
                phonenumber:    data.phonenumber,
 | 
			
		||||
                country_id:     data.phone_country_id,
 | 
			
		||||
                country_iso:    data.phone_country_iso,
 | 
			
		||||
                full_country:   data.phone_full_country,
 | 
			
		||||
                carrier_name:   data.carrier_name,
 | 
			
		||||
                type:           data.phone_type
 | 
			
		||||
            };
 | 
			
		||||
            data.phonenumber          = renderPhone(phone_record);
 | 
			
		||||
            data.phone_country        = renderFullCountry(data.phone_full_country);
 | 
			
		||||
            data.carrier_name         = renderPhoneCarrierName(phone_record);
 | 
			
		||||
            data.phone_type           = renderPhoneType(phone_record);
 | 
			
		||||
            data.phone_users          = renderUserCounter(data.phone_users, 2);
 | 
			
		||||
            data.phone_invalid        = renderBoolean(data.phone_invalid);
 | 
			
		||||
            data.phone_fraud_detected = renderBoolean(data.phone_fraud_detected);
 | 
			
		||||
            //data.phone_profiles       = renderBoolean(data.phone_profiles);
 | 
			
		||||
            //  TODO: return alert_list back in next release
 | 
			
		||||
            //data.phone_alert_list     = renderBoolean(data.phone_alert_list);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        data.url                  = renderClickableResourceWithoutQuery(data);
 | 
			
		||||
 | 
			
		||||
        let browser_name    = data.browser_name;
 | 
			
		||||
        let browser_version = data.browser_version;
 | 
			
		||||
        browser_name        = (browser_name !== null && browser_name !== undefined) ? browser_name : '';
 | 
			
		||||
        browser_version     = (browser_version !== null && browser_version !== undefined) ? browser_version : '';
 | 
			
		||||
 | 
			
		||||
        const device_record = {
 | 
			
		||||
            id:             data.deviceid,
 | 
			
		||||
            ua:             data.ua,
 | 
			
		||||
            os_name:        data.os_name,
 | 
			
		||||
            os_version:     data.os_version,
 | 
			
		||||
            device_name:    data.device_name,
 | 
			
		||||
            browser:        `${browser_name} ${browser_version}`,
 | 
			
		||||
            lang:           data.lang
 | 
			
		||||
        };
 | 
			
		||||
        data.device               = renderDeviceWithOs(device_record);
 | 
			
		||||
        //data.device_id            = renderClickableDeviceId(device_record);
 | 
			
		||||
        data.browser              = renderBrowser(device_record);
 | 
			
		||||
        data.lang                 = renderLanguage(device_record);
 | 
			
		||||
        data.device_created       = renderDate(data.device_created);
 | 
			
		||||
 | 
			
		||||
        data.ua_modified          = renderBoolean(data.ua_modified);
 | 
			
		||||
        const ip_country_record = {
 | 
			
		||||
            isp_name:       data.netname,
 | 
			
		||||
            ipid:           data.ipid,
 | 
			
		||||
            ip:             data.ip,
 | 
			
		||||
            country_id:     data.ip_country_id,
 | 
			
		||||
            country_iso:    data.ip_country_iso,
 | 
			
		||||
            full_country:   data.ip_full_country,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        data.cidr                 = renderCidr(data);
 | 
			
		||||
        data.netname              = renderNetName(data);
 | 
			
		||||
 | 
			
		||||
        data.ip                   = renderClickableIpWithCountry(ip_country_record);
 | 
			
		||||
        data.ip_country           = renderClickableCountryName(ip_country_record);
 | 
			
		||||
 | 
			
		||||
        data.referer              = renderReferer(data);
 | 
			
		||||
        data.ua                   = renderUserAgent(data);
 | 
			
		||||
        data.query                = renderQuery(data);
 | 
			
		||||
 | 
			
		||||
        data.asn                  = renderClickableAsn(data);
 | 
			
		||||
 | 
			
		||||
        data.firstname            = renderUserFirstname(data);
 | 
			
		||||
        data.lastname             = renderUserLastname(data);
 | 
			
		||||
 | 
			
		||||
        data.ip_users             = renderUserCounter(data.ip_users, 2, true);
 | 
			
		||||
        data.ip_events            = renderDefaultIfEmptyElement(data.ip_events);
 | 
			
		||||
        //data.ip_events            = data.ip_events;
 | 
			
		||||
        data.ip_spamlist          = renderBoolean(data.spamlist);
 | 
			
		||||
        data.ip_type              = renderIpType(data);
 | 
			
		||||
        //  TODO: return alert_list back in next release
 | 
			
		||||
        //data.ip_alert_list        = renderBoolean(data.ip_alert_list);
 | 
			
		||||
 | 
			
		||||
        /***
 | 
			
		||||
        data.tor                  = renderBoolean(data.tor);
 | 
			
		||||
        data.vpn                  = renderBoolean(data.vpn);
 | 
			
		||||
        data.relay                = renderBoolean(data.relay);
 | 
			
		||||
        data.data_center          = renderBoolean(data.data_center);
 | 
			
		||||
        ***/
 | 
			
		||||
 | 
			
		||||
        data.payload              = renderJsonTextarea(data.event_payload);
 | 
			
		||||
 | 
			
		||||
        return data;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,37 @@
 | 
			
		||||
import {BasePanel} from './BasePanel.js?v=2';
 | 
			
		||||
import {
 | 
			
		||||
    renderIp,
 | 
			
		||||
    renderTimeMs,
 | 
			
		||||
    renderErrorType,
 | 
			
		||||
    renderSensorError,
 | 
			
		||||
    renderJsonTextarea,
 | 
			
		||||
    renderMailto,
 | 
			
		||||
} from '../DataRenderers.js?v=2';
 | 
			
		||||
 | 
			
		||||
export class LogbookPanel extends BasePanel {
 | 
			
		||||
 | 
			
		||||
    constructor() {
 | 
			
		||||
        let eventParams = {
 | 
			
		||||
            enrichment: false,
 | 
			
		||||
            type: 'logbook',
 | 
			
		||||
            url: '/admin/logbookDetails',
 | 
			
		||||
            cardId: 'logbook-card',
 | 
			
		||||
            panelClosed: 'logbookPanelClosed',
 | 
			
		||||
            closePanel: 'closeLogbookPanel',
 | 
			
		||||
            rowClicked: 'logbookTableRowClicked',
 | 
			
		||||
        };
 | 
			
		||||
        super(eventParams);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    proceedData(data) {
 | 
			
		||||
        data.ip         = renderIp(data);
 | 
			
		||||
        data.started    = renderTimeMs(data.started);
 | 
			
		||||
        data.error_type = renderErrorType(data);
 | 
			
		||||
        data.error_text = renderSensorError(data);
 | 
			
		||||
        data.request    = renderJsonTextarea(data.raw);
 | 
			
		||||
 | 
			
		||||
        data.mailto     = renderMailto(data);
 | 
			
		||||
 | 
			
		||||
        return data;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,58 @@
 | 
			
		||||
import {BasePanel} from './BasePanel.js?v=2';
 | 
			
		||||
import {
 | 
			
		||||
    renderPhone,
 | 
			
		||||
    renderDefaultIfEmptyElement,
 | 
			
		||||
    renderFullCountry,
 | 
			
		||||
    renderPhoneCarrierName,
 | 
			
		||||
    renderPhoneType,
 | 
			
		||||
    renderUserCounter,
 | 
			
		||||
    renderBoolean,
 | 
			
		||||
    renderUsersList,
 | 
			
		||||
} from '../DataRenderers.js?v=2';
 | 
			
		||||
 | 
			
		||||
export class PhonePanel extends BasePanel {
 | 
			
		||||
 | 
			
		||||
    constructor() {
 | 
			
		||||
        let eventParams = {
 | 
			
		||||
            enrichment: true,
 | 
			
		||||
            type: 'phone',
 | 
			
		||||
            url: '/admin/phoneDetails',
 | 
			
		||||
            cardId: 'phone-card',
 | 
			
		||||
            panelClosed: 'phonePanelClosed',
 | 
			
		||||
            closePanel: 'closePhonePanel',
 | 
			
		||||
            rowClicked: 'phoneTableRowClicked',
 | 
			
		||||
        };
 | 
			
		||||
        super(eventParams);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    proceedData(data) {
 | 
			
		||||
        const phone_record = {
 | 
			
		||||
            phonenumber:    data.phone_number,
 | 
			
		||||
            country_id:     data.country_id,
 | 
			
		||||
            country_iso:    data.country_iso,
 | 
			
		||||
            full_country:   data.full_country,
 | 
			
		||||
            carrier_name:   data.carrier_name,
 | 
			
		||||
            type:           data.type
 | 
			
		||||
        };
 | 
			
		||||
        data.phone_number           = renderPhone(phone_record);
 | 
			
		||||
        data.phone_national         = renderDefaultIfEmptyElement(data.national_format);
 | 
			
		||||
        data.country                = renderFullCountry(data.full_country);
 | 
			
		||||
        data.carrier_name           = renderPhoneCarrierName(phone_record);
 | 
			
		||||
        data.type                   = renderPhoneType(phone_record);
 | 
			
		||||
        data.shared                 = renderUserCounter(data.shared, 2);
 | 
			
		||||
 | 
			
		||||
        // to 'No Profiles'
 | 
			
		||||
        //data.profiles               = renderBoolean(data.profiles === null ? null : data.profiles === 0);
 | 
			
		||||
 | 
			
		||||
        data.fraud_detected         = renderBoolean(data.fraud_detected);
 | 
			
		||||
        data.invalid                = renderBoolean(data.invalid);
 | 
			
		||||
        //  TODO: return alert_list back in next release
 | 
			
		||||
        //data.alert_list           = renderBoolean(data.alert_list);
 | 
			
		||||
 | 
			
		||||
        data.shared_users           = renderUsersList(data.shared_users);
 | 
			
		||||
 | 
			
		||||
        // also data.checked is used
 | 
			
		||||
 | 
			
		||||
        return data;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user