|
7 | 7 |
|
8 | 8 | const char* TAG = "Serial::CommandHandlers::LcgOverride"; |
9 | 9 |
|
10 | | -void _handleLcgOverrideCommand(std::string_view arg, bool isAutomated) { |
11 | | - if (arg.empty()) { |
12 | | - std::string lcgOverride; |
13 | | - if (!OpenShock::Config::GetBackendLCGOverride(lcgOverride)) { |
14 | | - SERPR_ERROR("Failed to get LCG override from config"); |
15 | | - return; |
16 | | - } |
17 | | - |
18 | | - // Get LCG override |
19 | | - SERPR_RESPONSE("LcgOverride|%s", lcgOverride.c_str()); |
| 10 | +void _handleLcgOverrideCommand(std::string_view arg, bool isAutomated) |
| 11 | +{ |
| 12 | + std::string lcgOverride; |
| 13 | + if (!OpenShock::Config::GetBackendLCGOverride(lcgOverride)) { |
| 14 | + SERPR_ERROR("Failed to get LCG override from config"); |
20 | 15 | return; |
21 | 16 | } |
22 | 17 |
|
23 | | - if (OpenShock::StringStartsWith(arg, "clear"sv)) { |
24 | | - if (arg.size() != 5) { |
25 | | - SERPR_ERROR("Invalid command (clear command should not have any arguments)"); |
26 | | - return; |
27 | | - } |
28 | | - |
29 | | - bool result = OpenShock::Config::SetBackendLCGOverride(std::string()); |
30 | | - if (result) { |
31 | | - SERPR_SUCCESS("Cleared LCG override"); |
32 | | - } else { |
33 | | - SERPR_ERROR("Failed to clear LCG override"); |
34 | | - } |
| 18 | + // Get LCG override |
| 19 | + SERPR_RESPONSE("LcgOverride|%s", lcgOverride.c_str()); |
| 20 | +} |
| 21 | + |
| 22 | +void _handleLcgOverrideClearCommand(std::string_view arg, bool isAutomated) |
| 23 | +{ |
| 24 | + if (arg.size() != 5) { |
| 25 | + SERPR_ERROR("Invalid command (clear command should not have any arguments)"); |
35 | 26 | return; |
36 | 27 | } |
37 | 28 |
|
38 | | - if (OpenShock::StringStartsWith(arg, "set "sv)) { |
39 | | - if (arg.size() <= 4) { |
40 | | - SERPR_ERROR("Invalid command (set command should have an argument)"); |
41 | | - return; |
42 | | - } |
43 | | - |
44 | | - std::string_view domain = arg.substr(4); |
45 | | - |
46 | | - if (domain.size() + 40 >= OPENSHOCK_URI_BUFFER_SIZE) { |
47 | | - SERPR_ERROR("Domain name too long, please try increasing the \"OPENSHOCK_URI_BUFFER_SIZE\" constant in source code"); |
48 | | - return; |
49 | | - } |
50 | | - |
51 | | - char uri[OPENSHOCK_URI_BUFFER_SIZE]; |
52 | | - sprintf(uri, "https://%.*s/1", static_cast<int>(domain.size()), domain.data()); |
53 | | - |
54 | | - auto resp = OpenShock::HTTP::GetJSON<OpenShock::Serialization::JsonAPI::LcgInstanceDetailsResponse>( |
55 | | - uri, |
56 | | - { |
57 | | - {"Accept", "application/json"} |
58 | | - }, |
59 | | - OpenShock::Serialization::JsonAPI::ParseLcgInstanceDetailsJsonResponse, |
60 | | - {200} |
61 | | - ); |
62 | | - |
63 | | - if (resp.result != OpenShock::HTTP::RequestResult::Success) { |
64 | | - SERPR_ERROR("Tried to connect to \"%.*s\", but failed with status [%d], refusing to save domain to config", domain.size(), domain.data(), resp.code); |
65 | | - return; |
66 | | - } |
67 | | - |
68 | | - OS_LOGI( |
69 | | - TAG, |
70 | | - "Successfully connected to \"%.*s\", name: %s, version: %s, current time: %s, country code: %s, FQDN: %s", |
71 | | - domain.size(), |
72 | | - domain.data(), |
73 | | - resp.data.name.c_str(), |
74 | | - resp.data.version.c_str(), |
75 | | - resp.data.currentTime.c_str(), |
76 | | - resp.data.countryCode.c_str(), |
77 | | - resp.data.fqdn.c_str() |
78 | | - ); |
79 | | - |
80 | | - bool result = OpenShock::Config::SetBackendLCGOverride(domain); |
81 | | - |
82 | | - if (result) { |
83 | | - SERPR_SUCCESS("Saved config"); |
84 | | - } else { |
85 | | - SERPR_ERROR("Failed to save config"); |
86 | | - } |
| 29 | + bool result = OpenShock::Config::SetBackendLCGOverride(std::string()); |
| 30 | + if (result) { |
| 31 | + SERPR_SUCCESS("Cleared LCG override"); |
| 32 | + } else { |
| 33 | + SERPR_ERROR("Failed to clear LCG override"); |
| 34 | + } |
| 35 | +} |
| 36 | + |
| 37 | +void _handleLcgOverrideSetCommand(std::string_view arg, bool isAutomated) |
| 38 | +{ |
| 39 | + if (arg.size() <= 4) { |
| 40 | + SERPR_ERROR("Invalid command (set command should have an argument)"); |
87 | 41 | return; |
88 | 42 | } |
89 | 43 |
|
90 | | - SERPR_ERROR("Invalid subcommand"); |
| 44 | + std::string_view domain = arg.substr(4); |
| 45 | + |
| 46 | + if (domain.size() + 40 >= OPENSHOCK_URI_BUFFER_SIZE) { |
| 47 | + SERPR_ERROR("Domain name too long, please try increasing the \"OPENSHOCK_URI_BUFFER_SIZE\" constant in source code"); |
| 48 | + return; |
| 49 | + } |
| 50 | + |
| 51 | + char uri[OPENSHOCK_URI_BUFFER_SIZE]; |
| 52 | + sprintf(uri, "https://%.*s/1", static_cast<int>(domain.size()), domain.data()); |
| 53 | + |
| 54 | + auto resp = OpenShock::HTTP::GetJSON<OpenShock::Serialization::JsonAPI::LcgInstanceDetailsResponse>( |
| 55 | + uri, |
| 56 | + { |
| 57 | + {"Accept", "application/json"} |
| 58 | + }, |
| 59 | + OpenShock::Serialization::JsonAPI::ParseLcgInstanceDetailsJsonResponse, |
| 60 | + {200} |
| 61 | + ); |
| 62 | + |
| 63 | + if (resp.result != OpenShock::HTTP::RequestResult::Success) { |
| 64 | + SERPR_ERROR("Tried to connect to \"%.*s\", but failed with status [%d], refusing to save domain to config", domain.size(), domain.data(), resp.code); |
| 65 | + return; |
| 66 | + } |
| 67 | + |
| 68 | + OS_LOGI( |
| 69 | + TAG, |
| 70 | + "Successfully connected to \"%.*s\", name: %s, version: %s, current time: %s, country code: %s, FQDN: %s", |
| 71 | + domain.size(), |
| 72 | + domain.data(), |
| 73 | + resp.data.name.c_str(), |
| 74 | + resp.data.version.c_str(), |
| 75 | + resp.data.currentTime.c_str(), |
| 76 | + resp.data.countryCode.c_str(), |
| 77 | + resp.data.fqdn.c_str() |
| 78 | + ); |
| 79 | + |
| 80 | + bool result = OpenShock::Config::SetBackendLCGOverride(domain); |
| 81 | + |
| 82 | + if (result) { |
| 83 | + SERPR_SUCCESS("Saved config"); |
| 84 | + } else { |
| 85 | + SERPR_ERROR("Failed to save config"); |
| 86 | + } |
91 | 87 | } |
92 | 88 |
|
93 | 89 | OpenShock::Serial::CommandGroup OpenShock::Serial::CommandHandlers::LcgOverrideHandler() { |
94 | 90 | auto group = OpenShock::Serial::CommandGroup("lcgoverride"sv); |
95 | 91 |
|
96 | 92 | auto& getCommand = group.addCommand("Get the domain overridden for LCG endpoint (if any)."sv, _handleLcgOverrideCommand); |
97 | 93 |
|
98 | | - auto& setCommand = group.addCommand("set"sv, "Set a domain to override the LCG endpoint."sv, _handleLcgOverrideCommand); |
| 94 | + auto& setCommand = group.addCommand("set"sv, "Set a domain to override the LCG endpoint."sv, _handleLcgOverrideSetCommand); |
99 | 95 | setCommand.addArgument("domain"sv, "must be a string"sv, "eu1-gateway.shocklink.net"sv); |
100 | 96 |
|
101 | | - auto& clearCommand = group.addCommand("clear"sv, "Clear the overridden LCG endpoint."sv, _handleLcgOverrideCommand); |
| 97 | + auto& clearCommand = group.addCommand("clear"sv, "Clear the overridden LCG endpoint."sv, _handleLcgOverrideClearCommand); |
102 | 98 |
|
103 | 99 | return group; |
104 | 100 | } |
0 commit comments