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,318 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user