from enum import Enum
from q2_sdk.core.dynamic_imports import (
api_ExecuteStoredProcedure as ExecuteStoredProcedure,
)
from q2_sdk.hq.table_row import TableRow
from .db_object import DbObject
[docs]
class UiSource(Enum):
OnlineBanking = "OnlineBanking"
VoiceBanking = "VoiceBanking"
BackOffice = "BackOffice"
Merchant = "Merchant"
Fax = "Fax"
Notifications = "Notifications"
API = "API"
TextBanking = "TextBanking"
OpenBanking = "OpenBanking"
[docs]
class UiSourceId(Enum):
OnlineBanking = 1
VoiceBanking = 2
BackOffice = 3
Merchant = 4
Fax = 5
Notifications = 6
# 7 is skipped over in the DB schema for some reason
API = 8
TextBanking = 9
OpenBanking = 10
[docs]
class PasswordPolicyRow(TableRow):
UISourceID: int
PasswordPolicyID: int
PasswordHistoryNumber: int
MaxPasswordAge: int
MinPasswordAge: int
MaxPasswordLength: int
MinPasswordLength: int
NumbersRequired: int
UpperCaseRequired: int
LowerCaseRequired: int
SpecialCharRequired: int
InvalidAttempts: int
InvalidAction: int
LimitRepeating: int
LimitAdjacent: int
ExcludeCharList: str
AutoResetHours: int
NewPwdExpirationHours: int
CQRCount: int
CQRInvalidAttempts: int
CaseSensitiveAnswer: int
QuestionMinLength: int
AnswerMinLength: int
TACRequiredLostPwd: int
TACTTLMinutes: int
TACDeliveryViaVoice: int
TACDeliveryViaEmail: int
TACLength: int
Description: str
LoginMinLength: int
LoginMaxLength: int
DormantDays: int
MlaMinLength: int
MlaMaxLength: int
MlaRequireAlpha: bool
MlaRequireNumeric: bool
TACDeliveryViaSMS: bool
OobInvalidAttempts: int
OobInvalidAction: int
ExcludeLoginCharList: str
LoginNumericRequired: bool
LoginAlphaRequired: bool
LoginSpecialCharRequired: bool
[docs]
class PasswordPolicy(DbObject):
# GET_BY_NAME_KEY = "column in the db response"
NAME = "PasswordPolicy"
REPRESENTATION_ROW_CLASS = PasswordPolicyRow
[docs]
async def get(
self, ui_source: UiSource, group_id: int = None
) -> list[PasswordPolicyRow]:
"""
Gets a password policy for a given ui source.
:param: ui_source: OnlineBanking, VoiceBanking, TextBanking, etc.
:param: group_id: An optional parameter used for getting policy data for different zones if applicable
"""
assert isinstance(ui_source, UiSource), (
"Please supply a valid user ui source object"
)
sql_parameters = [
ExecuteStoredProcedure.SqlParam(
ExecuteStoredProcedure.DataType.VarChar, "UiSource", ui_source.value
)
]
if group_id:
sql_parameters.append(
ExecuteStoredProcedure.SqlParam(
ExecuteStoredProcedure.DataType.Int, "GroupId", group_id
)
)
return await self.call_hq(
"sdk_GetPasswordPolicyWithZones",
ExecuteStoredProcedure.SqlParameters(sql_parameters),
)