185d2f8c5Sopenharmony_ci/*
285d2f8c5Sopenharmony_ci * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
385d2f8c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
485d2f8c5Sopenharmony_ci * you may not use this file except in compliance with the License.
585d2f8c5Sopenharmony_ci * You may obtain a copy of the License at
685d2f8c5Sopenharmony_ci *
785d2f8c5Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
885d2f8c5Sopenharmony_ci *
985d2f8c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1085d2f8c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1185d2f8c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1285d2f8c5Sopenharmony_ci * See the License for the specific language governing permissions and
1385d2f8c5Sopenharmony_ci * limitations under the License.
1485d2f8c5Sopenharmony_ci */
1585d2f8c5Sopenharmony_ci
1685d2f8c5Sopenharmony_ci#ifndef IAM_CONTEXT_H
1785d2f8c5Sopenharmony_ci#define IAM_CONTEXT_H
1885d2f8c5Sopenharmony_ci
1985d2f8c5Sopenharmony_ci#include <cstdint>
2085d2f8c5Sopenharmony_ci#include <memory>
2185d2f8c5Sopenharmony_ci#include <string>
2285d2f8c5Sopenharmony_ci#include <vector>
2385d2f8c5Sopenharmony_ci
2485d2f8c5Sopenharmony_ci#include "nocopyable.h"
2585d2f8c5Sopenharmony_ci
2685d2f8c5Sopenharmony_ci#include "schedule_node.h"
2785d2f8c5Sopenharmony_ci
2885d2f8c5Sopenharmony_cinamespace OHOS {
2985d2f8c5Sopenharmony_cinamespace UserIam {
3085d2f8c5Sopenharmony_cinamespace UserAuth {
3185d2f8c5Sopenharmony_ciconstexpr uint64_t REUSE_AUTH_RESULT_CONTEXT_ID = 1;
3285d2f8c5Sopenharmony_ci
3385d2f8c5Sopenharmony_cienum ContextState {
3485d2f8c5Sopenharmony_ci    STATE_INIT,
3585d2f8c5Sopenharmony_ci    STATE_RUNNING,
3685d2f8c5Sopenharmony_ci    STATE_END,
3785d2f8c5Sopenharmony_ci};
3885d2f8c5Sopenharmony_ci
3985d2f8c5Sopenharmony_cienum ContextType {
4085d2f8c5Sopenharmony_ci    CONTEXT_SIMPLE_AUTH,
4185d2f8c5Sopenharmony_ci    CONTEXT_ENROLL,
4285d2f8c5Sopenharmony_ci    CONTEXT_IDENTIFY,
4385d2f8c5Sopenharmony_ci    WIDGET_AUTH_CONTEXT,
4485d2f8c5Sopenharmony_ci    REMOTE_AUTH_CONTEXT,
4585d2f8c5Sopenharmony_ci    REMOTE_AUTH_INVOKER_CONTEXT,
4685d2f8c5Sopenharmony_ci    SCHEDULE_HOLDER_CONTEXT,
4785d2f8c5Sopenharmony_ci};
4885d2f8c5Sopenharmony_ci
4985d2f8c5Sopenharmony_ciclass Context {
5085d2f8c5Sopenharmony_cipublic:
5185d2f8c5Sopenharmony_ci    using ContextStopCallback = std::function<void()>;
5285d2f8c5Sopenharmony_ci    virtual ~Context() = default;
5385d2f8c5Sopenharmony_ci    virtual bool Start() = 0;
5485d2f8c5Sopenharmony_ci    virtual bool Stop() = 0;
5585d2f8c5Sopenharmony_ci    virtual uint64_t GetContextId() const = 0;
5685d2f8c5Sopenharmony_ci    virtual ContextType GetContextType() const = 0;
5785d2f8c5Sopenharmony_ci    virtual std::shared_ptr<ScheduleNode> GetScheduleNode(uint64_t scheduleId) const = 0;
5885d2f8c5Sopenharmony_ci    virtual uint32_t GetTokenId() const = 0;
5985d2f8c5Sopenharmony_ci    virtual int32_t GetLatestError() const = 0;
6085d2f8c5Sopenharmony_ci    virtual int32_t GetUserId() const = 0;
6185d2f8c5Sopenharmony_ci
6285d2f8c5Sopenharmony_ciprotected:
6385d2f8c5Sopenharmony_ci    virtual void SetLatestError(int32_t error) = 0;
6485d2f8c5Sopenharmony_ci};
6585d2f8c5Sopenharmony_ci} // namespace UserAuth
6685d2f8c5Sopenharmony_ci} // namespace UserIam
6785d2f8c5Sopenharmony_ci} // namespace OHOS
6885d2f8c5Sopenharmony_ci#endif // IAM_CONTEXT_H