Project:Tool Access Control/ACNet

From London Hackspace Wiki

Summary

This page aims to scope out the different projects that work together as part of the Access Control Network. The main components are:

  • ACNode - The clients that sit on the tool that is being controlled and manage physical access by reading the rfid card.
  • ACServer - The server stores the authentication information and pulls membership information from Turing over JSON and stores is at a SQLite DB
  • Membership DB - Secured storage of membership data.

TODO

  • Add a secondary acnode and test multiple acnode functionality (Sol)
  • Figure out a strategy of syncing the membership database to the local access database, as currently manual (mentar)
    • Optimise the sync so it takes less time and add it to the cron job to every few minutes
  • Move the acserver to a separate VM running on the server downstairs (tgreer + mentar)
  • Add a way of adding cached tool useage using POST /[nodeID]/cachedtooluse/[cardID]/[timeUsed]/[timestamp] (mentar + sol)
  • Code a basic web ui for adding tools/maintainers/nodes (mentar)

System diagram

<graphviz border='frame' format='png' >

digraph rfboard{
  rankdir=TD;
  size="10,5!";
  
  subgraph cluster_0 {

node [shape=box,style=filled,color=lightgrey]; label = "ACServer";

       local_db [label="local db",shape=box];
       httpserver [label="HTTP server",shape=box];
       httpserver -> local_db;
       local_db -> httpserver; 
  }
  acnode1 [label="ACNode",shape=box];
  acnode2 [label="ACNode",shape=box];
  acnode3 [label="ACNode",shape=box];
 
  membershipdb [label="Membership DB",shape=box];


  acnode1 -> httpserver;
  acnode2 -> httpserver;
  acnode3 -> httpserver;
  httpserver -> acnode1;
  httpserver -> acnode2;
  httpserver -> acnode3;
  membershipdb-> httpserver;

} </graphviz>

AC Node

Currently proposed (and built) by Solexious Link

AC Server

2 versions Python Flask implementation started by ms7821 can be located here further improved by asoko

PHP Code Igniter implementation developed by mentar and Oskar located here

Usage: curl http://[server]:[port]/[node_id]/card/[card_id]

For testing it's installed on babbage port 1234

Membership DB

Running on Turing VM slice (hosted outside the space as it has personal data). Accessed in JSON format.