- 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.
		
			
				
	
	
		
			134 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {BaseTiles} from './BaseTiles.js?v=2';
 | 
						|
import {
 | 
						|
    renderDate,
 | 
						|
    renderBoolean,
 | 
						|
    renderUserCounter,
 | 
						|
    renderReputation,
 | 
						|
    renderUserId,
 | 
						|
    renderUserFirstname,
 | 
						|
    renderUserLastname,
 | 
						|
    renderUserReviewedStatus,
 | 
						|
} from '../DataRenderers.js?v=2';
 | 
						|
 | 
						|
const URL   = '/admin/loadUserDetails';
 | 
						|
 | 
						|
export class UserTiles extends BaseTiles {
 | 
						|
    updateTiles(data) {
 | 
						|
        this.updateIdDetails(data);
 | 
						|
        this.updateIpDetails(data);
 | 
						|
        this.updateDayDetails(data);
 | 
						|
        this.updateWeekDetails(data);
 | 
						|
    }
 | 
						|
 | 
						|
    updateIdDetails(data) {
 | 
						|
        const tile = document.querySelector('#user-id-tile');
 | 
						|
 | 
						|
        if (!tile) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        const record = data.userDetails;
 | 
						|
        this.removeLoaderBackground(tile);
 | 
						|
 | 
						|
        tile.querySelector('#signup-date').replaceChildren(renderDate(record.created));
 | 
						|
        tile.querySelector('#lastseen').replaceChildren(renderDate(record.lastseen));
 | 
						|
        tile.querySelector('#latest-decision').replaceChildren(renderDate(record.latest_decision));
 | 
						|
        tile.querySelector('#review-status').replaceChildren(renderUserReviewedStatus(record));
 | 
						|
        tile.querySelector('#firstname').replaceChildren(renderUserFirstname(record));
 | 
						|
        tile.querySelector('#lastname').replaceChildren(renderUserLastname(record));
 | 
						|
        tile.querySelector('#userid').replaceChildren(renderUserId(record.userid));
 | 
						|
    }
 | 
						|
 | 
						|
    updateIpDetails(data) {
 | 
						|
        const tile = document.querySelector('#user-ip-tile');
 | 
						|
 | 
						|
        if (!tile) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        const record = data.ipDetails;
 | 
						|
        this.removeLoaderBackground(tile);
 | 
						|
 | 
						|
        tile.querySelector('#datacenter').replaceChildren(renderBoolean(record.withdc));
 | 
						|
        tile.querySelector('#vpn').replaceChildren(renderBoolean(record.withvpn));
 | 
						|
        tile.querySelector('#tor').replaceChildren(renderBoolean(record.withtor));
 | 
						|
        tile.querySelector('#apple-relay').replaceChildren(renderBoolean(record.withar));
 | 
						|
        tile.querySelector('#ip-shared').replaceChildren(renderBoolean(record.sharedips));
 | 
						|
        tile.querySelector('#spam-list').replaceChildren(renderBoolean(record.spamlist));
 | 
						|
        tile.querySelector('#blacklisted').replaceChildren(renderBoolean(record.fraud_detected));
 | 
						|
    }
 | 
						|
 | 
						|
    updateDayDetails(data) {
 | 
						|
        const limits = {
 | 
						|
            median_event_cnt:   20,
 | 
						|
            login_cnt:          3,
 | 
						|
            session_cnt:        5,
 | 
						|
        };
 | 
						|
 | 
						|
        this.updateDateRangeDetails(data.dayDetails, '#day-behaviour-tile', limits);
 | 
						|
    }
 | 
						|
 | 
						|
    updateWeekDetails(data) {
 | 
						|
        const limits = {
 | 
						|
            median_event_cnt:   20,
 | 
						|
            login_cnt:          10,
 | 
						|
            session_cnt:        25,
 | 
						|
        };
 | 
						|
 | 
						|
        this.updateDateRangeDetails(data.weekDetails, '#week-behaviour-tile', limits);
 | 
						|
    }
 | 
						|
 | 
						|
    updateDateRangeDetails(record, tileId, limits) {
 | 
						|
        const tile = document.querySelector(tileId);
 | 
						|
 | 
						|
        if (!tile) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        const span = document.createElement('span');
 | 
						|
        span.className = 'nolight';
 | 
						|
        span.textContent = 'N/A';
 | 
						|
 | 
						|
        this.removeLoaderBackground(tile);
 | 
						|
 | 
						|
        if (record.session_cnt === 0) {
 | 
						|
            tile.querySelector('#failed-login-count').replaceChildren(span.cloneNode(true));
 | 
						|
            tile.querySelector('#password-reset-count').replaceChildren(span.cloneNode(true));
 | 
						|
            tile.querySelector('#auth-error-count').replaceChildren(span.cloneNode(true));
 | 
						|
            tile.querySelector('#off-hours-login-count').replaceChildren(span.cloneNode(true));
 | 
						|
            tile.querySelector('#median-event-count').replaceChildren(span.cloneNode(true));
 | 
						|
            tile.querySelector('#login-count').replaceChildren(span.cloneNode(true));
 | 
						|
            tile.querySelector('#session-count').replaceChildren(span.cloneNode(true));
 | 
						|
        } else {
 | 
						|
            const map = [
 | 
						|
                ['#failed-login-count',     'failed_login_cnt'],
 | 
						|
                ['#password-reset-count',   'password_reset_cnt'],
 | 
						|
                ['#auth-error-count',       'auth_error_cnt'],
 | 
						|
                ['#off-hours-login-count',  'off_hours_login_cnt'],
 | 
						|
                ['#median-event-count',     'median_event_cnt'],
 | 
						|
                ['#login-count',            'login_cnt'],
 | 
						|
                ['#session-count',          'session_cnt'],
 | 
						|
            ];
 | 
						|
 | 
						|
            for (const [id, el] of map) {
 | 
						|
                tile.querySelector(id).replaceChildren(renderUserCounter(record[el], limits[el] || 1));
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    removeLoaderBackground(tile) {
 | 
						|
        const backgrounds = tile.querySelectorAll('.loading-background');
 | 
						|
        for (let i = 0; i < backgrounds.length; i++) {
 | 
						|
            backgrounds[i].classList.remove('loading-background');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    get elems() {
 | 
						|
        return [];
 | 
						|
    }
 | 
						|
 | 
						|
    get url() {
 | 
						|
        return URL;
 | 
						|
    }
 | 
						|
}
 |