Skip to content
Snippets Groups Projects
Select Git revision
  • dailybuild_linux-x64
  • dailybuild_win32
  • master default protected
  • sqlite
  • rip_abstraction
  • dailybuild_macos-armv8
  • dd_file_lister_filanem_in_desc_color
  • mode7
  • dd_msg_reader_are_you_there_warning_improvement
  • c23-playing
  • syncterm-1.3
  • syncterm-1.2
  • test-build
  • hide_remote_connection_with_telgate
  • 638-can-t-control-c-during-a-file-search
  • add_body_to_pager_email
  • mingw32-build
  • cryptlib-3.4.7
  • ree/mastermind
  • new_user_dat
  • sbbs320d
  • syncterm-1.6
  • syncterm-1.5
  • syncterm-1.4
  • sbbs320b
  • syncterm-1.3
  • syncterm-1.2
  • syncterm-1.2rc6
  • syncterm-1.2rc5
  • push
  • syncterm-1.2rc4
  • syncterm-1.2rc2
  • syncterm-1.2rc1
  • sbbs319b
  • sbbs318b
  • goodbuild_linux-x64_Sep-01-2020
  • goodbuild_win32_Sep-01-2020
  • goodbuild_linux-x64_Aug-31-2020
  • goodbuild_win32_Aug-31-2020
  • goodbuild_win32_Aug-30-2020
40 results

nodelist-html.js

