llarp/service/auth.hpp

Namespaces

Name
llarp
[crypto.hpp]
llarp::service

Classes

Name
struct llarp::service::AuthResult
auth result object with code and reason
struct llarp::service::IAuthPolicy
struct llarp::service::AuthInfo
info needed by clients in order to authenticate to a remote endpoint

Source code

#pragma once
#include <optional>
#include <string>
#include <functional>
#include "address.hpp"
#include "handler.hpp"
#include <llarp/crypto/types.hpp>

namespace llarp::service
{
  enum class AuthResultCode : uint64_t
  {
    eAuthAccepted = 0,
    eAuthRejected = 1,
    eAuthFailed = 2,
    eAuthRateLimit = 3,
    eAuthPaymentRequired = 4
  };

  uint64_t
  AuthResultCodeAsInt(AuthResultCode code);

  std::optional<AuthResultCode>
  AuthResultCodeFromInt(uint64_t code);

  struct AuthResult
  {
    AuthResultCode code;
    std::string reason;
  };

  std::optional<AuthResultCode>
  ParseAuthResultCode(std::string data);

  struct IAuthPolicy
  {
    virtual ~IAuthPolicy() = default;

    virtual void
    AuthenticateAsync(
        std::shared_ptr<ProtocolMessage> msg, std::function<void(AuthResult)> hook) = 0;

    virtual bool
    AsyncAuthPending(ConvoTag tag) const = 0;
  };

  struct AuthInfo
  {
    std::string token;
  };

  enum class AuthType
  {
    eAuthTypeNone,
    eAuthTypeWhitelist,
    eAuthTypeLMQ,
    eAuthTypeFile,
  };

  enum class AuthFileType
  {
    eAuthFilePlain,
    eAuthFileHashes,
  };

  AuthType
  ParseAuthType(std::string arg);

  AuthFileType
  ParseAuthFileType(std::string arg);

  std::shared_ptr<IAuthPolicy>
  MakeFileAuthPolicy(AbstractRouter*, std::set<fs::path> files, AuthFileType fileType);

}  // namespace llarp::service

Updated on 2026-01-10 at 22:49:45 +0000