Files
NixMsg/internal/app/identity/service.go
T

64 lines
2.3 KiB
Go

// Package identity 定义注册、self.*、对话密码授权、停用与删除级联的接口。
package identity
import (
"context"
"errors"
"git.asio.asia/nixevol/NixMsg/internal/protocol"
)
// ErrNotImplemented 表示假实现未提供业务能力。
var ErrNotImplemented = errors.New("identity: not implemented")
// RegisterRequest 对应 POST /api/client/register 与后台开通的公共字段。
type RegisterRequest struct {
RegistrationCode string
ID string
LoginPassword string
Name string
TalkPassword string
Remark string
DefaultDelayMs int64
Source string // admin | self
RemoteIP string
}
// RegisterResult 是注册/开通结果。
type RegisterResult struct {
ID string
LoginPassword string // 仅当请求留空由服务器生成时非空
}
// SelfInfo 是 self.get 返回。
type SelfInfo struct {
ID string `json:"id"`
Name string `json:"name"`
DefaultDelayMs int64 `json:"default_delay_ms"`
TalkPasswordSet bool `json:"talk_password_set"`
}
// Service 是身份子系统契约。
type Service interface {
// Register 处理自助注册或供管理开通复用(第 6.9 节)。
Register(ctx context.Context, req RegisterRequest) (RegisterResult, error)
SelfGet(ctx context.Context, endpointID string) (SelfInfo, error)
SelfUpdate(ctx context.Context, endpointID string, req *protocol.SelfUpdate) error
SelfSetTalkPassword(ctx context.Context, endpointID string, talkPassword string) error
SelfChangeLoginPassword(ctx context.Context, endpointID string, oldPassword, newPassword string) (sessionToken string, err error)
SelfLogout(ctx context.Context, endpointID string) error
// UnlockTalk 校验并写入对话密码授权(第 6.6 节 unlock)。
UnlockTalk(ctx context.Context, senderID, targetID, talkPassword string) error
// HasTalkGrant 查询发送方对目标是否有有效授权。
HasTalkGrant(ctx context.Context, senderID, targetID string) (bool, error)
// Disable 停用端并作废相关消息/令牌(第 7.6 节)。
Disable(ctx context.Context, endpointID string) error
// Enable 重新启用。
Enable(ctx context.Context, endpointID string) error
// Delete 删除端并做级联清理。
Delete(ctx context.Context, endpointID string) error
}