Blame
  • nodelist-html.js 5.48 KiB
    // nodelist-html.js
    
    // Synchronet Service for sending a periodic HTML node list
    
    var refresh_rate=10	/* seconds */
    var start=new Date();
    
    load("nodedefs.js");
    
    var include_age_gender=true;
    var include_location=false;
    var include_statistics=false;
    
    // Parse arguments
    for(i=0;i<argc;i++)
    	switch(argv[i].toLowerCase()) {
    		case "-r":
    			refresh_rate=Number(argv[++i]);
    			break;
    		case "-n":
    			include_age_gender=false;
    			break;
    		case "-l":
    			include_location=true;
    			break;
    		case "-s":	/* statistics */
    			include_statistics=true;
    			break;
    	}
    
    if((this.http_request==undefined) && this.server && this.client) {
    
    	// Write a string to the client socket
    	function write(str)
    	{
    		client.socket.send(str);
    	}
    
    	function writeln(str)
    	{
    		if(str)
    			write(str + "\r\n");
    		else
    			write("\r\n");
    	}
    }
    
    function xtrn_name(code)
    {
    	if(this.xtrn_area==undefined)
    		return(code);
    
    	for(s in xtrn_area.sec_list)
    		for(p in xtrn_area.sec_list[s].prog_list)
    			if(xtrn_area.sec_list[s].prog_list[p].code.toLowerCase()==code.toLowerCase())
    				return(xtrn_area.sec_list[s].prog_list[p].name);
    	return(code);
    }
    
    // Get HTTP Request
    while(this.client!=undefined && client.socket.data_waiting) {
    	request = client.socket.recvline(512 /*maxlen*/, 3 /*timeout*/);
    
    	if(request==null) 
    		break;
    
    //	log(format("client request: '%s'",request));
    }
    
    if(this.server!=undefined) 	/* !CGI */
    	writeln("HTTP/1.0 200 OK");
    
    /* send HTTP headers */
    writeln("Content-Type: text/html");
    writeln();
    
    // HTML Header
    writeln("<html>");
    writeln("<head>");
    writeln(format("<title>%s - Node List</title>",system.name));
    writeln(format("<meta http-equiv=refresh content=%d>",refresh_rate));
    writeln("</head>");
    
    writeln("<body bgcolor=teal text=white link=yellow vlink=lime alink=white>");
    writeln("<font face=Arial,Helvetica,sans-serif>");
    
    // Login Button - Modified by RuneMaster of RuneKeep BBS
    writeln("<table border=0 width=100%>");
    writeln("<tr>");
    writeln("<td align=left>");
    writeln(format("<h1>%s - Node List</h1>",system.name.italics()).fontcolor("lime"));
    writeln("</td>");
    writeln("<td align=right>");
    writeln("<form>");
    writeln("<input type=button value='Login' onClick='location=\"telnet://"
            + system.host_name + "\";'>");
    writeln("</form>");
    writeln("</td>");
    writeln("</tr>");
    writeln("</table>");
    
    font_color = "<font color=black>";
    
    if(include_statistics) {
    	total	= time()-system.uptime;
    	days	= Math.floor(total/(24*60*60));
    	if(days) 
    		total%=(24*60*60);
    	hours	= Math.floor(total/(60*60));
    	min	= (Math.floor(total/60))%60;
    	sec	= total%60;
    
    	// Table
    	writeln("<table border=1 width=100%>");
    	writeln("<td>Up Time<td>" 
    		+ format("%u days, %u:%02u:%02u",days,hours,min,sec));
    	writeln("<td>Logons Today<td>" + system.stats.logons_today);
    	writeln("<td>Posts Today<td>" + system.stats.messages_posted_today);
    	writeln("<td>Uploads Today<td>" 
    		+ format("%lu bytes in %lu files"
    			,system.stats.bytes_uploaded_today
    			,system.stats.files_uploaded_today));
    	writeln("<tr>");
    	writeln("<td>Time-on Today<td>" + system.stats.timeon_today);
    	writeln("<td>New Users Today<td>" + system.stats.new_users_today);
    	writeln("<td>Emails Today<td>" + system.stats.email_sent_today);
    	writeln("<td>Downloads Today<td>" 
    		+ format("%lu bytes in %lu files"
    			,system.stats.bytes_downloaded_today
    			,system.stats.files_downloaded_today));
    	writeln("</table>");
    	writeln("<br>");
    }
    
    // Table
    writeln("<table border=0 width=100%>");
    
    // Header
    writeln("<thead>");
    writeln("<tr bgcolor=white>");
    
    write("<th align=center width=7%>" + font_color + "Node");
    write("<th align=center width=20%>" + font_color + "User");
    write("<th align=left>" + font_color + "Action/Status");
    if(include_location) 
    	write("<th align=left>" +font_color+ "Location");
    if(include_age_gender) {
    	write("<th align=center width=7%>" + font_color + "Age");
    	write("<th align=center width=10%>" + font_color + "Gender\r\n");
    }
    write("<th align=center width=10%>" + font_color + "Time\r\n");
    writeln("</thead>");
    
    writeln("<tbody>");
    var u = new User(0);
    for(n=0;n<system.node_list.length;n++) {
    	write("<tr>");
    	write(format("<td align=right><font size=-1>%d",n+1));
    	if(system.node_list[n].status==NODE_INUSE) {
    		u.number=system.node_list[n].useron;
    		if(system.node_list[n].action==NODE_XTRN && system.node_list[n].aux)
    			action=format("running %s",xtrn_name(u.curxtrn));
    		else
    			action=format(NodeAction[system.node_list[n].action]
    				,system.node_list[n].aux);
    		write(format(
    			"<td align=center><a href=mailto:%s>%s</a>"
    			,u.email
    			,u.alias
    			));
    		write(format(
    			"<td><font color=yellow>%s"
    			,action
    			));
    		if(include_location)
    			write(format(
    				"<td align=left>%s"
    				,u.location
    				));
    		if(include_age_gender) 
    			write(format(
    				"<td align=center>%d<td align=center>%s"
    				,u.age
    				,u.gender
    				));
    		t=time()-u.logontime;
            if(t&0x80000000) t=0;
    		write(format(
    			"<td align=center>%u:%02u:%02u"
    			,Math.floor(t/(60*60))
    			,Math.floor(t/60)%60
    			,t%60
    			));
    	} else {
    		action=format(NodeStatus[system.node_list[n].status],system.node_list[n].aux);
    		write(format("<td><td>%s",action));
    	}
    	write("\r\n");
    }
    writeln("</tbody>");
    writeln("</table>");
    
    writeln("<p><font color=silver><font size=-2>");
    writeln(format("Auto-refresh in %d seconds",refresh_rate));
    write(format("<br>Dynamically generated in %lu milliseconds "
    	  ,new Date().valueOf()-start.valueOf()));
    write("by ");
    if(this.server)
    	write(server.version + " and ");
    write(system.version_notice.link("http://www.synchro.net"));
    writeln("<br>" + system.timestr());
    
    writeln("</body>");
    writeln("</html>");
    /* End of nodelist-html.js */