| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- const FORMAL_AUTH_DATE = '2099-09-09';
- const TRIAL_AUTHORIZATION_TEXT = '试用';
- const FORMAL_AUTHORIZATION_TEXT = '';
- function normalizeDateValue(value: unknown) {
- return String(value ?? '').trim();
- }
- function normalizeFieldKey(value: string) {
- return value.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
- }
- function resolveAuthorizationSource(source?: unknown) {
- const raw = source && typeof source === 'object' ? (source as Record<string, any>) : null;
- const rawData = raw?.data;
- const data = rawData && typeof rawData === 'object' ? (rawData as Record<string, any>) : null;
- return {
- raw,
- rawData,
- data,
- };
- }
- function getAuthorizationField(source: Record<string, any> | null, keys: string[]) {
- if (!source) return '';
- const matchedKey = keys.find((key) => Object.prototype.hasOwnProperty.call(source, key));
- if (matchedKey) {
- return normalizeDateValue(source[matchedKey]);
- }
- const matchedNormalizedKey = Object.keys(source).find((key) =>
- keys.some((item) => normalizeFieldKey(item) === normalizeFieldKey(key)),
- );
- return matchedNormalizedKey ? normalizeDateValue(source[matchedNormalizedKey]) : '';
- }
- function getAuthorizationValue(source: unknown, keys: string[]) {
- const { raw, data } = resolveAuthorizationSource(source);
- return getAuthorizationField(data, keys) || getAuthorizationField(raw, keys);
- }
- function getOverDateTimeValue(source?: unknown) {
- return getAuthorizationValue(source, ['overDateTime', 'overdatetime']);
- }
- function toDateNumber(value: string | undefined, fallback: number) {
- const parsed = Number(value);
- return Number.isFinite(parsed) ? parsed : fallback;
- }
- export function getAuthorizationExpirationTime(overDateTime?: unknown) {
- const normalized = normalizeDateValue(overDateTime);
- if (!normalized || isFormalAuthorization(normalized)) return null;
- const normalizedDate = normalized.replace(/\//g, '-');
- const timezoneMatched = /(?:z|[+-]\d{2}:?\d{2})$/i.test(normalizedDate);
- if (timezoneMatched) {
- const timestamp = new Date(normalizedDate.replace(' ', 'T')).getTime();
- return Number.isFinite(timestamp) ? timestamp : null;
- }
- const matched = normalizedDate.match(/^(\d{4})-(\d{1,2})-(\d{1,2})(?:[ T](\d{1,2}):(\d{1,2})(?::(\d{1,2}))?)?/);
- if (!matched) return null;
- const [, year, month, day, hour, minute, second] = matched;
- const isDateOnly = hour === undefined;
- const date = new Date(
- toDateNumber(year, 0),
- toDateNumber(month, 1) - 1,
- toDateNumber(day, 1),
- isDateOnly ? 23 : toDateNumber(hour, 0),
- isDateOnly ? 59 : toDateNumber(minute, 0),
- isDateOnly ? 59 : toDateNumber(second, 0),
- isDateOnly ? 999 : 0,
- );
- const timestamp = date.getTime();
- return Number.isFinite(timestamp) ? timestamp : null;
- }
- export function isAuthorizationExpired(overDateTime?: unknown, now: Date = new Date()) {
- const expirationTime = getAuthorizationExpirationTime(overDateTime);
- return expirationTime !== null && expirationTime < now.getTime();
- }
- export function getAuthorizationExpiredMessage(overDateTime?: unknown) {
- const normalized = normalizeDateValue(overDateTime);
- return normalized
- ? `当前授权已于 ${normalized} 过期,请重新导入有效授权文件或联系管理员。`
- : '当前授权已过期,请重新导入有效授权文件或联系管理员。';
- }
- export function isFormalAuthorization(overDateTime?: unknown) {
- const normalized = normalizeDateValue(overDateTime);
- return normalized.startsWith(FORMAL_AUTH_DATE);
- }
- export function getAuthorizationStatus(overDateTime?: unknown) {
- return isFormalAuthorization(overDateTime) ? 'formal' : 'trial';
- }
- export function getAuthorizationLabel(overDateTime?: unknown) {
- const normalized = normalizeDateValue(overDateTime);
- if (!normalized) return '';
- return isFormalAuthorization(normalized) ? FORMAL_AUTHORIZATION_TEXT : TRIAL_AUTHORIZATION_TEXT;
- }
- export function isTrialAuthorizationLabel(label?: unknown) {
- return normalizeDateValue(label).includes('试用');
- }
- export function extractAuthorizationCache(source?: unknown) {
- const { rawData, data } = resolveAuthorizationSource(source);
- const overDateTime = getOverDateTimeValue(source);
- const authorizationUnit = getAuthorizationValue(source, ['unit']);
- const authorizationLabel =
- (typeof rawData === 'string' ? normalizeDateValue(rawData) : '') ||
- normalizeDateValue(data?.authorizationLabel || data?.authorizationStatus || data?.authStatus || data?.message) ||
- getAuthorizationLabel(overDateTime);
- return {
- authorizationLabel,
- overDateTime,
- authorizationUnit,
- };
- }
|