Files
Stella/Sources/stella/Controllers/OpenApiController.swift
Andrew Glaze a93308afb1 impl heartbeat
2025-05-16 13:01:08 -04:00

44 lines
1.6 KiB
Swift

import Vapor
import JWT
struct OpenApiController: RouteCollection {
func boot(routes: any RoutesBuilder) throws {
let group = routes.grouped("openapi", "service")
try group.register(collection: UtilController())
try group.register(collection: AuthController())
group.post("v3", "log", "writeSdkBasicLog") { req in
req.logger.log(level: .debug, .init(stringLiteral: req.body.string ?? ""))
return Response()
}
group.post("v3", "player", "heartbeat") { req in
let beat = try req.content.decode(Heartbeat.self, as: .json)
guard let zatToken = req.headers["zat"].first else {
throw Abort(.badRequest, reason: "Missing zat header.")
}
let jwt = try await req.jwt.verify(zatToken, as: SessionPayload.self)
guard jwt.accountId.value == beat.playerId else {
throw Abort(.unauthorized, reason: "zat invalid")
}
return "{}"
}
group.post("v3", "push", "token", "register") { req in
let beat = try req.content.decode(Heartbeat.self, as: .json)
guard let zatToken = req.headers["zat"].first else {
throw Abort(.badRequest, reason: "Missing zat header.")
}
let jwt = try await req.jwt.verify(zatToken, as: SessionPayload.self)
guard jwt.accountId.value == beat.playerId else {
throw Abort(.unauthorized, reason: "zat invalid")
}
return "{}"
}
}
}
struct Heartbeat: Content {
let playerId: String
}