Browse Source

added devices generate_token route

develop
Alex Mikhalev 6 years ago
parent
commit
0aa587551f
  1. 24
      server/express/api/devices.ts

24
server/express/api/devices.ts

@ -1,3 +1,4 @@ @@ -1,3 +1,4 @@
import { Request } from "express";
import PromiseRouter from "express-promise-router";
import { serialize } from "serializr";
@ -5,6 +6,7 @@ import ApiError from "@common/ApiError"; @@ -5,6 +6,7 @@ import ApiError from "@common/ApiError";
import { ErrorCode } from "@common/ErrorCode";
import * as schema from "@common/sprinklersRpc/schema";
import { generateDeviceToken } from "@server/authentication";
import { SprinklersDevice } from "@server/entities";
import { verifyAuthorization } from "@server/express/verifyAuthorization";
import { ServerState } from "@server/state";
@ -30,7 +32,7 @@ function randomDeviceId(): string { @@ -30,7 +32,7 @@ function randomDeviceId(): string {
export function devices(state: ServerState) {
const router = PromiseRouter();
router.get("/:deviceId", verifyAuthorization(), async (req, res) => {
async function verifyUserDevice(req: Request): Promise<SprinklersDevice> {
const token = req.token!;
const userId = token.aud;
const deviceId = req.params.deviceId;
@ -44,12 +46,32 @@ export function devices(state: ServerState) { @@ -44,12 +46,32 @@ export function devices(state: ServerState) {
ErrorCode.NoPermission
);
}
return userDevice;
}
router.get("/:deviceId", verifyAuthorization(), async (req, res) => {
await verifyUserDevice(req);
const device = state.mqttClient.acquireDevice(req.params.deviceId);
const j = serialize(schema.sprinklersDevice, device);
res.send(j);
device.release();
});
router.post("/:deviceId/generate_token",
verifyAuthorization(), async (req, res) => {
const device = await verifyUserDevice(req);
if (!device.deviceId) {
throw new ApiError(
"A token cannot be granted for a device with no id",
ErrorCode.BadRequest,
)
}
const token = await generateDeviceToken(device.id, device.deviceId);
res.send({
token,
});
});
router.post(
"/register",
verifyAuthorization({

Loading…
Cancel
Save