• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

suculent / thinx-device-api / #252646768

01 Nov 2025 03:31PM UTC coverage: 46.298% (-25.7%) from 71.971%
#252646768

push

suculent
testing upgraded mqtt package

1123 of 3470 branches covered (32.36%)

Branch coverage included in aggregate %.

5324 of 10455 relevant lines covered (50.92%)

4.07 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

16.95
/lib/router.source.js
1
// /api/v2/source
2

3

4
const Sources = require("../lib/thinx/sources"); var sources = new Sources();
1✔
5
const Sanitka = require("./thinx/sanitka"); var sanitka = new Sanitka();
1✔
6
const Util = require("./thinx/util");
1✔
7

8
function getSourcesList(req, res) {
9
  if (!Util.validateSession(req)) return res.status(401).end();
×
10
  let owner = sanitka.owner(req.session.owner);
×
11
  if (typeof (owner) === "undefined") return res.status(401);
×
12
  sources.list(req.session.owner, (success, response) => {
×
13
    if (success !== true) return Util.respond(res, response);
×
14
    Util.responder(res, true, response);
×
15
  });
16
}
17

18
function addSource(req, res) {
19
  if (!Util.validateSession(req)) return res.status(401).end();
×
20
  var branch = "origin/master";
×
21
  var is_private = false;
×
22
  if (typeof (req.body.alias) === "undefined") return Util.responder(res, false, "missing_source_alias");
×
23
  if (typeof (req.body.url) === "undefined") return Util.responder(res, false, "missing_source_url");
×
24
  if ((typeof (req.body.branch) !== "undefined") && (req.body.branch !== null)) branch = req.body.branch;
×
25
  if (typeof (req.body.is_private) !== "undefined") is_private = req.body.is_private;
×
26
  sources.add({
×
27
    owner: req.session.owner,
28
    alias: req.body.alias,
29
    url: sanitka.url(req.body.url),
30
    branch: sanitka.branch(branch),
31
    circle_key: req.body.circleToken,
32
    secret: req.body.secret,
33
    is_private: is_private
34
  },
35
  (_success, response) => {
36
    Util.respond(res, response);
×
37
  });
38
}
39

40
function deleteSource(req, res) {
41
  if (!Util.validateSession(req)) return res.status(401).end();
×
42
  let owner = sanitka.owner(req.session.owner);
×
43
  if (typeof (req.body.source_ids) === "undefined") return Util.responder(res, false, "missing_source_ids");
×
44
  var source_ids = req.body.source_ids;
×
45
  sources.remove(owner, source_ids, (success, message) => {
×
46
    Util.respond(res, message);
×
47
  });
48
}
49

50
module.exports = function (app) {
1✔
51

52
  ///////////////////////////////////////////////////////////////////////
53
  // API ROUTES v2
54
  //
55

56
  app.get("/api/v2/source", function (req, res) {
2✔
57
    getSourcesList(req, res);
×
58
  });
59

60
  app.put("/api/v2/source", function (req, res) {
2✔
61
    addSource(req, res);
×
62
  });
63

64
  app.delete("/api/v2/source", function (req, res) {
2✔
65
    deleteSource(req, res);
×
66
  });
67
    
68
  ///////////////////////////////////////////////////////////////////////
69
  // API ROUTES v1
70
  //
71

72
  /* List available sources */
73
  app.get("/api/user/sources/list", function (req, res) {
2✔
74
    getSourcesList(req, res);
×
75
  });
76

77
  /* Adds a GIT repository. Expects URL, alias and a optional branch (origin/master is default). */
78
  app.post("/api/user/source", function (req, res) {
2✔
79
    addSource(req, res);
×
80
  });
81

82
  /* Removes a GIT repository. Expects alias. */
83
  app.post("/api/user/source/revoke", function (req, res) {
2✔
84
    deleteSource(req, res);
×
85
  });
86
};
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc