forked from AkkomaGang/akkoma
57 lines
1.5 KiB
Elixir
57 lines
1.5 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
defmodule Pleroma.Registration do
|
|
use Ecto.Schema
|
|
|
|
import Ecto.Changeset
|
|
|
|
alias Pleroma.Registration
|
|
alias Pleroma.Repo
|
|
alias Pleroma.User
|
|
|
|
@primary_key {:id, FlakeId.Ecto.CompatType, autogenerate: true}
|
|
|
|
schema "registrations" do
|
|
belongs_to(:user, User, type: FlakeId.Ecto.CompatType)
|
|
field(:provider, :string)
|
|
field(:uid, :string)
|
|
field(:info, :map, default: %{})
|
|
|
|
timestamps()
|
|
end
|
|
|
|
def nickname(registration, default \\ nil),
|
|
do: Map.get(registration.info, "nickname", default)
|
|
|
|
def email(registration, default \\ nil),
|
|
do: Map.get(registration.info, "email", default)
|
|
|
|
def name(registration, default \\ nil),
|
|
do: Map.get(registration.info, "name", default)
|
|
|
|
def description(registration, default \\ nil),
|
|
do: Map.get(registration.info, "description", default)
|
|
|
|
def changeset(registration, params \\ %{}) do
|
|
registration
|
|
|> cast(params, [:user_id, :provider, :uid, :info])
|
|
|> validate_required([:provider, :uid])
|
|
|> foreign_key_constraint(:user_id)
|
|
|> unique_constraint(:uid, name: :registrations_provider_uid_index)
|
|
end
|
|
|
|
def bind_to_user(registration, user) do
|
|
registration
|
|
|> changeset(%{user_id: (user && user.id) || nil})
|
|
|> Repo.update()
|
|
end
|
|
|
|
def get_by_provider_uid(provider, uid) do
|
|
Repo.get_by(Registration,
|
|
provider: to_string(provider),
|
|
uid: to_string(uid)
|
|
)
|
|
end
|
|
end
|