示例#1
0
    def test_len(self) -> None:
        self.assertEqual(len(get_tokens()), 3)

        for _ in range(10):
            add_token("admin", "asdf")

        self.assertEqual(len(get_tokens()), 13)
示例#2
0
    def test_all(self) -> None:
        add_token("server", "desc")

        for i in range(10):
            add_server("ip", i, "ssh-rsa data comment", 1)

        servers = get_servers()
        self.assertEqual(len(servers), 10)
示例#3
0
    def test_invalid_id(self) -> None:
        with self.assertRaises(TokenError):
            delete_token(0)

        add_token("admin", "desc")

        with self.assertRaises(TokenError):
            delete_token(0)
示例#4
0
    def test_strip_key(self) -> None:
        add_token("server", "desc")
        add_server("ip", 1234, "   ssh-rsa    data     comment    \n\n\n", 1)

        servers = get_servers()
        self.assertEqual(servers[0].key_type, "ssh-rsa")
        self.assertEqual(servers[0].key_data, "data")
        self.assertEqual(servers[0].key_comment, "comment")
示例#5
0
    def test_invalid_token(self) -> None:
        first = add_token("admin", "desc1")
        second = add_token("server", "desc2")
        add_token("none", "desc3")

        invalid = first[:int(len(first) / 2)] + second[int(len(second) / 2):]
        self.assertFalse(verify_token(invalid))
        self.assertEqual(g.get("token"), None)
示例#6
0
    def test_ip(self) -> None:
        add_token("server", "desc")
        add_server("ip1", 1111, "ssh-rsa data comment", 1)
        add_server("ip2", 2222, "ssh-ed25519 data comment", 1)

        servers = get_servers(ip="ip1")
        self.assertEqual(len(servers), 1)
        self.assertEqual(servers[0].ip, "ip1")
示例#7
0
    def test_sha256(self, mock: MagicMock) -> None:
        data = b"abcd"
        sha256sum = sha256(data)

        mock.return_value = data
        add_token("admin", "")

        tokens = Token.query.filter_by(token=sha256sum).all()
        self.assertEqual(len(tokens), 1)
示例#8
0
    def test_success(self) -> None:
        add_token("server", "desc")
        add_server("ip", 1234, "ssh-rsa data comment", 1)

        servers = get_servers()
        self.assertEqual(len(servers), 1)
        self.assertEqual(servers[0].ip, "ip")
        self.assertEqual(servers[0].port, 1234)
        self.assertEqual(servers[0].key_type, "ssh-rsa")
        self.assertEqual(servers[0].key_data, "data")
        self.assertEqual(servers[0].key_comment, "comment")
        self.assertEqual(servers[0].token_id, 1)
示例#9
0
    def test_invalid_id(self) -> None:
        with self.assertRaises(ServerError):
            delete_server(0)

        add_token("admin", "desc")
        add_server("10.0.0.1", 1234, "ssh-rsa data", 1)
        add_server("10.0.0.2", 4321, "ssh-rsa data", 1)

        with self.assertRaises(ServerError):
            delete_server(0)

        self.assertEqual(len(get_servers()), 2)
示例#10
0
    def test_success(self) -> None:
        add_token("admin", "desc0")

        add_server("10.0.0.1", 11, "ssh-rsa data", 1)
        add_server("10.0.0.2", 22, "ecdsa-sha2-nistp521 data", 1)
        add_server("10.0.0.3", 33, "ssh-ed25519 data", 1)
        self.assertEqual(len(get_servers()), 3)

        delete_server(2)

        servers = get_servers()
        self.assertEqual(len(servers), 2)
        self.assertEqual(servers[0].ip, "10.0.0.1")
        self.assertEqual(servers[1].ip, "10.0.0.3")
示例#11
0
    def test_no_filter(self) -> None:
        headers = {
            "Authorization": "Bearer {}".format(add_token("admin", "desc1")),
        }
        add_server(ip="1", port=1, public_key="ssh-rsa ...", token_id=1)
        add_server(ip="2", port=2, public_key="ssh-ed25519 ...", token_id=1)

        res = self.client.get("/api/v1/server", headers=headers)
        data = json.loads(res.data.decode("utf-8"))
        servers = data["servers"]

        self.assertEqual(len(servers), 2)

        self.assertEqual(servers[0]["id"], 1)
        self.assertEqual(servers[0]["ip"], "1")
        self.assertEqual(servers[0]["port"], 1)
        self.assertEqual(servers[0]["key_type"], "ssh-rsa")
        self.assertEqual(servers[0]["key_data"], "...")
        self.assertEqual(servers[0]["key_comment"], "")

        self.assertEqual(servers[1]["id"], 2)
        self.assertEqual(servers[1]["ip"], "2")
        self.assertEqual(servers[1]["port"], 2)
        self.assertEqual(servers[1]["key_type"], "ssh-ed25519")
        self.assertEqual(servers[1]["key_data"], "...")
        self.assertEqual(servers[1]["key_comment"], "")
