-
Notifications
You must be signed in to change notification settings - Fork 2
REST Machine API (Deprecated)
The intent of the Makerspace application is to restrict access to machinery by requiring users to tap their ID cards on attached card readers that will use the Makerspace application to determine authorization. For this purpose, the application contains a REST API for the card readers to communicate with.
Caution
This page defines the old, REST API for machine communications. The new system uses websockets for bidirectional, low latency communications and is not documented yet (for shame)
Certain REST endpoints involve checking an API Key. The required key is set in the server's environment variables. See Environment Variables > API_KEY. The card readers will store this same key and send it for comparison during certain mutative API calls.
Users are required to "check-in" to a zone before using any equipment in that zone.
This endpoint:
- Ensures the provided user exists in the
Users
table - Adds an entry to the
RoomSwipes
table to confirm check-in.
JSON body:
{
"Type": "Welcome",
"Zone": "4,7,8",
"ID": "an_id",
"Key": "super_secret"
}
Zone
: The room IDs of the zone a user is signing into.
ID
: The University ID (or encrypted card tag) of the scanned ID card
- HTTP 403 on key mismatch
- HTTP 406 if user is not in system
- HTTP 202 if user is in system
Users must complete all trainings listed for an equipment and have a staff0given access check to be able to activate a machine.
This endpoint:
- Ensures a user exists in the system
- Ensures an equipment exists in the system
- Ensures a user has done a welcome check-in to the zone (if needed)
- Ensures a user has completed all trainings needed for the equipment
- Ensures a user has an approved access check for the equipment
Header params:
https://app.address/api/auth?id=an_id&needswelcome=1&zone=7,6,5&type=6
id
: The University ID (or encrypted card tag) of the scanned ID card
needswelcome
: if 1
, the check will fail if the user has not checked into a noted zone
zone
: the room ids (comma-separated) of the zone the machine belongs to. This will be considered if needswelcome
= 1
.
type
: the equipment ID
- HTTP 400 if missing parameters
- HTTP 406 if user or equipment is not in system
- HTTP 401 if
- user requires welcome check-in but has not done so
- user has not completed all trainings associated with equipment
- user is missing an approved Access Check
- HTTP 202 if all criteria is met (or user is staff)
and
JSON body:
{
"Type": "Authorization",
"Machine": 6,
"UID": "an_id",
"Allowed": 1
}
Machine
: the equipment ID of the machine
UID
: The University ID (or card tag) of the scanned ID card
Allowed
: 1 if all criteria met, 0 otherwise
Card Reader Devices are capable of reporting their operating status for display on the website.
This endpoint:
- Updates the status variables for the specified card reader device
JSON body:
{
"Type": "Status",
"Machine": "186bx1",
"MachineType": "6",
"Zone": "7",
"Temp": "28.000",
"State": "Lockout",
"UID": "N/A",
"Time": "9",
"Source": "Startup",
"Frequency": "30",
"Key": "super_secret"
}
Machine
: the reader name of the machine
MachineType
: the equipment ID of the machine
Zone
: the room ID(s) (comma-separated) the machine belongs to
State
: The activity state of the machine
UID
: The University ID (or card tag) of the scanned ID card, or "N/A" if not active
Time
: The length of the most recent (or current) session in seconds
Source
: The reason for the status update
Frequency
: The number of seconds between scheduled status updates
- HTTP 403 on key mismatch
- HTTP 400 if card reader is not in system and can not be created
- HTTP 200 on success
Users can press a button on the card reader to request a staff member to their location.
This endpoint:
- Toggles the help alert for this reader on the Access Devices webpage.
JSON body:
{
"Type": "Help",
"Zone": "4,7,8",
"Machine": "kmxmill",
"Key": "super_secret"
}
Zone
: The room IDs of the machine
Machine
: The reader name of the machine
- HTTP 403 on key mismatch
- HTTP 400 if reader is not in system
- HTTP 200 if success
This endpoint:
- Creates an Audit Log with a specified message
Header params:
https://app.address/api/message/machine_id?message=Hello World!
machine_id
: the reader name of the machine
message
: the message to post
- HTTP 400 on missing parameter
- HTTP 200 on success
This endpoint:
- Returns 200
- HTTP 200
This endpoint:
- Returns the last known state of a machine
URL Path:
https://app.address/api/state/machine_id
machine_id
: The name of the reader
- HTTP 400 if user is not in system
- HTTP 200 on success and JSON body:
{
"Type": "State",
"MachineID": "kmxmill"
"State": "Lockout"
}
MachineID
: The reader name of the machine
State
: The state of the machine according to the database
This endpoint:
- Returns the admin-defined hours of a noted zone
URL Path:
https://app.address/api/hours/zone_id
zone_id
: The ID number of the zone
- HTTP 200 JSON body:
{
"text": "Sunday OPEN: 12:00:00\nSunday CLOSE: 17:00:00\nMonday OPEN: 10:00:00 ...",
"obj": [
{
"id": 104,
"type": "OPEN",
"dayOfTheWeek": 1,
"time": "12:00:00",
"zoneID": 1
},
...
]
}
This endpoint:
- Returns a list of inventory items based on defined Type.
JSON body:
{
"Type": "internal",
"Key": "inv_super_secret"
}
Type
: public / internal / staff / all. Any value other than public requires the Key
.
- HTTP 200 JSON body:
{
"count": 107,
"type": "all",
"items": [
{
"id": 239,
"image": null,
"name": "BigRep Master Spool PLA Black",
"unit": "spool",
"pluralUnit": "spools",
"count": 4,
"pricePerUnit": 100,
"threshold": 0,
"staffOnly": null,
"storefrontVisible": null,
"notes": null,
"tagID1": 5,
"tagID2": null,
"tagID3": null
},
...
]
}
This endpoint:
- Returns the number currently in the inventory for a specified item
URL Path
https://app.address/api/inv/item_id
item_id
: the id of the item to fetch
- HTTP 200 JSON body:
{
"count": 107
}
This endpoint:
- Increments the count of a defined item by the number provided and returns the new count.
URL Path
https://app.address/api/inv/add/item_id
item_id
: the id of the item to modify
JSON body:
{
"Key": "super_secret_inv",
"Inc": 2,
"UID": "aa11bb22cc33dd"
}
Inc
: Number to increment the count by. Can be negative.
UID
: Optional. If set, will attribute any actions to the noted user.
- HTTP 200 JSON body:
{
"count": 3,
}
This endpoint:
- Sets the count of a defined item to the number provided and returns the new count.
URL Path
https://app.address/api/inv/set/item_id
item_id
: the id of the item to modify
JSON body:
{
"Key": "super_secret_inv",
"Count": 2,
"UID": "aa11bb22cc33dd"
}
Inc
: Number to set the count to. Cannot be negative.
UID
: Optional. If set, will attribute any actions to the noted user.
- HTTP 200 JSON body:
{
"count": 3,
}