- 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.
		
			
				
	
	
		
			319 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			319 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {
 | 
						|
    renderDefaultIfEmptyElement,
 | 
						|
    renderBoolean,
 | 
						|
    renderDate,
 | 
						|
    renderCountryIso,
 | 
						|
    renderHttpCode,
 | 
						|
    renderPhoneType,
 | 
						|
    renderPhoneCarrierName,
 | 
						|
    renderAsn,
 | 
						|
} from '../parts/DataRenderers.js?v=2';
 | 
						|
 | 
						|
export class ManualCheckItems {
 | 
						|
 | 
						|
    constructor() {
 | 
						|
        const table = document.querySelector('.events-card.is-hidden');
 | 
						|
 | 
						|
        if (!table) return;
 | 
						|
 | 
						|
        table.classList.remove('is-hidden');
 | 
						|
 | 
						|
        const itemType = table.dataset.itemType;
 | 
						|
 | 
						|
        if ('ip' == itemType) {
 | 
						|
            this.enrichIpDetails();
 | 
						|
        }
 | 
						|
 | 
						|
        if ('email' == itemType) {
 | 
						|
            this.enrichEmailDetails();
 | 
						|
        }
 | 
						|
 | 
						|
        if ('domain' == itemType) {
 | 
						|
            this.enrichDomainDetails();
 | 
						|
        }
 | 
						|
 | 
						|
        if ('phone' == itemType) {
 | 
						|
            this.enrichPhoneDetails();
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    enrichPhoneDetails() {
 | 
						|
        let item  = null;
 | 
						|
 | 
						|
        item = 'iso_country_code';
 | 
						|
        this.renderCountryIso(item);
 | 
						|
 | 
						|
        item  = 'type';
 | 
						|
        this.renderPhoneType(item);
 | 
						|
 | 
						|
        item = 'invalid';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item  = 'profiles';
 | 
						|
        this.renderProfiles(item);
 | 
						|
 | 
						|
        item = 'carrier_name';
 | 
						|
        this.renderPhoneCarrierName(item);
 | 
						|
    }
 | 
						|
 | 
						|
    enrichDomainDetails() {
 | 
						|
        let item   = null;
 | 
						|
 | 
						|
        item = 'blockdomains';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'disposable_domains';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'free_email_provider';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'geo_ip';
 | 
						|
        this.renderCountryIso(item);
 | 
						|
 | 
						|
        item = 'geo_html';
 | 
						|
        this.renderCountryIso(item);
 | 
						|
 | 
						|
        item = 'web_server';
 | 
						|
        this.renderDefaultIfEmptyElement(item);
 | 
						|
 | 
						|
        item = 'hostname';
 | 
						|
        this.renderDefaultIfEmptyElement(item);
 | 
						|
 | 
						|
        item = 'emails';
 | 
						|
        this.renderDefaultIfEmptyElement(item);
 | 
						|
 | 
						|
        item = 'phone';
 | 
						|
        this.renderDefaultIfEmptyElement(item);
 | 
						|
 | 
						|
        item = 'discovery_date';
 | 
						|
        this.renderDate(item);
 | 
						|
 | 
						|
        item = 'creation_date';
 | 
						|
        this.renderDate(item);
 | 
						|
 | 
						|
        item = 'expiration_date';
 | 
						|
        this.renderDate(item);
 | 
						|
 | 
						|
        item = 'mx_record';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'return_code';
 | 
						|
        this.renderHttpCode(item);
 | 
						|
 | 
						|
        item = 'disabled';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'closest_snapshot';
 | 
						|
        this.renderDate(item);
 | 
						|
    }
 | 
						|
 | 
						|
    enrichIpDetails() {
 | 
						|
        let item   = null;
 | 
						|
        let value  = null;
 | 
						|
 | 
						|
        item = 'country';
 | 
						|
        this.renderCountryIso(item);
 | 
						|
 | 
						|
        item = 'asn';
 | 
						|
        value = this.getItem(item);
 | 
						|
        value = {asn: value};
 | 
						|
        value = renderAsn(value);
 | 
						|
        this.setItem(item, value);
 | 
						|
 | 
						|
        item = 'hosting';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'vpn';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'tor';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'relay';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'starlink';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'description';
 | 
						|
        this.renderDefaultIfEmptyElement(item);
 | 
						|
 | 
						|
        item = 'blocklist';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'domains_count';
 | 
						|
        value = this.getItem(item);
 | 
						|
        if (value) {
 | 
						|
            value = JSON.parse(value);
 | 
						|
 | 
						|
            if (Array.isArray(value)) {
 | 
						|
                value = value.length;
 | 
						|
            } else {
 | 
						|
                value = parseInt(value, 10);
 | 
						|
            }
 | 
						|
 | 
						|
            if (isNaN(value)) {
 | 
						|
                value = renderDefaultIfEmptyElement(value);
 | 
						|
            } else {
 | 
						|
                value = !!value;
 | 
						|
                value = renderBoolean(value);
 | 
						|
            }
 | 
						|
 | 
						|
        } else {
 | 
						|
            value = renderDefaultIfEmptyElement(value);
 | 
						|
        }
 | 
						|
        this.setItem(item, value);
 | 
						|
    }
 | 
						|
 | 
						|
    enrichEmailDetails() {
 | 
						|
        let item   = null;
 | 
						|
 | 
						|
        item = 'blockemails';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item = 'data_breach';
 | 
						|
        this.renderDataBreach(item);
 | 
						|
 | 
						|
        item = 'earliest_breach';
 | 
						|
        this.renderDate(item);
 | 
						|
 | 
						|
        item = 'domain_contact_email';
 | 
						|
        this.renderBoolean(item);
 | 
						|
 | 
						|
        item  = 'profiles';
 | 
						|
        this.renderProfiles(item);
 | 
						|
    }
 | 
						|
 | 
						|
    renderDataBreach(itemId) {
 | 
						|
        let value;
 | 
						|
 | 
						|
        value = this.getItem(itemId);
 | 
						|
 | 
						|
        if (null === value) {
 | 
						|
            value = renderDefaultIfEmptyElement(value);
 | 
						|
        } else {
 | 
						|
            //Revert databreach to "No databreach"
 | 
						|
            value = !value;
 | 
						|
            value = renderBoolean(value);
 | 
						|
        }
 | 
						|
 | 
						|
        this.setItem(itemId, value);
 | 
						|
    }
 | 
						|
 | 
						|
    renderProfiles(itemId) {
 | 
						|
        let value;
 | 
						|
 | 
						|
        value = this.getItem(itemId);
 | 
						|
        value = parseInt(value, 10);
 | 
						|
 | 
						|
        if (isNaN(value)) {
 | 
						|
            value = renderDefaultIfEmptyElement(value);
 | 
						|
        } else {
 | 
						|
            //Convert to boolean
 | 
						|
            value = !!value;
 | 
						|
 | 
						|
            //Revert profiles to "No profiles"
 | 
						|
            value = !value;
 | 
						|
 | 
						|
            value = renderBoolean(value);
 | 
						|
        }
 | 
						|
 | 
						|
        this.setItem(itemId, value);
 | 
						|
    }
 | 
						|
 | 
						|
    renderDate(itemId) {
 | 
						|
        let value;
 | 
						|
 | 
						|
        value = this.getItem(itemId);
 | 
						|
        value = renderDate(value);
 | 
						|
        this.setItem(itemId, value);
 | 
						|
    }
 | 
						|
 | 
						|
    renderCountryIso(itemId) {
 | 
						|
        let value;
 | 
						|
 | 
						|
        value = this.getItem(itemId);
 | 
						|
        value = {country_iso: value, full_country: value};
 | 
						|
        value = renderCountryIso(value);
 | 
						|
        this.setItem(itemId, value);
 | 
						|
    }
 | 
						|
 | 
						|
    renderHttpCode(itemId) {
 | 
						|
        let value;
 | 
						|
 | 
						|
        value = this.getItem(itemId);
 | 
						|
        value = {http_code: value};
 | 
						|
        value = renderHttpCode(value);
 | 
						|
        this.setItem(itemId, value);
 | 
						|
    }
 | 
						|
 | 
						|
    renderPhoneType(itemId) {
 | 
						|
        let value;
 | 
						|
 | 
						|
        value = this.getItem(itemId);
 | 
						|
        value = {type: value};
 | 
						|
        value = renderPhoneType(value);
 | 
						|
        this.setItem(itemId, value);
 | 
						|
    }
 | 
						|
 | 
						|
    renderPhoneCarrierName(itemId) {
 | 
						|
        let value;
 | 
						|
 | 
						|
        value = this.getItem(itemId);
 | 
						|
        value = {carrier_name: value};
 | 
						|
        value = renderPhoneCarrierName(value);
 | 
						|
        this.setItem(itemId, value);
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    renderBoolean(itemId) {
 | 
						|
        let value;
 | 
						|
 | 
						|
        value = this.getItem(itemId);
 | 
						|
        value = renderBoolean(value);
 | 
						|
        this.setItem(itemId, value);
 | 
						|
    }
 | 
						|
 | 
						|
    renderDefaultIfEmptyElement(itemId) {
 | 
						|
        let value;
 | 
						|
 | 
						|
        value = this.getItem(itemId);
 | 
						|
        value = renderDefaultIfEmptyElement(value);
 | 
						|
        this.setItem(itemId, value);
 | 
						|
    }
 | 
						|
 | 
						|
    getItem(itemId, returnNode = false) {
 | 
						|
        const td = document.querySelector(`td[data-item-id="${itemId}"]`);
 | 
						|
 | 
						|
        if (!td) return null;
 | 
						|
 | 
						|
        const tr = td.closest('tr');
 | 
						|
 | 
						|
        const valueTd = tr.lastElementChild;
 | 
						|
        if (returnNode) {
 | 
						|
            return valueTd;
 | 
						|
        } else {
 | 
						|
            let text  = valueTd.innerText;
 | 
						|
            let value = text;
 | 
						|
 | 
						|
            if ('false' === text) value = false;
 | 
						|
            if ('true'  === text) value = true;
 | 
						|
            if ('null'  === text) value = null;
 | 
						|
 | 
						|
            return value;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    setItem(itemId, value) {
 | 
						|
        const item = this.getItem(itemId, true);
 | 
						|
        if (item) {
 | 
						|
            if (item instanceof Node) {
 | 
						|
                item.replaceChildren(value);
 | 
						|
            } else {
 | 
						|
                item.innerHTML = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |