Ctrl K
ComunidadGuías…

Ferrite.Data/Repositories/PhoneCodeRepository.cs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (C) 2022-2026 Aykut Alparslan KOC

using System.Text;
using Ferrite.TL;
using Ferrite.TL.baseLayer.dto;

namespace Ferrite.Data.Repositories;

public class PhoneCodeRepository : IPhoneCodeRepository
{
    private readonly IVolatileKVStore _store;
    public PhoneCodeRepository(IVolatileKVStore store)
    {
        _store = store;
        store.SetSchema(new TableDefinition("ferrite", "phone_codes_tl1",
            new KeyDefinition("pk",
                new DataColumn { Name = "phone_number", Type = DataType.String },
                new DataColumn { Name = "phone_code_hash", Type = DataType.String })));
    }
    public void PutPhoneCode(string phoneNumber, string phoneCodeHash, string phoneCode, TimeSpan expiresIn)
    {
        using var row = PhoneCode.Builder().Code(Encoding.UTF8.GetBytes(phoneCode)).Build();
        _store.Put(row.ToReadOnlySpan().ToArray(), expiresIn, phoneNumber, phoneCodeHash);
    }

    public string? GetPhoneCode(string phoneNumber, string phoneCodeHash)
    {
        var bytes = _store.Get(phoneNumber, phoneCodeHash);
        if (bytes is { Length: > 0 })
        {
            var value = new TLBytes(bytes, 0, bytes.Length);
            if (value.Constructor != Constructors.baseLayer_PhoneCode)
                throw new InvalidDataException("Phone-code codec/version mismatch.");
            return Encoding.UTF8.GetString(((TLPhoneCode)value).AsPhoneCode().Code);
        }

        return null;
    }

    public bool DeletePhoneCode(string phoneNumber, string phoneCodeHash)
    {
        _store.Delete(phoneNumber, phoneCodeHash);
        return true;
    }
}