* Copyright (c) 2026 Huawei Device Co., Ltd.
* Licensed 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.
*/
#ifndef OHOS_DM_AUTH_MANAGER_3RD_H
#define OHOS_DM_AUTH_MANAGER_3RD_H
#include <memory>
#include "dm_auth_manager_base_3rd.h"
#include "ffrt.h"
#include "hichain_auth_connector_3rd.h"
#include "idevice_manager_service_listener_3rd.h"
#include "json_object.h"
#include "softbus_connector_3rd.h"
#include "softbus_session_3rd.h"
#include "dm_auth_context_3rd.h"
namespace OHOS {
namespace DistributedHardware {
struct DmAuthContext;
struct DmProxyAuthContext;
class AuthManager3rd : public AuthManagerBase3rd,
public std::enable_shared_from_this<AuthManager3rd> {
public:
AuthManager3rd(std::shared_ptr<SoftbusConnector3rd> softbusConnector,
std::shared_ptr<IDeviceManagerServiceListener3rd> listener,
std::shared_ptr<HiChainAuthConnector3rd> hiChainAuthConnector);
virtual ~AuthManager3rd();
int32_t ImportAuthCodeAndUid(const std::string &businessName, const std::string &authCode, int32_t uid);
void GetAuthParam(const PeerTargetId3rd &targetId, const std::map<std::string, std::string> &authParam);
int32_t AuthDevice3rd(const PeerTargetId3rd &targetId, const std::map<std::string, std::string> &authParam,
int32_t sessionId, uint64_t logicalSessionId);
int32_t AuthCredential(const PeerTargetId3rd &targetId, const std::map<std::string, std::string> &authParam,
int32_t sessionId, uint64_t logicalSessionId);
void RegisterCleanNotifyCallback(CleanNotifyCallback cleanNotifyCallback);
protected:
int32_t GetPinCode(std::string &code);
void ParseProxyParam(const std::map<std::string, std::string> &authParam);
void GetBindLevelByProcessName(const std::string &processName, int32_t userId, int32_t &bindLevel);
bool IsProxyBindEnabled(const std::map<std::string, std::string> &authParam);
void SetProxyBindFlags(const std::map<std::string, std::string> &authParam);
void ParseSubjectProxyedSubjects(const std::map<std::string, std::string> &authParam);
void ParseProxyItem(JsonItemObject &item);
bool ValidateProxyItem(const JsonItemObject &item);
std::string GetPeerProcessName(const JsonItemObject &item, const std::string &defaultProcessName);
DmProxyAuthContext CreateProxyAuthContext(const JsonItemObject &item, const std::string &processName,
const std::string &peerProcessName);
void AddProxyContextIfNotExists(DmProxyAuthContext &proxyAuthContext, const std::string &processName,
const std::string &peerProcessName, uint32_t tokenId);
std::shared_ptr<DmAuthContext> context_;
};
class AuthSrcManager : public AuthManager3rd {
public:
AuthSrcManager(std::shared_ptr<SoftbusConnector3rd> softbusConnector,
std::shared_ptr<IDeviceManagerServiceListener3rd> listener,
std::shared_ptr<HiChainAuthConnector3rd> hiChainAuthConnector);
virtual ~AuthSrcManager() override = default;
bool AuthDeviceTransmit(int64_t requestId, const uint8_t *data, uint32_t dataLen) override;
void AuthDeviceError(int64_t requestId, int32_t errorCode) override;
void AuthDeviceFinish(int64_t requestId) override;
void AuthDeviceSessionKey(int64_t requestId, const uint8_t *sessionKey, uint32_t sessionKeyLen) override;
char *AuthDeviceRequest(int64_t requestId, int operationCode, const char *reqParams) override;
void OnSessionOpened(int32_t sessionId, int32_t sessionSide, int32_t result) override;
void OnSessionClosed(int32_t sessionId) override;
void OnSessionDisable() override;
void OnDataReceived(int32_t sessionId, const std::string &message) override;
bool GetIsCryptoSupport() override;
};
class AuthSinkManager : public AuthManager3rd {
public:
AuthSinkManager(std::shared_ptr<SoftbusConnector3rd> softbusConnector,
std::shared_ptr<IDeviceManagerServiceListener3rd> listener,
std::shared_ptr<HiChainAuthConnector3rd> hiChainAuthConnector);
virtual ~AuthSinkManager() override = default;
bool AuthDeviceTransmit(int64_t requestId, const uint8_t *data, uint32_t dataLen) override;
void AuthDeviceError(int64_t requestId, int32_t errorCode) override;
void AuthDeviceFinish(int64_t requestId) override;
void AuthDeviceSessionKey(int64_t requestId, const uint8_t *sessionKey, uint32_t sessionKeyLen) override;
char *AuthDeviceRequest(int64_t requestId, int operationCode, const char *reqParams) override;
void OnSessionOpened(int32_t sessionId, int32_t sessionSide, int32_t result) override;
void OnSessionClosed(int32_t sessionId) override;
void OnDataReceived(int32_t sessionId, const std::string &message) override;
bool GetIsCryptoSupport() override;
};
}
}
#endif