mirror of
https://gitee.com/openharmony/useriam_user_auth_framework
synced 2024-11-27 01:40:49 +00:00
add big data for no screen ublock after systemui unlock
Change-Id: Id35544b5a2975f2ebbe797b154b8099718a8675f Signed-off-by: Tianshi Liu <tianshi.liu@huawei.com>
This commit is contained in:
parent
c49873236c
commit
99750cdad0
@ -104,6 +104,12 @@ struct RemoteConnectFaultTrace {
|
|||||||
bool ack = false;
|
bool ack = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ReportAuthSuccessNoUnlockTrace {
|
||||||
|
int32_t userId = 0;
|
||||||
|
int32_t authType = 0;
|
||||||
|
std::string receiveResultTime;
|
||||||
|
};
|
||||||
|
|
||||||
void ReportSystemFault(const std::string &timeString, const std::string &moduleName);
|
void ReportSystemFault(const std::string &timeString, const std::string &moduleName);
|
||||||
void ReportSecurityTemplateChange(const TemplateChangeTrace &info);
|
void ReportSecurityTemplateChange(const TemplateChangeTrace &info);
|
||||||
void ReportBehaviorCredManager(const UserCredManagerTrace &info);
|
void ReportBehaviorCredManager(const UserCredManagerTrace &info);
|
||||||
@ -113,6 +119,7 @@ void ReportSecurityUserAuthFwk(const UserAuthFwkTrace &info);
|
|||||||
void ReportRemoteExecuteProc(const RemoteExecuteTrace &info);
|
void ReportRemoteExecuteProc(const RemoteExecuteTrace &info);
|
||||||
void ReportRemoteConnectOpen(const RemoteConnectOpenTrace &info);
|
void ReportRemoteConnectOpen(const RemoteConnectOpenTrace &info);
|
||||||
void ReportConnectFaultTrace(const RemoteConnectFaultTrace &info);
|
void ReportConnectFaultTrace(const RemoteConnectFaultTrace &info);
|
||||||
|
void ReportAuthSuccessNoUnlock(const ReportAuthSuccessNoUnlockTrace &info);
|
||||||
} // namespace UserAuth
|
} // namespace UserAuth
|
||||||
} // namespace UserIam
|
} // namespace UserIam
|
||||||
} // namespace OHOS
|
} // namespace OHOS
|
||||||
|
@ -217,6 +217,19 @@ void ReportConnectFaultTrace(const RemoteConnectFaultTrace &info)
|
|||||||
<< ", msgType:" << info.msgType << ", messageSeq" << "ack:" << info.ack;
|
<< ", msgType:" << info.msgType << ", messageSeq" << "ack:" << info.ack;
|
||||||
ReportSystemFault(Common::GetNowTimeString(), ss.str());
|
ReportSystemFault(Common::GetNowTimeString(), ss.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ReportAuthSuccessNoUnlock(const ReportAuthSuccessNoUnlockTrace &info)
|
||||||
|
{
|
||||||
|
std::string operationTime = Common::GetNowTimeString();
|
||||||
|
int32_t ret = HiSysEventWrite(HiSysEvent::Domain::USERIAM_FWK, "USERIAM_AUTH_SUCCESS_NO_UNLOCK",
|
||||||
|
HiSysEvent::EventType::FAULT,
|
||||||
|
STR_OPERATION_TIME, info.receiveResultTime,
|
||||||
|
STR_USER_ID, info.userId,
|
||||||
|
STR_AUTH_TYPE, info.authType);
|
||||||
|
if (ret != 0) {
|
||||||
|
IAM_LOGE("hisysevent write failed! ret %{public}d", ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
} // namespace UserAuth
|
} // namespace UserAuth
|
||||||
} // namespace UserIam
|
} // namespace UserIam
|
||||||
} // namespace OHOS
|
} // namespace OHOS
|
@ -96,4 +96,9 @@ USERIAM_REMOTE_CONNECT:
|
|||||||
TIME_SPAN: {type: UINT64, desc: time span}
|
TIME_SPAN: {type: UINT64, desc: time span}
|
||||||
NETWORK_ID: {type: STRING, desc: network id}
|
NETWORK_ID: {type: STRING, desc: network id}
|
||||||
SOCKET_ID: {type: STRING, desc: socket id}
|
SOCKET_ID: {type: STRING, desc: socket id}
|
||||||
|
|
||||||
|
USERIAM_AUTH_SUCCESS_NO_UNLOCK:
|
||||||
|
__BASE: {type: FAULT, level: CRITICAL, tag: UserAuth, desc: user auth success no unlock message}
|
||||||
|
OPERATION_TIME: {type: STRING, desc: operation time}
|
||||||
|
USER_ID: {type: INT32, desc: user id}
|
||||||
|
AUTH_TYPE: {type: INT32, desc: auth type}
|
@ -53,6 +53,7 @@ ohos_source_set("userauth_service_context") {
|
|||||||
"src/remote_executor_stub.cpp",
|
"src/remote_executor_stub.cpp",
|
||||||
"src/remote_iam_callback.cpp",
|
"src/remote_iam_callback.cpp",
|
||||||
"src/schedule_holder_context.cpp",
|
"src/schedule_holder_context.cpp",
|
||||||
|
"src/screen_unlock_after_auth_monitor.cpp",
|
||||||
"src/simple_auth_context.cpp",
|
"src/simple_auth_context.cpp",
|
||||||
"src/trace.cpp",
|
"src/trace.cpp",
|
||||||
"src/ui_extension_ability_connection.cpp",
|
"src/ui_extension_ability_connection.cpp",
|
||||||
|
59
services/context/inc/screen_unlock_after_auth_monitor.h
Normal file
59
services/context/inc/screen_unlock_after_auth_monitor.h
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024 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 SCREEN_UNLOCK_AFTER_AUTH_MONITOR_H
|
||||||
|
#define SCREEN_UNLOCK_AFTER_AUTH_MONITOR_H
|
||||||
|
|
||||||
|
#include <mutex>
|
||||||
|
#include <optional>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "nocopyable.h"
|
||||||
|
|
||||||
|
#include "iam_common_defines.h"
|
||||||
|
|
||||||
|
namespace OHOS {
|
||||||
|
namespace UserIam {
|
||||||
|
namespace UserAuth {
|
||||||
|
using time_point = std::chrono::steady_clock::time_point;
|
||||||
|
|
||||||
|
struct AuthSuccessData {
|
||||||
|
int32_t userId;
|
||||||
|
int32_t authType;
|
||||||
|
std::string authSuccessTime;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ScreenUnlockAfterAuthMonitor : public NoCopyable {
|
||||||
|
public:
|
||||||
|
static ScreenUnlockAfterAuthMonitor &GetInstance();
|
||||||
|
|
||||||
|
void OnScreenUnlocked();
|
||||||
|
void OnAuthSuccess(const AuthSuccessData &data);
|
||||||
|
void OnTimeOut();
|
||||||
|
|
||||||
|
private:
|
||||||
|
ScreenUnlockAfterAuthMonitor() = default;
|
||||||
|
~ScreenUnlockAfterAuthMonitor() override = default;
|
||||||
|
|
||||||
|
std::recursive_mutex mutex_;
|
||||||
|
std::optional<time_point> screenUnlockedTime_ = std::nullopt;
|
||||||
|
std::optional<int32_t> timerId_ = std::nullopt;
|
||||||
|
std::vector<AuthSuccessData> authSuccessData_;
|
||||||
|
};
|
||||||
|
} // namespace UserAuth
|
||||||
|
} // namespace UserIam
|
||||||
|
} // namespace OHOS
|
||||||
|
|
||||||
|
#endif // SCREEN_UNLOCK_AFTER_AUTH_MONITOR_H
|
@ -19,6 +19,7 @@
|
|||||||
#include "common_event_subscribe_info.h"
|
#include "common_event_subscribe_info.h"
|
||||||
#include "iam_logger.h"
|
#include "iam_logger.h"
|
||||||
#include "matching_skills.h"
|
#include "matching_skills.h"
|
||||||
|
#include "screen_unlock_after_auth_monitor.h"
|
||||||
#include "singleton.h"
|
#include "singleton.h"
|
||||||
#include "want.h"
|
#include "want.h"
|
||||||
|
|
||||||
@ -125,6 +126,7 @@ void KeyguardStatusListener::OnReceiveEvent(const OHOS::EventFwk::CommonEventDat
|
|||||||
ContextAppStateObserverManager::GetInstance().SetScreenLockState(true);
|
ContextAppStateObserverManager::GetInstance().SetScreenLockState(true);
|
||||||
} else if (action == EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_UNLOCKED) {
|
} else if (action == EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_UNLOCKED) {
|
||||||
ContextAppStateObserverManager::GetInstance().SetScreenLockState(false);
|
ContextAppStateObserverManager::GetInstance().SetScreenLockState(false);
|
||||||
|
ScreenUnlockAfterAuthMonitor::GetInstance().OnScreenUnlocked();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} // namespace UserAuth
|
} // namespace UserAuth
|
||||||
|
96
services/context/src/screen_unlock_after_auth_monitor.cpp
Normal file
96
services/context/src/screen_unlock_after_auth_monitor.cpp
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "screen_unlock_after_auth_monitor.h"
|
||||||
|
|
||||||
|
#include "iam_check.h"
|
||||||
|
#include "iam_logger.h"
|
||||||
|
#include "relative_timer.h"
|
||||||
|
#include "hisysevent_adapter.h"
|
||||||
|
|
||||||
|
#define LOG_TAG "USER_AUTH_SA"
|
||||||
|
|
||||||
|
using namespace std::chrono;
|
||||||
|
|
||||||
|
namespace OHOS {
|
||||||
|
namespace UserIam {
|
||||||
|
namespace UserAuth {
|
||||||
|
ScreenUnlockAfterAuthMonitor &ScreenUnlockAfterAuthMonitor::GetInstance()
|
||||||
|
{
|
||||||
|
static ScreenUnlockAfterAuthMonitor instance;
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenUnlockAfterAuthMonitor::OnScreenUnlocked()
|
||||||
|
{
|
||||||
|
IAM_LOGI("start");
|
||||||
|
std::lock_guard<std::recursive_mutex> lock(mutex_);
|
||||||
|
authSuccessData_.clear();
|
||||||
|
screenUnlockedTime_ = steady_clock::now();
|
||||||
|
if (timerId_.has_value()) {
|
||||||
|
RelativeTimer::GetInstance().Unregister(timerId_.value());
|
||||||
|
timerId_ = std::nullopt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenUnlockAfterAuthMonitor::OnAuthSuccess(const AuthSuccessData &data)
|
||||||
|
{
|
||||||
|
const int32_t SCREEN_UNLOCK_BEFORE_AUTH_TIME_LIMIT = 3000; // 3s
|
||||||
|
const int32_t SCREEN_UNLOCK_AFTER_AUTH_TIME_LIMIT = 3000; // 3s
|
||||||
|
|
||||||
|
if (data.authType == FACE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::lock_guard<std::recursive_mutex> lock(mutex_);
|
||||||
|
|
||||||
|
if (screenUnlockedTime_.has_value() &&
|
||||||
|
(steady_clock::now() - screenUnlockedTime_.value() < milliseconds(SCREEN_UNLOCK_BEFORE_AUTH_TIME_LIMIT))) {
|
||||||
|
IAM_LOGI("screen unlocked before auth success, ignore");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
authSuccessData_.push_back(data);
|
||||||
|
IAM_LOGI("record auth success userId: %{public}d, authType: %{public}d", data.userId, data.authType);
|
||||||
|
if (!timerId_.has_value()) {
|
||||||
|
timerId_ = RelativeTimer::GetInstance().Register([this]() { OnTimeOut(); },
|
||||||
|
SCREEN_UNLOCK_AFTER_AUTH_TIME_LIMIT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenUnlockAfterAuthMonitor::OnTimeOut()
|
||||||
|
{
|
||||||
|
IAM_LOGI("start");
|
||||||
|
std::lock_guard<std::recursive_mutex> lock(mutex_);
|
||||||
|
if (authSuccessData_.empty()) {
|
||||||
|
IAM_LOGI("authSuccessData_ is empty");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IAM_LOGE("screen not unlocked after auth success, auth success num %{public}zu", authSuccessData_.size());
|
||||||
|
for (const auto &data : authSuccessData_) {
|
||||||
|
ReportAuthSuccessNoUnlockTrace trace = {
|
||||||
|
.userId = data.userId,
|
||||||
|
.authType = data.authType,
|
||||||
|
.receiveResultTime = data.authSuccessTime,
|
||||||
|
};
|
||||||
|
ReportAuthSuccessNoUnlock(trace);
|
||||||
|
}
|
||||||
|
authSuccessData_.clear();
|
||||||
|
timerId_ = std::nullopt;
|
||||||
|
}
|
||||||
|
} // namespace UserAuth
|
||||||
|
} // namespace UserIam
|
||||||
|
} // namespace OHOS
|
@ -21,10 +21,12 @@
|
|||||||
#include "iam_check.h"
|
#include "iam_check.h"
|
||||||
#include "iam_logger.h"
|
#include "iam_logger.h"
|
||||||
#include "iam_para2str.h"
|
#include "iam_para2str.h"
|
||||||
|
#include "iam_time.h"
|
||||||
#include "resource_node.h"
|
#include "resource_node.h"
|
||||||
#include "resource_node_utils.h"
|
#include "resource_node_utils.h"
|
||||||
#include "schedule_node.h"
|
#include "schedule_node.h"
|
||||||
#include "schedule_node_callback.h"
|
#include "schedule_node_callback.h"
|
||||||
|
#include "screen_unlock_after_auth_monitor.h"
|
||||||
|
|
||||||
#define LOG_TAG "USER_AUTH_SA"
|
#define LOG_TAG "USER_AUTH_SA"
|
||||||
namespace OHOS {
|
namespace OHOS {
|
||||||
@ -143,6 +145,7 @@ bool SimpleAuthContext::OnStart()
|
|||||||
|
|
||||||
void SimpleAuthContext::OnResult(int32_t resultCode, const std::shared_ptr<Attributes> &scheduleResultAttr)
|
void SimpleAuthContext::OnResult(int32_t resultCode, const std::shared_ptr<Attributes> &scheduleResultAttr)
|
||||||
{
|
{
|
||||||
|
const std::string SYSTEM_UI_CALLER_NAME = "com.ohos.sceneboard";
|
||||||
IAM_LOGI("%{public}s receive result code %{public}d", GetDescription(), resultCode);
|
IAM_LOGI("%{public}s receive result code %{public}d", GetDescription(), resultCode);
|
||||||
Authentication::AuthResultInfo resultInfo = {};
|
Authentication::AuthResultInfo resultInfo = {};
|
||||||
bool updateRet = UpdateScheduleResult(scheduleResultAttr, resultInfo);
|
bool updateRet = UpdateScheduleResult(scheduleResultAttr, resultInfo);
|
||||||
@ -158,6 +161,10 @@ void SimpleAuthContext::OnResult(int32_t resultCode, const std::shared_ptr<Attri
|
|||||||
}
|
}
|
||||||
InvokeResultCallback(resultInfo);
|
InvokeResultCallback(resultInfo);
|
||||||
SendAuthExecutorMsg();
|
SendAuthExecutorMsg();
|
||||||
|
if (GetCallerName() == SYSTEM_UI_CALLER_NAME && resultInfo.result == SUCCESS) {
|
||||||
|
ScreenUnlockAfterAuthMonitor::GetInstance().OnAuthSuccess(AuthSuccessData{GetUserId(), GetAuthType(),
|
||||||
|
Common::GetNowTimeString() });
|
||||||
|
}
|
||||||
IAM_LOGI("%{public}s on result %{public}d finish", GetDescription(), resultInfo.result);
|
IAM_LOGI("%{public}s on result %{public}d finish", GetDescription(), resultInfo.result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,6 +256,7 @@ ohos_source_set("userauth_service_context_fuzzer") {
|
|||||||
"../../../services/context/src/remote_executor_stub.cpp",
|
"../../../services/context/src/remote_executor_stub.cpp",
|
||||||
"../../../services/context/src/remote_iam_callback.cpp",
|
"../../../services/context/src/remote_iam_callback.cpp",
|
||||||
"../../../services/context/src/schedule_holder_context.cpp",
|
"../../../services/context/src/schedule_holder_context.cpp",
|
||||||
|
"../../../services/context/src/screen_unlock_after_auth_monitor.cpp",
|
||||||
"../../../services/context/src/simple_auth_context.cpp",
|
"../../../services/context/src/simple_auth_context.cpp",
|
||||||
"../../../services/context/src/trace.cpp",
|
"../../../services/context/src/trace.cpp",
|
||||||
"../../../services/context/src/ui_extension_ability_connection.cpp",
|
"../../../services/context/src/ui_extension_ability_connection.cpp",
|
||||||
|
@ -71,6 +71,7 @@ ohos_unittest("iam_services_test") {
|
|||||||
"../../../services/context/src/remote_executor_stub.cpp",
|
"../../../services/context/src/remote_executor_stub.cpp",
|
||||||
"../../../services/context/src/remote_iam_callback.cpp",
|
"../../../services/context/src/remote_iam_callback.cpp",
|
||||||
"../../../services/context/src/schedule_holder_context.cpp",
|
"../../../services/context/src/schedule_holder_context.cpp",
|
||||||
|
"../../../services/context/src/screen_unlock_after_auth_monitor.cpp",
|
||||||
"../../../services/context/src/simple_auth_context.cpp",
|
"../../../services/context/src/simple_auth_context.cpp",
|
||||||
"../../../services/context/src/trace.cpp",
|
"../../../services/context/src/trace.cpp",
|
||||||
"../../../services/context/src/ui_extension_ability_connection.cpp",
|
"../../../services/context/src/ui_extension_ability_connection.cpp",
|
||||||
|
Loading…
Reference in New Issue
Block a user