blob: fa3f93ffff9ca7945987d15496aaf1a0a8259e7e [file] [log] [blame]
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/
/*
* M-Pin SDK version 2 interface
*/
#ifndef _MPIN_SDK_V2_H_
#define _MPIN_SDK_V2_H_
#include "mpin_sdk.h"
class MPinSDKv2
{
public:
typedef util::String String;
typedef util::StringMap StringMap;
typedef MPinSDK::User User;
typedef MPinSDK::UserPtr UserPtr;
typedef MPinSDK::CryptoType CryptoType;
typedef MPinSDK::IHttpRequest IHttpRequest;
typedef MPinSDK::IStorage IStorage;
typedef MPinSDK::IPinPad IPinPad;
typedef MPinSDK::Status Status;
typedef MPinSDK::OTP OTP;
class IContext
{
public:
virtual ~IContext() {}
virtual IHttpRequest * CreateHttpRequest() const = 0;
virtual void ReleaseHttpRequest(IN IHttpRequest *request) const = 0;
virtual IStorage * GetStorage(IStorage::Type type) const = 0;
virtual CryptoType GetMPinCryptoType() const = 0;
};
MPinSDKv2();
~MPinSDKv2();
Status Init(const StringMap& config, IN IContext* ctx);
void Destroy();
void ClearUsers();
Status TestBackend(const String& server, const String& rpsPrefix = MPinSDK::DEFAULT_RPS_PREFIX) const;
Status SetBackend(const String& server, const String& rpsPrefix = MPinSDK::DEFAULT_RPS_PREFIX);
UserPtr MakeNewUser(const String& id, const String& deviceName = "") const;
Status StartRegistration(INOUT UserPtr user, const String& userData = "");
Status RestartRegistration(INOUT UserPtr user, const String& userData = "");
Status VerifyUser(INOUT UserPtr user, const String& mpinId, const String& activationKey);
Status ConfirmRegistration(INOUT UserPtr user, const String& pushMessageIdentifier = "");
Status FinishRegistration(INOUT UserPtr user, const String& pin);
Status StartAuthentication(INOUT UserPtr user);
Status CheckAccessNumber(const String& accessNumber);
Status FinishAuthentication(INOUT UserPtr user, const String& pin);
Status FinishAuthentication(INOUT UserPtr user, const String& pin, OUT String& authResultData);
Status FinishAuthenticationOTP(INOUT UserPtr user, const String& pin, OUT OTP& otp);
Status FinishAuthenticationAN(INOUT UserPtr user, const String& pin, const String& accessNumber);
void DeleteUser(INOUT UserPtr user);
void ListUsers(OUT std::vector<UserPtr>& users);
const char * GetVersion();
bool CanLogout(IN UserPtr user);
bool Logout(IN UserPtr user);
String GetClientParam(const String& key);
private:
Status FinishAuthenticationImpl(INOUT UserPtr user, const String& pin, const String& accessNumber, OUT String *otp, OUT util::JsonObject& authResultData);
typedef MPinSDK::TimePermitCache TimePermitCache;
typedef MPinSDK::HttpResponse HttpResponse;
typedef MPinSDK::State State;
typedef MPinSDK::LogoutData LogoutData;
class Context : public MPinSDK::IContext
{
public:
Context();
~Context();
void Init(MPinSDKv2::IContext *appContext);
void SetPin(const String& pin);
virtual IHttpRequest * CreateHttpRequest() const;
virtual void ReleaseHttpRequest(IN IHttpRequest *request) const;
virtual IStorage * GetStorage(IStorage::Type type) const;
virtual IPinPad * GetPinPad() const;
virtual CryptoType GetMPinCryptoType() const;
private:
class Pinpad : public IPinPad
{
public:
void SetPin(const String& pin) { m_pin = pin; }
virtual String Show(UserPtr user, Mode mode) { return m_pin; }
private:
String m_pin;
};
MPinSDKv2::IContext *m_appContext;
Pinpad *m_pinpad;
};
MPinSDK m_v1Sdk;
Context m_context;
};
#endif // _MPIN_SDK_V2_H_