示例#12
0
 def test_missing_public_key(self) -> None:
     headers = {
         "Authorization": "Bearer {}".format(add_token("server", "desc")),
     }
     res = self.client.post("/api/v1/server", headers=headers)
     obj = json.loads(res.data.decode("utf-8"))
     self.assertTrue("public_key" in obj["message"].keys())
     self.assertEqual(res.status_code, 400)
示例#13
0
 def test_unauthorized(self) -> None:
     headers = {
         "Authorization": "Bearer {}".format(add_token("server", "desc")),
     }
     res = self.client.post("/api/v1/token", headers=headers)
     data = json.loads(res.data.decode("utf-8"))
     self.assertEqual(data["message"], "Permission denied")
     self.assertEqual(res.status_code, 401)
示例#14
0
    def test_success(self) -> None:
        add_token("server", "desc")

        headers = {
            "Authorization": "Bearer {}".format(add_token("admin", "desc")),
        }

        data = {"id": 1}

        res = self.client.delete("/api/v1/token", headers=headers, data=data)
        data = json.loads(res.data.decode("utf-8"))
        self.assertEqual(data["message"], "deleted")
        self.assertEqual(res.status_code, 200)

        res = self.client.get("/api/v1/token", headers=headers)
        tokens = json.loads(res.data.decode("utf-8"))["tokens"]
        self.assertEqual(len(tokens), 1)
示例#15
0
 def test_missing_role(self) -> None:
     headers = {
         "Authorization": "Bearer {}".format(add_token("admin", "desc")),
     }
     res = self.client.post("/api/v1/token", headers=headers)
     data = json.loads(res.data.decode("utf-8"))
     self.assertIsInstance(data["message"]["role"], str)
     self.assertEqual(res.status_code, 400)
示例#16
0
    def test_missing_id(self) -> None:
        headers = {
            "Authorization": "Bearer {}".format(add_token("admin", "desc")),
        }

        res = self.client.delete("/api/v1/token", headers=headers)
        data = json.loads(res.data.decode("utf-8"))
        self.assertTrue("Missing required parameter" in data["message"]["id"])
        self.assertEqual(res.status_code, 400)
示例#17
0
    def test_invalid_id(self) -> None:
        headers = {
            "Authorization": "Bearer {}".format(add_token("admin", "desc")),
        }

        data = {"id": 2}

        res = self.client.delete("/api/v1/token", headers=headers, data=data)
        data = json.loads(res.data.decode("utf-8"))
        self.assertEqual(data["message"], "invalid token id 2")
        self.assertEqual(res.status_code, 400)
示例#18
0
    def test_invalid_role(self) -> None:
        headers = {
            "Authorization": "Bearer {}".format(add_token("admin", "desc")),
        }

        data = {"role": "x"}

        res = self.client.post("/api/v1/token", headers=headers, data=data)
        data = json.loads(res.data.decode("utf-8"))
        self.assertEqual(data["message"], "x is not a valid role")
        self.assertEqual(res.status_code, 400)
示例#19
0
    def test_success(self) -> None:
        headers = {
            "Authorization": "Bearer {}".format(add_token("admin", "desc")),
        }

        data = {"role": "server"}

        res = self.client.post("/api/v1/token", headers=headers, data=data)
        data = json.loads(res.data.decode("utf-8"))
        self.assertIsInstance(data.get("token"), str)
        self.assertEqual(res.status_code, 200)
示例#20
0
    def test_wildcard(self) -> None:
        add_token("admin", "desc1")
        add_token("server", "desc2")
        add_token("none", "desc3")

        self.assertFalse(verify_token("*"))
        self.assertEqual(g.get("token"), None)
示例#21
0
    def test_invalid_public_key(self) -> None:
        headers = {
            "Authorization": "Bearer {}".format(add_token("server", "desc")),
        }

        data = {
            "public_key": "",
        }

        res = self.client.post("/api/v1/server", headers=headers, data=data)
        obj = json.loads(res.data.decode("utf-8"))
        self.assertEqual(obj["message"], "invalid public key")
        self.assertEqual(res.status_code, 400)
