defmodule K8s.Conn.Auth.BasicAuth do @moduledoc """ basic auth cluster authentication """ @behaviour K8s.Conn.Auth defstruct [:token] @type t :: %__MODULE__{token: binary} @impl true @spec create(map(), String.t()) :: {:ok, t()} | :skip def create(%{"username" => username, "password" => password}, _) do {:ok, %__MODULE__{token: Base.encode64("#{username}:#{password}")}} end def create(_, _), do: :skip defimpl K8s.Conn.RequestOptions, for: K8s.Conn.Auth.BasicAuth do @doc "Generates HTTP Authorization options for basic auth authentication" @spec generate(K8s.Conn.Auth.BasicAuth.t()) :: K8s.Conn.RequestOptions.generate_t() def generate(%K8s.Conn.Auth.BasicAuth{token: token}) do {:ok, %K8s.Conn.RequestOptions{ headers: [{:Authorization, "Basic #{token}"}], ssl_options: [] }} end end end