Urgent alerts

Critical advisories and newly exploited CVEs that affect your devices, public notices from national security centres, and alerts you add yourself from a link.

MethodPathSummary
GET/api/alertsCritical advisories, newly exploited CVEs and people's own alerts, with where each device in scope stands: affected / possibly / patched / safe
GET/api/noticesPublic notices (lib/notices.js): everything NCSC / CERT-EU published about vulnerabilities, with the alert each one raised or joined
GET/api/alerts/:idGet an alert with affected devices
POST/api/alerts/lookupReads a pasted link (NCSC / vendor notice) for the "Track an alert" form: its title, summary, CVE IDs and the distro advisories that cover them
POST/api/alertsAdd an alert by hand
PUT/api/alerts/:idUpdate an alert
DELETE/api/alerts/:idDelete an alert
POST/api/alerts/:id/dismissArchive or restore an alert
POST/api/alerts/:id/recheckCheck devices against an alert again
POST/api/alerts/:id/containers/acceptA container image on one device: accept this alert's findings in it until a newer image is out ({ device_id, image_id, undo })

#Critical advisories, newly exploited CVEs and people's own alerts, with where each device in scope stands: affected / possibly / patched / safe

GET/api/alerts
Address
https://<your-org>.brambleit.cloud/warden/api/alerts
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Warden.

Response 200

FieldTypeDescription
alertsarray of any
feedsarray of any
Example response
JSON
{
  "alerts": [],
  "feeds": []
}

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/alerts', {
  method: 'GET',
  credentials: 'include',
});
const data = await res.json();

#Public notices (lib/notices.js): everything NCSC / CERT-EU published about vulnerabilities, with the alert each one raised or joined

GET/api/notices
Address
https://<your-org>.brambleit.cloud/warden/api/notices
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Warden.

Response 200

FieldTypeDescription
noticesarray of any
Example response
JSON
{
  "notices": []
}

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/notices', {
  method: 'GET',
  credentials: 'include',
});
const data = await res.json();

#Get an alert with affected devices

GET/api/alerts/:id
Address
https://<your-org>.brambleit.cloud/warden/api/alerts/:id
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Warden.

Path parameters

NameTypeDescription
idrequirednumber

Query parameters

NameTypeDescription
cvesstring

Response 200

Errors

StatusMessage
404Alert not found

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/alerts/12.5', {
  method: 'GET',
  credentials: 'include',
});
const data = await res.json();

#Reads a pasted link (NCSC / vendor notice) for the "Track an alert" form: its title, summary, CVE IDs and the distro advisories that cover them

POST/api/alerts/lookup
Address
https://<your-org>.brambleit.cloud/warden/api/alerts/lookup
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Warden.

Request body JSON

NameTypeDescription
urlstring

Response 200

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/alerts/lookup', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({"url":"https://example.com/…"}),
});
const data = await res.json();

#Add an alert by hand

POST/api/alerts
Address
https://<your-org>.brambleit.cloud/warden/api/alerts
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Warden.

Request body JSON

NameTypeDescription
forceany
titlestring

Response 201

Errors

StatusMessage
409Warden is already tracking this as "…"

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/alerts', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({"force":"…","title":"Example title"}),
});
const data = await res.json();

#Update an alert

PUT/api/alerts/:id
Address
https://<your-org>.brambleit.cloud/warden/api/alerts/:id
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Warden.

Path parameters

NameTypeDescription
idrequirednumber

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
404Only alerts added here can be edited

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/alerts/12.5', {
  method: 'PUT',
  credentials: 'include',
});
const data = await res.json();

#Delete an alert

DELETE/api/alerts/:id
Address
https://<your-org>.brambleit.cloud/warden/api/alerts/:id
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Warden.

Path parameters

NameTypeDescription
idrequirednumber

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
404Only alerts added here can be deleted

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/alerts/12.5', {
  method: 'DELETE',
  credentials: 'include',
});
const data = await res.json();

#Archive or restore an alert

POST/api/alerts/:id/dismiss
Address
https://<your-org>.brambleit.cloud/warden/api/alerts/:id/dismiss
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Warden.

Path parameters

NameTypeDescription
idrequirednumber

Request body JSON

NameTypeDescription
restoreany

Response 200

FieldTypeDescription
okboolean
Example response
JSON
{
  "ok": true
}

Errors

StatusMessage
404Alert not found

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/alerts/12.5/dismiss', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({"restore":"…"}),
});
const data = await res.json();

#Check devices against an alert again

POST/api/alerts/:id/recheck
Address
https://<your-org>.brambleit.cloud/warden/api/alerts/:id/recheck
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Warden.

Path parameters

NameTypeDescription
idrequirednumber

Response 202

Errors

StatusMessage
404Alert not found

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/alerts/12.5/recheck', {
  method: 'POST',
  credentials: 'include',
});
const data = await res.json();

#A container image on one device: accept this alert's findings in it until a newer image is out ({ device_id, image_id, undo })

POST/api/alerts/:id/containers/accept
Address
https://<your-org>.brambleit.cloud/warden/api/alerts/:id/containers/accept
Requires
Signed-in browser session (the sso_session / session_id cookies from Bramble sign-in).
Licence: Warden.

Path parameters

NameTypeDescription
idrequirednumber

Request body JSON

NameTypeDescription
device_idinteger
image_idinteger
undoany

Response 200

FieldTypeDescription
okboolean
findingsinteger
Example response
JSON
{
  "ok": true,
  "findings": 1
}

Errors

StatusMessage
404Alert not found

Example request

JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/alerts/12.5/containers/accept', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({"device_id":7,"image_id":7,"undo":"…"}),
});
const data = await res.json();