grep -rl '# Copyright © .* Pleroma' * | xargs sed -i 's;Copyright © .* Pleroma .*;Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>;'
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
# Pleroma: A lightweight social networking server
 | 
						|
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 | 
						|
# SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
 | 
						|
defmodule Pleroma.Emails.Mailer do
 | 
						|
  @moduledoc """
 | 
						|
  Defines the Pleroma mailer.
 | 
						|
 | 
						|
  The module contains functions to delivery email using Swoosh.Mailer.
 | 
						|
  """
 | 
						|
 | 
						|
  alias Pleroma.Workers.MailerWorker
 | 
						|
  alias Swoosh.DeliveryError
 | 
						|
 | 
						|
  @otp_app :pleroma
 | 
						|
  @mailer_config [otp: :pleroma]
 | 
						|
 | 
						|
  @spec enabled?() :: boolean()
 | 
						|
  def enabled?, do: Pleroma.Config.get([__MODULE__, :enabled])
 | 
						|
 | 
						|
  @doc "add email to queue"
 | 
						|
  def deliver_async(email, config \\ []) do
 | 
						|
    encoded_email =
 | 
						|
      email
 | 
						|
      |> :erlang.term_to_binary()
 | 
						|
      |> Base.encode64()
 | 
						|
 | 
						|
    MailerWorker.enqueue("email", %{"encoded_email" => encoded_email, "config" => config})
 | 
						|
  end
 | 
						|
 | 
						|
  @doc "callback to perform send email from queue"
 | 
						|
  def perform(:deliver_async, email, config), do: deliver(email, config)
 | 
						|
 | 
						|
  @spec deliver(Swoosh.Email.t(), Keyword.t()) :: {:ok, term} | {:error, term}
 | 
						|
  def deliver(email, config \\ [])
 | 
						|
 | 
						|
  def deliver(email, config) do
 | 
						|
    # temporary hackney fix until hackney max_connections bug is fixed
 | 
						|
    # https://git.pleroma.social/pleroma/pleroma/-/issues/2101
 | 
						|
    email =
 | 
						|
      Swoosh.Email.put_private(email, :hackney_options, ssl_options: [versions: [:"tlsv1.2"]])
 | 
						|
 | 
						|
    case enabled?() do
 | 
						|
      true -> Swoosh.Mailer.deliver(email, parse_config(config))
 | 
						|
      false -> {:error, :deliveries_disabled}
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  @spec deliver!(Swoosh.Email.t(), Keyword.t()) :: term | no_return
 | 
						|
  def deliver!(email, config \\ [])
 | 
						|
 | 
						|
  def deliver!(email, config) do
 | 
						|
    case deliver(email, config) do
 | 
						|
      {:ok, result} -> result
 | 
						|
      {:error, reason} -> raise DeliveryError, reason: reason
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  @on_load :validate_dependency
 | 
						|
 | 
						|
  @doc false
 | 
						|
  def validate_dependency do
 | 
						|
    parse_config([])
 | 
						|
    |> Keyword.get(:adapter)
 | 
						|
    |> Swoosh.Mailer.validate_dependency()
 | 
						|
  end
 | 
						|
 | 
						|
  defp parse_config(config) do
 | 
						|
    Swoosh.Mailer.parse_config(@otp_app, __MODULE__, @mailer_config, config)
 | 
						|
  end
 | 
						|
end
 |