Repository: incubator-milagro-mfa-sdk-core Updated Branches: refs/heads/master 3b39c9ef6 -> 807c2938c
Add support for getting service definitions from the MFA platform Added GetServiceDetails function to MPinSDK. Closes: MAASMOB-431 Project: http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/commit/12ab2bd3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/tree/12ab2bd3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/diff/12ab2bd3 Branch: refs/heads/master Commit: 12ab2bd345cc29b52f62fd3a51c72a337f0f527b Parents: 3b39c9e Author: Slav Klenov <[email protected]> Authored: Tue Dec 6 11:59:03 2016 +0200 Committer: Slav Klenov <[email protected]> Committed: Tue Dec 6 11:59:03 2016 +0200 ---------------------------------------------------------------------- src/mpin_sdk.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/mpin_sdk.h | 14 ++++++++++++++ 2 files changed, 50 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/12ab2bd3/src/mpin_sdk.cpp ---------------------------------------------------------------------- diff --git a/src/mpin_sdk.cpp b/src/mpin_sdk.cpp index cf37779..d55ddae 100644 --- a/src/mpin_sdk.cpp +++ b/src/mpin_sdk.cpp @@ -371,6 +371,11 @@ void MPinSDK::HttpResponse::SetNetworkError(const String& error) m_mpinStatus.SetErrorMessage(String().Format("HTTP request to '%s' failed. Error: '%s'", m_requestUrl.c_str(), error.c_str())); } +void MPinSDK::HttpResponse::SetResponseJsonParseError(const String& jsonParseError) +{ + SetResponseJsonParseError(String(m_rawData).Trim(), jsonParseError); +} + void MPinSDK::HttpResponse::SetResponseJsonParseError(const String& responseJson, const String& jsonParseError) { m_httpStatus = NON_HTTP_ERROR; @@ -425,6 +430,7 @@ Status MPinSDK::HttpResponse::TranslateToMPinStatus(Context context) { switch(context) { + case GET_SERVICE_DETAILS: case GET_CLIENT_SETTINGS: case AUTHENTICATE_PASS1: case AUTHENTICATE_PASS2: @@ -648,6 +654,36 @@ Status MPinSDK::RewriteRelativeUrls() return Status(Status::OK); } +Status MPinSDK::GetServiceDetails(const String& url, OUT ServiceDetails& serviceDetails) +{ + HttpResponse response = MakeGetRequest(String().Format("%s/service", String(url).TrimRight("/").c_str())); + if (response.GetStatus() != HttpResponse::HTTP_OK) + { + return response.TranslateToMPinStatus(HttpResponse::GET_SERVICE_DETAILS); + } + + try + { + const util::JsonObject& data = response.GetJsonData(); + serviceDetails.name = ((const json::String&) data["name"]).Value(); + serviceDetails.backendUrl = ((const json::String&) data["url"]).Value(); + serviceDetails.rpsPrefix = ((const json::String&) data["rps_prefix"]).Value(); + serviceDetails.logoUrl = ((const json::String&) data["logo_url"]).Value(); + String type = ((const json::String&) data["type"]).Value(); + if (type != "online") + { + throw json::Exception(String().Format("Unexpected service details type: '%s'. Must be 'online'", type.c_str())); + } + + return Status::OK; + } + catch (json::Exception& e) + { + response.SetResponseJsonParseError(e.what()); + return response.TranslateToMPinStatus(HttpResponse::GET_SERVICE_DETAILS); + } +} + Status MPinSDK::Init(const StringMap& config, IContext* ctx) { return Init(config, ctx, StringMap()); http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/12ab2bd3/src/mpin_sdk.h ---------------------------------------------------------------------- diff --git a/src/mpin_sdk.h b/src/mpin_sdk.h index 5d29199..23792d5 100644 --- a/src/mpin_sdk.h +++ b/src/mpin_sdk.h @@ -237,8 +237,20 @@ public: String appIconUrl; }; + class ServiceDetails + { + public: + String name; + String backendUrl; + String rpsPrefix; + String logoUrl; + }; + MPinSDK(); ~MPinSDK(); + + Status GetServiceDetails(const String& url, OUT ServiceDetails& serviceDetails); + Status Init(const StringMap& config, IN IContext* ctx); Status Init(const StringMap& config, IN IContext* ctx, const StringMap& customHeaders); void SetClientId(const String& clientId); @@ -294,6 +306,7 @@ private: enum Context { + GET_SERVICE_DETAILS, GET_CLIENT_SETTINGS, REGISTER, GET_CLIENT_SECRET1, @@ -322,6 +335,7 @@ private: const StringMap& GetHeaders() const; void SetNetworkError(const String& error); void SetHttpError(int httpStatus); + void SetResponseJsonParseError(const String& jsonParseError); Status TranslateToMPinStatus(Context context); private:
