Newer
Older
#include <vereign/service/identity_service.hh>
#include <vereign/client_library/common_types.pb.h>
#include <vereign/client_library/identity_types.pb.h>
#include <vereign/client_library/types.gen.pb.h>
#include <vereign/service/gen/passport_service.hh>
#include <vereign/restapi/client_session.hh>
#include <vereign/identity/provider.hh>
#include <vereign/test/device.hh>
#include <vereign/test/service_context.hh>
#include <vereign/core/temp.hh>
#include <util/env.hh>
#include <util/protobuf.hh>
#include <catch2/catch.hpp>
using namespace vereign;
TEST_CASE("service::IdentityService::LoginWithNewDevice", "[vereign/service][.integration]") {
auto public_key = test::RequireEnv("TEST_VEREIGN_PUB_KEY");
auto host = test::RequireEnv("TEST_VEREIGN_API_HOST");
auto port = test::GetEnv("TEST_VEREIGN_API_PORT", "https");
// the old device is used later for new device confirmation and authorization
auto old_storage_path = core::TempFilePath("test_db_");
auto rm_old_storage_path = core::RemoveFileGuard{old_storage_path};
auto old_device_ctx = test::ServiceContext{host, port, old_storage_path};
auto old_device = test::Device{old_device_ctx};
old_device.Login(public_key);
auto storage_path = core::TempFilePath("test_db_");
auto rm_storage_path = core::RemoveFileGuard{storage_path};
auto service_context = test::ServiceContext{host, port, storage_path};
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
auto service = service::IdentityService{
service_context.IdentityProvider(),
service_context.ClientSession()
};
// register new device
auto req = std::make_unique<vereign::client_library::LoginFormNewDevice>();
auto resp = std::make_unique<vereign::client_library::LoginFormNewDeviceResponse>();
req->set_pin("foo");
service.LoginWithNewDevice(req.get(), resp.get());
CHECK(resp->error() == "");
CHECK(resp->status() == "OK");
REQUIRE(resp->code() == "200");
REQUIRE(resp->has_data() == true);
// confirm and authorize the new device using an old device
old_device.ConfirmNewDevice(resp->data().qrcode(), resp->data().actionid());
old_device.AuthorizeDevice(service_context.IdentityProvider().GetDeviceHash());
// list passports with the new device
auto list_req = std::make_unique<vereign::client_library::ListPassportsForm>();
auto list_resp = std::make_unique<vereign::client_library::ListPassportsFormResponse>();
auto passport_service = service::gen::PassportService{service_context.ClientSession()};
auto list_result = passport_service.ListPassports(list_req.get(), list_resp.get());
auto result = list_result.get();
// std::cout << vereign::test::ProtobufToJson(*result.Response) << std::endl;
auto& list = result.Response;
CHECK(list->error() == "");
CHECK(list->status() == "OK");
REQUIRE(list->code() == "200");
CHECK(list->data().size() > 0);
for (const auto& passport : list->data()) {
CHECK(passport.uuid().size() == 36);
}
}
TEST_CASE("service::IdentityService::LoginWithPreviouslyAddedDevice", "[vereign/service][.integration]") {
auto public_key = test::RequireEnv("TEST_VEREIGN_PUB_KEY");
auto host = test::RequireEnv("TEST_VEREIGN_API_HOST");
auto port = test::GetEnv("TEST_VEREIGN_API_PORT", "https");
auto storage_path = core::TempFilePath("test_db_");
auto rm_storage_path = core::RemoveFileGuard{storage_path};
// prepare new device
auto old_storage_path = core::TempFilePath("test_db_");
auto rm_old_storage_path = core::RemoveFileGuard{old_storage_path};
auto old_device_ctx = test::ServiceContext{host, port, old_storage_path};
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
auto old_device = test::Device{old_device_ctx};
old_device.Login(public_key);
auto old_service_context = test::ServiceContext{host, port, storage_path};
old_device.CreateNewDevice(old_service_context, "pin");
auto service_context = test::ServiceContext{host, port, storage_path};
auto service = service::IdentityService{
service_context.IdentityProvider(),
service_context.ClientSession()
};
auto req = std::make_unique<vereign::client_library::LoginFormPreviousAddedDevice>();
req->set_pin("pin");
auto resp = std::make_unique<vereign::client_library::EmptyResponse>();
service.LoginWithPreviouslyAddedDevice(req.get(), resp.get());
CHECK(resp->error() == "");
CHECK(resp->status() == "OK");
REQUIRE(resp->code() == "200");
// list passports with the logged device
auto list_req = std::make_unique<vereign::client_library::ListPassportsForm>();
auto list_resp = std::make_unique<vereign::client_library::ListPassportsFormResponse>();
auto passport_service = service::gen::PassportService{service_context.ClientSession()};
auto list_result = passport_service.ListPassports(list_req.get(), list_resp.get());
auto result = list_result.get();
// std::cout << vereign::test::ProtobufToJson(*result.Response) << std::endl;
auto& list = result.Response;
CHECK(list->error() == "");
CHECK(list->status() == "OK");
REQUIRE(list->code() == "200");
CHECK(list->data().size() > 0);
for (const auto& passport : list->data()) {
CHECK(passport.uuid().size() == 36);
}
}