Lightweight node app to use in place of plex to self host your video and movie collections. Running on just under 50MB of ram this is ideal for people looking to host videos on minimal hardware.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

201 lines
8.1 KiB

<script>
function editHostForm(id, username, apiKey)
{
$("#editUserBox").css("display", "");
$("#useridLabel").val(id);
$("#usernameLabel").val(username);
$("#revokeAPIUsername").val(username);
$("#apiDisplay").html(apiKey);
}
</script>
<div id="editUserBox" class="row" style="display:none">
<!-- Edit User -->
<div class="col-md-6 col-12">
<div class="card">
<div class="card-header">
<h3 class="text-center">Edit User</h3>
</div>
<div class="card-body">
<form action="/user/edituser" method ="post" class="p-2">
<div class="form-group">
<input class="form-control" id="useridLabel" type="text" name="id" required>
<label>User ID</label>
</div>
<div class="form-group">
<input class="form-control" id="usernameLabel" type="text" name="username" required>
<label>User Name</label>
</div>
<div class="form-group">
<input class="form-control" type="password" name="password" required>
<label>Password</label>
</div>
<div class="form-group">
<input class="form-control w-100" type="checkbox" name="admin">
<label>Admin</label>
</div>
<div class="text-center">
<input type="submit" name="add_user" value="Update User"
class="btn btn-lg btn-secondary"/>
</div>
</form>
</div>
</div>
<br>
</div>
<!-- Edit API -->
<div class="col-md-6 col-12">
<div class="card">
<div class="card-header">
<h3 class="text-center">API Settings</h3>
</div>
<div class="card-body">
<h4>Current API Key</h4>
<p id="apiDisplay"></p>
<form action="/user/revokeAPI" method ="post" class="p-2">
<input class="form-control" id="revokeAPIUsername" type="text" name="username" value="" hidden>
<div class="text-center">
<input type="submit" name="revoke_api" value="Generate New API Key"
class="btn btn-lg btn-secondary"/>
</div>
</form>
</div>
</div>
<br>
</div>
</div>
{if admin}
<div class="row">
<!-- Current Users -->
<div class="col-md-8">
<div class='card'>
<div class="card-header">
<h3 class="text-center">Users</h3>
</div>
<div class="card-body">
<table class="table table-striped">
<thead class="thead-dark">
<tr>
<td>User Name</td>
<td>User ID</td>
<td>Admin</td>
<td>Edit</td>
<td>Terminate</td>
</tr>
</thead>
<tbody>
{for user in users}
<tr>
<td>{user.username}</td>
<td>{user.id}</td>
<td>{user.admin}</td>
<td>
<button onclick="editHostForm({user.id}, '{user.username}', '{user.api}')" class="btn btn-secondary">Edit User</button>
</td>
<td>
<form action="/user/removeuser" method ="post" >
<input type="submit" name="submit" value="Delete" class="btn btn-secondary"/>
<input type='hidden' name='id' value='{user.id}' />
</form>
</td>
</tr>
{/for}
</tbody>
</table>
</div>
</div>
</div>
<!-- Add User -->
<div class="col-md-4">
<div class="card">
<div class="card-header">
<h3 class="text-center">Add New User</h3>
</div>
<div class="card-body">
<form action="/user/addUser" method ="post" class="p-2">
<div class="form-group">
<label> User Name
<input class="form-control w-100" type="text" name="username" required>
</label>
</div>
<div class="form-group">
<label>Password
<input class="form-control w-100" type="password" name="password" required>
</label>
</div>
<div class="form-group">
<label>Admin
<input class="form-control w-100" type="checkbox" name="admin">
</label>
</div>
<div class="text-center">
<input type="submit" name="add_user" value="Create User"
class="btn btn-lg btn-secondary"/>
</div>
</form>
</div>
</div>
<br>
</div>
</div>
{else}
{if loggedIn}
<div class="row">
<div class="col-md-6 col-12">
<div class="card">
<div class="card-header">
<h3 class="text-center">Update Profile</h3>
</div>
<div class="card-body">
<form action="/user/updateUser" method ="post" class="p-2">
<div class="form-group">
<input class="form-control" id="usernameLabel" type="text" name="username" value="{username}" required>
<label>User Name</label>
</div>
<div class="form-group">
<input class="form-control" type="password" name="password" required>
<label>Password</label>
</div>
<div class="text-center">
<input type="submit" name="Update Profile" value="Update User"
class="btn btn-lg btn-secondary"/>
</div>
</form>
</div>
</div>
<br>
</div>
<div class="col-md-6 col-12">
<div class="card">
<div class="card-header">
<h3 class="text-center">API Settings</h3>
</div>
<div class="card-body">
<h4>Current API Key</h4>
<p>{apiKey}</p>
<form action="/user/revokeAPI" method ="post" class="p-2">
<div class="text-center">
<input type="submit" name="revoke_api" value="Generate New API Key"
class="btn btn-lg btn-secondary"/>
</div>
</form>
</div>
</div>
<br>
</div>
</div>
{else}
<h1 class="align-content-center">Login Required</h1>
<div class="align-content-center">
<img src="/includes/img/404.jpg" alt="Page not found" width="70%" />
</div>
{/if}
{/if}