示例#22
0
    def test_success(self) -> None:
        add_token("server", "desc")

        headers = {
            "Authorization": "Bearer {}".format(add_token("admin", "desc")),
        }

        data = {
            "id": 1,
        }

        add_server("10.0.0.1", 11, "ssh-rsa data", 1)
        add_server("10.0.0.2", 22, "ssh-rsa data", 1)
        add_server("10.0.0.2", 33, "ssh-rsa data", 1)

        res = self.client.delete("/api/v1/server", headers=headers, data=data)
        data = json.loads(res.data.decode("utf-8"))
        self.assertEqual(data["message"], "deleted")
        self.assertEqual(res.status_code, 200)

        res = self.client.get("/api/v1/server", headers=headers)
        servers = json.loads(res.data.decode("utf-8"))["servers"]
        self.assertEqual(len(servers), 2)
示例#23
0
    def setUp(self) -> None:
        super().setUp()

        self.admin0 = add_token("admin", "admin1 desc")
        self.admin1 = add_token("admin", "admin1 desc")
        self.server0 = add_token("server", "server1 desc")
        self.server1 = add_token("server", "server2 desc")
        self.none0 = add_token("none", "none1 desc")
        self.none1 = add_token("none", "none2 desc")
示例#24
0
    def test_unauthorized_server(self) -> None:
        headers = {
            "Authorization": "Bearer {}".format(add_token("server", "desc")),
        }

        data = {
            "id": 1,
        }

        add_server("10.0.0.1", 11, "ssh-rsa data", 1)

        res = self.client.delete("/api/v1/server", headers=headers, data=data)
        data = json.loads(res.data.decode("utf-8"))
        self.assertEqual(data["message"], "Permission denied")
        self.assertEqual(res.status_code, 401)
示例#25
0
    def test_success(self) -> None:
        headers = {
            "Authorization": "Bearer {}".format(add_token("admin", "desc1")),
        }
        add_token("server", "desc2")
        add_token("admin", "desc3")

        res = self.client.get("/api/v1/token", headers=headers)
        data = json.loads(res.data.decode("utf-8"))
        tokens = data["tokens"]

        self.assertEqual(len(tokens), 3)

        self.assertEqual(tokens[0]["id"], 1)
        self.assertEqual(tokens[0]["role"], "admin")
        self.assertEqual(tokens[0]["description"], "desc1")

        self.assertEqual(tokens[1]["id"], 2)
        self.assertEqual(tokens[1]["role"], "server")
        self.assertEqual(tokens[1]["description"], "desc2")

        self.assertEqual(tokens[2]["id"], 3)
        self.assertEqual(tokens[2]["role"], "admin")
        self.assertEqual(tokens[2]["description"], "desc3")
示例#26
0
    def test_success(self) -> None:
        add_token("admin", "desc0")
        add_token("server", "desc1")
        add_token("none", "desc2")

        delete_token(2)

        tokens = get_tokens()
        self.assertEqual(len(tokens), 2)
        self.assertEqual(tokens[0].role, "admin")
        self.assertEqual(tokens[1].role, "none")
示例#27
0
    def test_success_admin(self) -> None:
        headers = {
            "Authorization": "Bearer {}".format(add_token("admin", "desc")),
        }

        data = {
            "public_key": "ecdsa-sha2-nistp384 data1234 comment321",
        }

        res = self.client.post("/api/v1/server", headers=headers, data=data)
        obj = json.loads(res.data.decode("utf-8"))
        self.assertEqual(obj["message"], "added")
        self.assertEqual(res.status_code, 200)

        servers = get_servers()
        self.assertEqual(len(servers), 1)
        self.assertEqual(servers[0].key_type, "ecdsa-sha2-nistp384")
        self.assertEqual(servers[0].key_data, "data1234")
        self.assertEqual(servers[0].key_comment, "comment321")
示例#28
0
 def test_invalid_role(self) -> None:
     with self.assertRaises(TokenError):
         add_token("abcd", "")
示例#29
0
    def test_success_none(self) -> None:
        add_token("admin", "admin1 desc")
        add_token("admin", "admin2 desc")
        add_token("server", "server1 desc")
        add_token("server", "server2 desc")
        token = add_token("none", "none1 desc")
        add_token("none", "none2 desc")

        self.assertTrue(verify_token(token))
        self.assertEqual(g.token.id, 5)
        self.assertEqual(g.token.role, "none")
        self.assertEqual(g.token.description, "none1 desc")
示例#30
0
    def setUp(self) -> None:
        super().setUp()

        self.first = add_token("admin", "desc1")
        self.second = add_token("server", "desc2")
        self.third = add_token("none", "desc3")