7f2c8a39f3efe3a38a5242b674efc8e41d9e1cd2
[ga4php.git] / authserver / www / admin.php
1 <?php
2 /*
3  * This is the web component of the GA4PHP radius server. This web app should be able to configure freeradius and itself.
4  * 
5  * This app will try to do the following:
6  * 1) initialise tokens
7  * 2) pull accounts from some backend (such as AD)
8  * 3) allow users to self-enroll.
9  * 
10  * I wonder if we can store data in the backend database itself? that would be interesting
11  * then user admin would be less disconnected. I.e. if a user was deleted from AD, their token
12  * data should disappear with them.
13  */
14 require_once("admin_actions.php");
15
16 // the logged in component
17 if($loggedin) {
18 ?>
19 <h1>GAAS Manager</h1>
20 Welcome to the Google Authenticator Authentication Server Manager Application - <a href="?showhelp">Show Help</a><br>
21
22 <?php 
23 if(isset($_REQUEST["message"])) {
24         echo "<font color=\"green\">".$_REQUEST["message"]."</font>";
25
26 if(isset($_REQUEST["error"])) {
27         echo "<font color=\"red\">".$_REQUEST["error"]."</font>";
28
29
30
31 if(isset($_REQUEST["showhelp"])) {
32         echo "<hr>";
33         ?>
34 On this page, you create users and manage their tokens and passwords. A few notes,<br>
35 <li> Passwords are *ONLY* for this page, if you assign a password to a user they can login here
36 and edit anyone, including you
37 <li> OTK/One-Time-Keys are the QRcode for provisioning a GA token, it can only be viewed once
38 and once viewed is deleted. If you need a new one, you need to re-create a key.
39 <li> TOTP tokens are time based tokens that change every 30 seconds, HOTP tokens are event tokens
40 that change everytime they are used or generated
41 <li> In the OTK, the "Get (User URL)" link is a link you can send to a user to retrieve their key
42         <?php 
43
44
45 if(isset($_REQUEST["edituser"])) {
46         $username = $_REQUEST["edituser"];
47 ?>
48
49 <h2>Editing user, <?php echo $username ?></h2><br>
50 <form method="post" action="?action=edituser&username=<?php echo $username ?>">
51 <input type="hidden" name="original_real" value="<?php echo $_REQUEST["realname"] ?>">
52 <table>
53 <tr><td>Real Name:</td><td><input type="text" name="realname" value="<?php echo $_REQUEST["realname"] ?>"></td></tr>
54 <tr><td>Password:</td><td><input type="password" name="password"></td></tr>
55 <tr><td>Confirm Password:</td><td><input type="password" name="password_conf"></td></tr>
56 </table>
57 <input type="submit" value="Update">
58 </form>
59 <?php
60 if($myAC->getUserTokenType($username)=="HOTP") {
61 ?> 
62 <form method="post" action="?action=synctoken&username=<?php echo $username?>">
63 <h3>Resync Tokens</h3>
64 <table>
65 <tr><td>Token One</td><td><input type="text" name="tokenone"></td></tr>
66 <tr><td>Token Two</td><td><input type="text" name="tokentwo"></td></tr>
67 </table>
68 <input type="submit" value="Sync">
69 </form>
70 <?php
71 }
72 ?> 
73
74 <form method="post" action="?action=customtoken&username=<?php echo $username ?>">
75 <h3>Custom Tokens</h3><br>
76 For assiging in a user-created or hardware tokens.<br>
77 If you assign a token this way, any previous token is removed and forever gone.<br>
78 Token Key (hex) <input type="text" name="tokenkey"><br>
79 Token Type 
80 <select name="tokentype">
81 <option value="HOTP">HOTP</option>
82 <option value="TOTP">TOTP</option>
83 </select><br>
84 <input type="submit" value="Set">
85 </form>
86 <?php
87 } else {
88 ?>
89 <hr><h2>Users</h2>
90 <table border="1">
91 <tr><th>Username</th><th>RealName</th><th>Has Password?</th><th>Has Token?</th><th>One Time Key</th><th>Delete</th></tr>
92 <?php
93 $users = $myAC->getUsers();
94 foreach($users as $user) {
95         $username = $user["username"];
96         
97         if($user["realname"] == "") $realname = "";
98         else $realname = $user["realname"];
99         
100         if($user["haspass"]) $haspass = "Yes <a href=\"?action=deletepass&username=$username\">Delete Password</a>";
101         else $haspass = "No";
102         
103         if($user["otk"]=="deleted") $otk = "OTK Was Not Picked Up";
104         else if($user["otk"]!="") $otk = "<a href=\"?action=getotk&username=$username&otk=".$user["otk"]."\">Get (admin)</a> <a href=\"index.php?gettoken&username=$username&otkid=".$user["otk"]."\">Get (User URL)</a>";
105         else $otk = "Already Claimed";
106         
107         if($user["hastoken"]) $hastoken = "Yes <a href=\"?action=recreatehotptoken&username=$username\">Re-Create (HOTP)</a> <a href=\"?action=recreatetotptoken&username=$username\">Re-Create (TOTP)</a> <a href=\"?action=deletetoken&username=$username\">Delete</a>";
108         else {
109                 $hastoken = "No <a href=\"?action=recreatehotptoken&username=$username\">Create (HOTP)</a> <a href=\"?action=recreatetotptoken&username=$username\">Create (TOTP)</a>";
110                 if($user["otk"]!="deleted")$otk = "No Token Exists";
111         }
112         
113         $delete = "<a href=\"?action=delete&username=$username\">Delete</a>";
114         
115         echo "<tr>";
116         echo "<td><a href=\"?edituser=$username&realname=$realname\">$username</a></td><td>$realname</td><td>$haspass</td>";
117         echo "<td>$hastoken</td><td>$otk</td><td>$delete</td><tr></form>";
118 }
119 ?>
120 </table><br>
121 <form method="post" action="?action=createuser">Create User(s) - Enter a comma seperated list of usernames: <input type="text" name="username" size="120"> <input type="submit" value="Create"></form>
122
123 <?php
124
125
126 if(isset($_REQUEST["action"])) if($_REQUEST["action"] == "getotk") {
127         $username = $_REQUEST["username"];
128         $otk = $_REQUEST["otk"];
129         echo "<hr>Got One Time Key for user $username, this one-time-key can only be retrieved once, after that it is deleted<br>";
130         echo "<img src=\"?action=getotkimg&username=$username&otk=$otk\" alt=\"one time key error\"><br>";
131
132
133 ?>
134 <hr><h2>Radius Clients</h2>
135 Not yet implemented
136
137 <hr><a href="?action=logout">Logout</a> <a href="admin.php">Home</a>
138
139 <?php 
140 } // edit users
141
142 } else {
143         
144         
145         
146         
147         
148         
149         
150         
151         
152         
153         // Login page
154 ?>
155 <h1>GAAS Manager Login</h1>
156 <?php
157 if(isset($_REQUEST["message"])) {
158         echo "<font color=\"green\">".$_REQUEST["message"]."</font>";
159
160 if(isset($_REQUEST["error"])) {
161         echo "<font color=\"red\">".$_REQUEST["error"]."</font>";
162
163 ?>
164 <form method="post" action="?action=login">
165 <table>
166 <tr><td>Username</td><td><input type="text" name="username"></td></tr>
167 <tr><td>Password</td><td><input type="password" name="password"></td></tr>
168 <tr><td><input type="submit" value="Go"></td></tr>
169 </table>
170 </form>
171 <?php
172 } //loggedin
173 ?>