Project Showcase: Panda

Project Overview

This project showcase is about Panda, which is a custom built admin panel that uses a REST API backend with a material design frontend. The goal is to allow users to perform system administration tasks from a web interface, rather than having to SSH in.

Background

I recently built a personal server for my home network. It runs Ubuntu 14.04, with Apache, Calibre, Plex, and Time Machine services. I have a RAID1 4tb array on it, and I use it as my main dev box whenever I need to code on linux, or leave a job running for a long time.

After configuring the server, I noticed that I often had to SSH into it just to check simple things such as disk usage and raid status, or to launch services such as Plex and calibre. This isn't a problem when I'm on my laptop or desktop, but when I'm on my phone or tablet SSH gets annoying. I decided to build a clean web interface that would allow me to perform various tasks without having to log in.

Implementation

I'm a big fan of Material Design, so I decided to make a minimalist front end. I used JQuery ajax() to interface with the REST back end. I spent a long time deciding on which API engine to use, but ultimately chose Restler, because it is written in PHP. This allows for a very easy installation - I can drop in the files on any PHP compatible web server and the service is deployed. I might rewrite the backend in Flask or Django some day, but it works for now.

The Restler classes simply call various shell functions and return the stdout as a json string, which is decoded by the AJAX call on the frontend and displayed to the user.

Current Status

This is one of those long running side projects that are eternally updated. A snapshot of my code can be found on my github, but this is not something I would call production ready. Right now there is scarce documentation, security is non existent, and all of the commands are hard coded in. If I decide to release this as a tool for the general public, it will need to be rewritten to support a nice config file and have a solid README, and have a ironclad authentication policy.

Feature Roadmap

  • I have not enabled any security whatsoever, namely because I am the sole user on my home network, and all of the tasks are queries or hard coded shell commands. If I ever expose this service, I will need to come up with a good authentication mechanism. HTaccess seems like a good start, but if need be I can also build an auth module through the REST api.

  • I plan to keep adding more cards for various tasks. I'm thinking about adding one for synchronizing to a remote backup, and perhaps another one for initiating a system archive of the root filesystem.

  • With time, I may decide to make an Android App companion that will call the API directly. Seeing as I made the site mobile friendly this isn't a top priority, but it would be a fun exercise. For now, I have simply written a companion Android Wear App, the source for which can be found here.

Screenshots

Landing Page:

Landing Page

Raid Status Output:
Raid Status

Calibre Libraries:
Calibre Libraries