Comparison

plugins/mod_admin_shell.lua @ 11892:e712133b4de1

util.human.io: Pass nil to cell mapper to signal missing value Seems more like conventional Lua than passing an empty string to signal lack of value.
author Kim Alvefur <zash@zash.se>
date Fri, 12 Nov 2021 11:43:24 +0100
parent 11891:6a241e66eec5
child 11905:bbfa707a4756
comparison
equal deleted inserted replaced
11891:6a241e66eec5 11892:e712133b4de1
41 41
42 local format_number = require "util.human.units".format; 42 local format_number = require "util.human.units".format;
43 local format_table = require "util.human.io".table; 43 local format_table = require "util.human.io".table;
44 44
45 local function capitalize(s) 45 local function capitalize(s)
46 if not s then return end
46 return (s:gsub("^%a", string.upper):gsub("_", " ")); 47 return (s:gsub("^%a", string.upper):gsub("_", " "));
47 end 48 end
48 49
49 local commands = module:shared("commands") 50 local commands = module:shared("commands")
50 local def_env = module:shared("env"); 51 local def_env = module:shared("env");
650 host = { 651 host = {
651 title = "Host"; 652 title = "Host";
652 key = "host"; 653 key = "host";
653 width = 22; 654 width = 22;
654 mapper = function(host, session) 655 mapper = function(host, session)
655 if host ~= "" then return host; end 656 return host or get_s2s_hosts(session) or "?";
656 return get_s2s_hosts(session) or "?";
657 end; 657 end;
658 }; 658 };
659 remote = { 659 remote = {
660 title = "Remote"; 660 title = "Remote";
661 width = 22; 661 width = 22;
669 key = "direction"; 669 key = "direction";
670 mapper = function(dir, session) 670 mapper = function(dir, session)
671 if session.incoming and session.outgoing then return "<->"; end 671 if session.incoming and session.outgoing then return "<->"; end
672 if dir == "outgoing" then return "-->"; end 672 if dir == "outgoing" then return "-->"; end
673 if dir == "incoming" then return "<--"; end 673 if dir == "incoming" then return "<--"; end
674 return ""
675 end; 674 end;
676 }; 675 };
677 id = { title = "Session ID"; width = 20; key = "id" }; 676 id = { title = "Session ID"; width = 20; key = "id" };
678 type = { title = "Type"; width = #"c2s_unauthed"; key = "type" }; 677 type = { title = "Type"; width = #"c2s_unauthed"; key = "type" };
679 method = { 678 method = {
691 }; 690 };
692 ipv = { 691 ipv = {
693 title = "IPv"; 692 title = "IPv";
694 width = 4; 693 width = 4;
695 key = "ip"; 694 key = "ip";
696 mapper = function(ip) return ip:find(":") and "IPv6" or "IPv4"; end; 695 mapper = function(ip) if ip then return ip:find(":") and "IPv6" or "IPv4"; end end;
697 }; 696 };
698 ip = { title = "IP address"; width = 40; key = "ip" }; 697 ip = { title = "IP address"; width = 40; key = "ip" };
699 status = { 698 status = {
700 title = "Status"; 699 title = "Status";
701 width = 11; 700 width = 11;
702 key = "presence"; 701 key = "presence";
703 mapper = function(p) 702 mapper = function(p)
704 if not p or p == "" then return "unavailable"; end 703 if not p then return "unavailable"; end
705 return p:get_child_text("show") or "available"; 704 return p:get_child_text("show") or "available";
706 end; 705 end;
707 }; 706 };
708 secure = { 707 secure = {
709 title = "Security"; 708 title = "Security";
710 key = "conn"; 709 key = "conn";
711 width = 11; 710 width = 11;
712 mapper = function(conn, session) 711 mapper = function(conn, session)
713 if not session.secure then return "insecure"; end 712 if not session.secure then return "insecure"; end
714 if conn == "" or not conn:ssl() then return "secure" end 713 if not conn:ssl() then return "secure" end
715 local sock = conn ~= "" and conn:socket(); 714 local sock = conn and conn:socket();
716 if not sock then return "unknown TLS"; end 715 if not sock then return "unknown TLS"; end
717 local tls_info = sock.info and sock:info(); 716 local tls_info = sock.info and sock:info();
718 return tls_info and tls_info.protocol or "unknown TLS"; 717 return tls_info and tls_info.protocol or "unknown TLS";
719 end; 718 end;
720 }; 719 };
721 encryption = { 720 encryption = {
722 title = "Encryption"; 721 title = "Encryption";
723 width = 30; 722 width = 30;
724 key = "conn"; 723 key = "conn";
725 mapper = function(conn) 724 mapper = function(conn)
726 local sock = conn ~= "" and conn:socket(); 725 local sock = conn:socket();
727 local info = sock and sock.info and sock:info(); 726 local info = sock and sock.info and sock:info();
728 if info then return info.cipher end 727 if info then return info.cipher end
729 return ""
730 end; 728 end;
731 }; 729 };
732 cert = { 730 cert = {
733 title = "Certificate"; 731 title = "Certificate";
734 key = "cert_identity_status"; 732 key = "cert_identity_status";
735 width = 13; 733 width = 13;
736 mapper = function(cert_status, session) 734 mapper = function(cert_status, session)
737 if cert_status ~= "" then return capitalize(cert_status); end 735 if cert_status then return capitalize(cert_status); end
738 if session.cert_chain_status == "Invalid" then 736 if session.cert_chain_status == "Invalid" then
739 local cert_errors = set.new(session.cert_chain_errors[1]); 737 local cert_errors = set.new(session.cert_chain_errors[1]);
740 if cert_errors:contains("certificate has expired") then 738 if cert_errors:contains("certificate has expired") then
741 return "Expired"; 739 return "Expired";
742 elseif cert_errors:contains("self signed certificate") then 740 elseif cert_errors:contains("self signed certificate") then
751 }; 749 };
752 sni = { 750 sni = {
753 title = "SNI"; 751 title = "SNI";
754 width = 22; 752 width = 22;
755 mapper = function(_, session) 753 mapper = function(_, session)
756 if not session.conn then return "" end 754 if not session.conn then return end
757 local sock = session.conn:socket(); 755 local sock = session.conn:socket();
758 return sock and sock.getsniname and sock:getsniname() or ""; 756 return sock and sock.getsniname and sock:getsniname() or "";
759 end; 757 end;
760 }; 758 };
761 alpn = { 759 alpn = {
762 title = "ALPN"; 760 title = "ALPN";
763 width = 11; 761 width = 11;
764 mapper = function(_, session) 762 mapper = function(_, session)
765 if not session.conn then return "" end 763 if not session.conn then return end
766 local sock = session.conn:socket(); 764 local sock = session.conn:socket();
767 return sock and sock.getalpn and sock:getalpn() or ""; 765 return sock and sock.getalpn and sock:getalpn() or "";
768 end; 766 end;
769 }; 767 };
770 smacks = { 768 smacks = {
771 title = "SM"; 769 title = "SM";
772 key = "smacks"; 770 key = "smacks";
773 width = 11; 771 width = 11;
774 mapper = function(smacks_xmlns, session) 772 mapper = function(smacks_xmlns, session)
775 if smacks_xmlns == "" then return "no"; end 773 if not smacks_xmlns then return "no"; end
776 if session.hibernating then return "hibernating"; end 774 if session.hibernating then return "hibernating"; end
777 return "yes"; 775 return "yes";
778 end; 776 end;
779 }; 777 };
780 smacks_queue = { 778 smacks_queue = {
781 title = "SM Queue"; 779 title = "SM Queue";
782 key = "outgoing_stanza_queue"; 780 key = "outgoing_stanza_queue";
783 width = 8; 781 width = 8;
784 align = "right"; 782 align = "right";
785 mapper = function (queue) 783 mapper = function (queue)
786 return tostring(#queue); 784 return queue and tostring(#queue);
787 end 785 end
788 }; 786 };
789 csi = { 787 csi = {
790 title = "CSI State"; 788 title = "CSI State";
791 key = "state"; 789 key = "state";
800 dialback = { 798 dialback = {
801 title = "Dialback"; 799 title = "Dialback";
802 key = "dialback_key"; 800 key = "dialback_key";
803 width = 13; 801 width = 13;
804 mapper = function (dialback_key, session) 802 mapper = function (dialback_key, session)
805 if dialback_key == "" then 803 if not dialback_key then
806 if session.type == "s2sin" or session.type == "s2sout" then 804 if session.type == "s2sin" or session.type == "s2sout" then
807 return "Not used"; 805 return "Not used";
808 end 806 end
809 return "Not initiated"; 807 return "Not initiated";
810 elseif session.type == "s2sin_unauthed" or session.type == "s2sout_unauthed" then 808 elseif session.type == "s2sin_unauthed" or session.type == "s2sout_unauthed" then