diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/object.ex | 9 | ||||
-rw-r--r-- | lib/pleroma/user.ex | 14 |
2 files changed, 22 insertions, 1 deletions
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 949ccb0f6..715a35591 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -1,7 +1,7 @@ defmodule Pleroma.Object do use Ecto.Schema alias Pleroma.{Repo, Object} - import Ecto.Query + import Ecto.{Query, Changeset} schema "objects" do field :data, :map @@ -9,6 +9,13 @@ defmodule Pleroma.Object do timestamps() end + def change(struct, params \\ %{}) do + changeset = struct + |> cast(params, [:data]) + |> validate_required([:data]) + |> unique_constraint(:ap_id, name: :objects_unique_apid_index) + end + def get_by_ap_id(ap_id) do Repo.one(from object in Object, where: fragment("? @> ?", object.data, ^%{id: ap_id})) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 4510be770..9b2433674 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -61,6 +61,17 @@ defmodule Pleroma.User do } end + @email_regex ~r/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ + def remote_user_creation(params) do + changeset = %User{} + |> cast(params, [:bio, :name, :ap_id, :nickname, :info]) + |> validate_required([:bio, :name, :ap_id, :nickname]) + |> unique_constraint(:nickname) + |> validate_format(:nickname, @email_regex) + |> validate_length(:bio, max: 1000) + |> validate_length(:name, max: 100) + end + def register_changeset(struct, params \\ %{}) do changeset = struct |> cast(params, [:bio, :email, :name, :nickname, :password, :password_confirmation]) @@ -69,6 +80,9 @@ defmodule Pleroma.User do |> unique_constraint(:email) |> unique_constraint(:nickname) |> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/) + |> validate_format(:email, @email_regex) + |> validate_length(:bio, max: 1000) + |> validate_length(:name, max: 100) if changeset.valid? do hashed = Pbkdf2.hashpwsalt(changeset.changes[:password]) |