Annotation of ChivanetModcon/modcon, revision 1.1

1.1     ! snw         1: #!/usr/bin/env perl
        !             2: 
        !             3: #
        !             4: # ChivaNet Moderator Console
        !             5: #  Copyright (C) 2025 Coherent Logic Development LLC
        !             6: #
        !             7: # $Id$
        !             8: #
        !             9: # Author: Serena Willis <snw@coherent-logic.com>
        !            10: #
        !            11: # Licensed AGPL-3.0
        !            12: #
        !            13: # $Log$
        !            14: #
        !            15: 
        !            16: use REST::Client;
        !            17: use JSON;
        !            18: use Getopt::Long;
        !            19: use Data::Dumper;
        !            20: use Term::ReadKey;
        !            21: 
        !            22: my $rasurl = '';
        !            23: my $apikey = '';
        !            24: my $online = 0;
        !            25: my $modcon_version = '0.0.1';
        !            26: my $cnclient = '';
        !            27: my $rasclient = '';
        !            28: 
        !            29: my $wchar = '';
        !            30: my $hchar = '';
        !            31: my $wpixels = '';
        !            32: my $hpixels = '';
        !            33: 
        !            34: sub list_sso_users {
        !            35:     $cnclient->GET("/chivanet/users");
        !            36:     my $ct = 0;
        !            37:     
        !            38:     my $json = $cnclient->responseContent();
        !            39:     my $hashref = decode_json($json);
        !            40: 
        !            41:     if($hashref->{ok} == 1) {
        !            42:         my $arrayref = $hashref->{users};
        !            43:         my @users = sort(@{$arrayref});
        !            44:         
        !            45:         foreach my $user (@users) {
        !            46:             print "$user\n";
        !            47:             $ct = $ct + 1;
        !            48: 
        !            49:             if($ct > $hchar - 2) {
        !            50:                 print "ENTER to continue, Q to quit...";
        !            51:                 my $resp = <STDIN>;
        !            52:                 chomp($resp);
        !            53:                 if($resp eq "Q") {
        !            54:                     return;
        !            55:                 }
        !            56:                 elsif($resp eq "q") {
        !            57:                     return;
        !            58:                 }
        !            59:                 $ct = 0;
        !            60:             }
        !            61:         }
        !            62:     }
        !            63:     else {
        !            64:         print "RPC error\n";
        !            65:     }
        !            66: }
        !            67: 
        !            68: sub list_ras_users {
        !            69: 
        !            70: }
        !            71: 
        !            72: sub prompt {
        !            73:     
        !            74:     my $rawcmd = '';
        !            75:     my $mode = 'SSO';
        !            76:     my $user = '---';
        !            77: 
        !            78:     while (1) {
        !            79:         print "MODCON [$mode/$user]> ";
        !            80:         my $line = <STDIN>;
        !            81:         chomp($line);
        !            82:         $rawcmd = $line;
        !            83:         
        !            84:         my @cmd = split(' ', $rawcmd);
        !            85:         
        !            86:         if ($cmd[0] eq "quit") {
        !            87:             return;
        !            88:         }
        !            89:         elsif ($cmd[0] eq "mode") {
        !            90:             if($cmd[1] eq "SSO") {
        !            91:                 $mode = "SSO";
        !            92:                 $user = "---";
        !            93:             }
        !            94:             elsif ($cmd[1] eq "RAS") {
        !            95:                 $mode = "RAS";
        !            96:                 $user = "---";
        !            97:             }
        !            98:             else {
        !            99:                 print "?\n";
        !           100:             }
        !           101:         }
        !           102:         elsif ($cmd[0] eq "list") {
        !           103:             if($cmd[1] eq "users") {
        !           104:                 if($mode eq "SSO") {
        !           105:                     list_sso_users();
        !           106:                 }
        !           107:                 elsif($mode eq "RAS") {
        !           108:                     list_ras_users();
        !           109:                 }
        !           110:             }
        !           111:             else {
        !           112:                 print "?\n";
        !           113:             }
        !           114:         }
        !           115:         else {
        !           116:             print "?\n"
        !           117:         }
        !           118:     }
        !           119: 
        !           120: }
        !           121: 
        !           122: sub main {  
        !           123:     GetOptions("rasurl=s" => \$rasurl,               
        !           124:                "apikey=s" => \$apikey)
        !           125:         or die("error in command line arguments");
        !           126: 
        !           127:     ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
        !           128:     
        !           129:     $cnclient = REST::Client->new({
        !           130:         host => 'https://chivanet.org/rest/api',
        !           131:         timeout => 10});
        !           132: 
        !           133:     $cnclient->addHeader('Authorization', "Apikey $apikey");
        !           134: 
        !           135:     $rasclient = REST::Client->new({
        !           136:         host => $rasurl,
        !           137:         timeout => 10});    
        !           138:     
        !           139:     print "ChivaNet MODCON $modcon_version\n";
        !           140:     print " Copyright (C) 2025 Coherent Logic Development LLC\n\n";
        !           141:     
        !           142:     prompt();
        !           143:     print "Goodbye.\n"
        !           144: }
        !           145: 
        !           146: main();

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>