1#!/usr/local/bin/perl
2# list_sessions.cgi
3# Display current login sessions
4
5use strict;
6use warnings;
7require './acl-lib.pl';
8our (%in, %text, %config, %access, %sessiondb);
9$access{'sessions'} || &error($text{'sessions_ecannot'});
10&ui_print_header(undef, $text{'sessions_title'}, "");
11&ReadParse();
12
13my %miniserv;
14&get_miniserv_config(\%miniserv);
15&open_session_db(\%miniserv);
16my $time_now = time();
17
18my %hasuser;
19foreach my $u (&list_users()) {
20	$hasuser{$u->{'name'}}++;
21	}
22
23my $haslog = &foreign_available("webminlog");
24
25print &ui_columns_start([ $text{'sessions_id'},
26			  $text{'sessions_state'},
27			  $text{'sessions_user'},
28			  $text{'sessions_host'},
29			  $text{'sessions_login'},
30			  $text{'sessions_actions'},
31			], 100);
32foreach my $k (sort { my @a = split(/\s+/, $sessiondb{$a});
33		      my @b = split(/\s+/, $sessiondb{$b}); $b[1] <=> $a[1] }
34		    (grep { $sessiondb{$_} } keys %sessiondb)) {
35	next if ($k =~ /^1111111/);
36	my ($user, $ltime, $lip) = split(/\s+/, $sessiondb{$k});
37	next if ($user =~ /^\!/ && !$in{'logouts'});
38	next if ($miniserv{'logouttime'} &&
39		 $time_now - $ltime > $miniserv{'logouttime'}*60);
40	my @cols;
41	my $candel = 0;
42	if ($k eq $main::session_id ||
43	    $k eq &hash_session_id($main::session_id)) {
44		# Cannot self-terminate
45		push(@cols, "<b><tt>$k</tt></b>");
46		push(@cols, $text{'sessions_this'});
47		}
48	elsif ($user =~ s/^\!//) {
49		# Already logged out
50		push(@cols, "<tt>$k</tt>");
51		push(@cols, $text{'sessions_out'});
52		}
53	else {
54		push(@cols, "<tt>$k</tt>");
55		push(@cols, $text{'sessions_in'});
56		$candel = 1;
57		}
58	if ($hasuser{$user}) {
59		push(@cols, ui_link("edit_user.cgi?user=$user", $user));
60		}
61	elsif ($miniserv{'unixauth'}) {
62		push(@cols, "$user (" . ui_link("edit_user.cgi?user=$miniserv{'unixauth'}", $miniserv{'unixauth'}) . ")");
63		}
64	else {
65		push(@cols, $user);
66		}
67	push(@cols, $lip);
68	push(@cols, &make_date($ltime));
69	my @links;
70	if ($haslog) {
71		push(@links, ui_link("../webminlog/search.cgi?uall=1&mall=1&tall=1&wall=1&fall=1&sid=$k", $text{'sessions_lview'}));
72		}
73	if ($candel) {
74		push(@links, ui_link("delete_session.cgi?id=$k", $text{'sessions_kill'}));
75		}
76	push(@cols, ui_links_row(\@links));
77	print &ui_columns_row(\@cols);
78	}
79print &ui_columns_end();
80if (!$in{'logouts'}) {
81	print &ui_link("list_sessions.cgi?logouts=1",
82		       $text{'sessions_logouts'}),"<p>\n";
83	}
84
85&ui_print_footer("", $text{'index_return'});
86
87