pleroma/lib/pleroma/user/info.ex

266 lines
6.6 KiB
Elixir
Raw Normal View History

# Pleroma: A lightweight social networking server
2018-12-31 16:41:47 +01:00
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.User.Info do
use Ecto.Schema
import Ecto.Changeset
embedded_schema do
2018-11-18 18:27:04 +01:00
field(:banner, :map, default: %{})
2018-12-02 11:20:38 +01:00
field(:background, :map, default: %{})
2018-11-18 18:27:04 +01:00
field(:source_data, :map, default: %{})
field(:note_count, :integer, default: 0)
field(:follower_count, :integer, default: 0)
field(:locked, :boolean, default: false)
field(:confirmation_pending, :boolean, default: false)
field(:confirmation_token, :string, default: nil)
2018-11-18 18:27:04 +01:00
field(:default_scope, :string, default: "public")
field(:blocks, {:array, :string}, default: [])
field(:domain_blocks, {:array, :string}, default: [])
field(:mutes, {:array, :string}, default: [])
2018-11-18 18:27:04 +01:00
field(:deactivated, :boolean, default: false)
field(:no_rich_text, :boolean, default: false)
field(:ap_enabled, :boolean, default: false)
field(:is_moderator, :boolean, default: false)
2018-12-01 09:03:16 +01:00
field(:is_admin, :boolean, default: false)
field(:show_role, :boolean, default: true)
2018-11-18 19:33:43 +01:00
field(:keys, :string, default: nil)
2018-11-20 20:12:39 +01:00
field(:settings, :map, default: nil)
2018-11-27 18:12:03 +01:00
field(:magic_key, :string, default: nil)
2018-11-27 18:37:46 +01:00
field(:uri, :string, default: nil)
2018-11-30 17:08:02 +01:00
field(:topic, :string, default: nil)
field(:hub, :string, default: nil)
2018-12-01 12:46:08 +01:00
field(:salmon, :string, default: nil)
Refactor pinned posts to use objects instead of activities. Despacito lyrics in the description don't open Ay Fonsi DY Oh Oh no, oh no Oh yeah Diridiri, dirididi Daddy Go Sí, sabes que ya llevo un rato mirándote Tengo que bailar contigo hoy (DY) Vi que tu mirada ya estaba llamándome Muéstrame el camino que yo voy (Oh) Tú, tú eres el imán y yo soy el metal Me voy acercando y voy armando el plan Solo con pensarlo se acelera el pulso (Oh yeah) Ya, ya me está gustando más de lo normal Todos mis sentidos van pidiendo más Esto hay que tomarlo sin ningún apuro Despacito Quiero respirar tu cuello despacito Deja que te diga cosas al oído Para que te acuerdes si no estás conmigo Despacito Quiero desnudarte a besos despacito Firmo en las paredes de tu laberinto Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube) (Sube, sube) Quiero ver bailar tu pelo Quiero ser tu ritmo Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Déjame sobrepasar tus zonas de peligro Hasta provocar tus gritos Y que olvides tu apellido (Diridiri, dirididi Daddy) Si te pido un beso ven dámelo Yo sé que estás pensándolo Llevo tiempo intentándolo Mami, esto es dando y dándolo Sabes que tu corazón conmigo te hace bom, bom Sabes que esa beba está buscando de mi bom, bom Ven prueba de mi boca para ver cómo te sabe Quiero, quiero, quiero ver cuánto amor a ti te cabe Yo no tengo prisa, yo me quiero dar el viaje Empecemos lento, después salvaje Pasito a pasito, suave suavecito Nos vamos pegando poquito a poquito Cuando tú me besas con esa destreza Veo que eres malicia con delicadeza Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Y es que esa belleza es un rompecabezas Pero pa montarlo aquí tengo la pieza Despacito Quiero respirar tu cuello despacito Deja que te diga cosas al oído Para que te acuerdes si no estás conmigo Despacito Quiero desnudarte a besos despacito Firmo en las paredes de tu laberinto Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube) (Sube, sube) Quiero ver bailar tu pelo Quiero ser tu ritmo Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Déjame sobrepasar tus zonas de peligro Hasta provocar tus gritos Y que olvides tu apellido Despacito Vamos a hacerlo en una playa en Puerto Rico Hasta que las olas griten "¡ay, bendito!" Para que mi sello se quede contigo Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Hasta provocar tus gritos Y que olvides tu apellido (DY) Despacito
2019-01-26 16:29:43 +01:00
field(:pinned_objects, {:array, :string}, default: [])
field(:hide_followers, :boolean, default: false)
field(:hide_follows, :boolean, default: false)
2019-01-16 16:15:46 +01:00
field(:pinned_activities, {:array, :string}, default: [])
field(:flavour, :string, default: nil)
# Found in the wild
# ap_id -> Where is this used?
# bio -> Where is this used?
# avatar -> Where is this used?
# fqn -> Where is this used?
# host -> Where is this used?
# subject _> Where is this used?
end
def set_activation_status(info, deactivated) do
params = %{deactivated: deactivated}
info
|> cast(params, [:deactivated])
|> validate_required([:deactivated])
end
2018-11-18 18:17:56 +01:00
def add_to_note_count(info, number) do
2018-11-18 18:52:21 +01:00
set_note_count(info, info.note_count + number)
end
def set_note_count(info, number) do
2018-11-18 18:27:04 +01:00
params = %{note_count: Enum.max([0, number])}
2018-11-18 18:17:56 +01:00
info
|> cast(params, [:note_count])
|> validate_required([:note_count])
end
2018-11-18 18:24:16 +01:00
def set_follower_count(info, number) do
params = %{follower_count: Enum.max([0, number])}
info
|> cast(params, [:follower_count])
|> validate_required([:follower_count])
end
2018-11-18 18:40:31 +01:00
def set_mutes(info, mutes) do
params = %{mutes: mutes}
info
|> cast(params, [:mutes])
|> validate_required([:mutes])
end
2018-11-18 18:40:31 +01:00
def set_blocks(info, blocks) do
params = %{blocks: blocks}
info
|> cast(params, [:blocks])
|> validate_required([:blocks])
end
def add_to_mutes(info, muted) do
set_mutes(info, Enum.uniq([muted | info.mutes]))
end
def remove_from_mutes(info, muted) do
set_mutes(info, List.delete(info.mutes, muted))
end
2018-11-18 18:40:31 +01:00
def add_to_block(info, blocked) do
set_blocks(info, Enum.uniq([blocked | info.blocks]))
end
def remove_from_block(info, blocked) do
set_blocks(info, List.delete(info.blocks, blocked))
end
2018-11-18 19:33:43 +01:00
2018-11-18 21:40:52 +01:00
def set_domain_blocks(info, domain_blocks) do
params = %{domain_blocks: domain_blocks}
info
|> cast(params, [:domain_blocks])
|> validate_required([:domain_blocks])
end
def add_to_domain_block(info, domain_blocked) do
set_domain_blocks(info, Enum.uniq([domain_blocked | info.domain_blocks]))
end
def remove_from_domain_block(info, domain_blocked) do
set_domain_blocks(info, List.delete(info.domain_blocks, domain_blocked))
end
2018-11-18 19:33:43 +01:00
def set_keys(info, keys) do
params = %{keys: keys}
info
|> cast(params, [:keys])
|> validate_required([:keys])
end
2018-11-18 21:40:52 +01:00
def remote_user_creation(info, params) do
info
2018-11-20 19:07:01 +01:00
|> cast(params, [
:ap_enabled,
:source_data,
:banner,
2018-11-27 18:12:03 +01:00
:locked,
2018-11-27 18:37:46 +01:00
:magic_key,
2018-11-30 17:08:02 +01:00
:uri,
:hub,
2018-12-01 12:46:08 +01:00
:topic,
2019-02-14 08:10:27 +01:00
:salmon,
:pinned_objects
2018-11-20 19:07:01 +01:00
])
2018-11-18 21:40:52 +01:00
end
2018-11-18 22:15:03 +01:00
2018-11-27 17:42:45 +01:00
def user_upgrade(info, params) do
info
|> cast(params, [
:ap_enabled,
:source_data,
:banner,
2018-11-27 18:12:03 +01:00
:locked,
2019-02-14 08:10:27 +01:00
:magic_key,
:pinned_objects
2018-11-27 17:42:45 +01:00
])
end
2019-02-14 08:10:27 +01:00
def user_update(info, params) do
info
|> cast(params, [:pinned_objects])
end
2018-11-30 17:07:37 +01:00
def profile_update(info, params) do
info
|> cast(params, [
:locked,
:no_rich_text,
:default_scope,
2018-12-05 19:22:40 +01:00
:banner,
:hide_follows,
:hide_followers,
:background,
:show_role
2018-11-30 17:07:37 +01:00
])
end
def confirmation_changeset(info, :confirmed) do
confirmation_changeset(info, %{
confirmation_pending: false,
confirmation_token: nil
})
end
def confirmation_changeset(info, :unconfirmed) do
confirmation_changeset(info, %{
confirmation_pending: true,
confirmation_token: :crypto.strong_rand_bytes(32) |> Base.url_encode64()
})
end
def confirmation_changeset(info, params) do
cast(info, params, [:confirmation_pending, :confirmation_token])
end
2018-12-01 10:40:01 +01:00
def mastodon_profile_update(info, params) do
info
|> cast(params, [
:locked,
:banner
])
end
def mastodon_settings_update(info, settings) do
params = %{settings: settings}
2018-12-06 15:42:07 +01:00
info
|> cast(params, [:settings])
|> validate_required([:settings])
2018-12-06 15:42:07 +01:00
end
def mastodon_flavour_update(info, flavour) do
params = %{flavour: flavour}
info
|> cast(params, [:flavour])
|> validate_required([:flavour])
end
2018-11-20 20:12:39 +01:00
def set_source_data(info, source_data) do
params = %{source_data: source_data}
2018-11-18 22:15:03 +01:00
info
2018-11-20 20:12:39 +01:00
|> cast(params, [:source_data])
|> validate_required([:source_data])
2018-11-18 22:15:03 +01:00
end
2018-12-01 09:03:16 +01:00
def admin_api_update(info, params) do
info
|> cast(params, [
:is_moderator,
:is_admin,
:show_role
2018-12-01 09:03:16 +01:00
])
end
2019-01-07 14:45:33 +01:00
def add_pinned_object(info, %Pleroma.Object{data: %{"id" => ap_id}}, local \\ true) do
Refactor pinned posts to use objects instead of activities. Despacito lyrics in the description don't open Ay Fonsi DY Oh Oh no, oh no Oh yeah Diridiri, dirididi Daddy Go Sí, sabes que ya llevo un rato mirándote Tengo que bailar contigo hoy (DY) Vi que tu mirada ya estaba llamándome Muéstrame el camino que yo voy (Oh) Tú, tú eres el imán y yo soy el metal Me voy acercando y voy armando el plan Solo con pensarlo se acelera el pulso (Oh yeah) Ya, ya me está gustando más de lo normal Todos mis sentidos van pidiendo más Esto hay que tomarlo sin ningún apuro Despacito Quiero respirar tu cuello despacito Deja que te diga cosas al oído Para que te acuerdes si no estás conmigo Despacito Quiero desnudarte a besos despacito Firmo en las paredes de tu laberinto Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube) (Sube, sube) Quiero ver bailar tu pelo Quiero ser tu ritmo Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Déjame sobrepasar tus zonas de peligro Hasta provocar tus gritos Y que olvides tu apellido (Diridiri, dirididi Daddy) Si te pido un beso ven dámelo Yo sé que estás pensándolo Llevo tiempo intentándolo Mami, esto es dando y dándolo Sabes que tu corazón conmigo te hace bom, bom Sabes que esa beba está buscando de mi bom, bom Ven prueba de mi boca para ver cómo te sabe Quiero, quiero, quiero ver cuánto amor a ti te cabe Yo no tengo prisa, yo me quiero dar el viaje Empecemos lento, después salvaje Pasito a pasito, suave suavecito Nos vamos pegando poquito a poquito Cuando tú me besas con esa destreza Veo que eres malicia con delicadeza Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Y es que esa belleza es un rompecabezas Pero pa montarlo aquí tengo la pieza Despacito Quiero respirar tu cuello despacito Deja que te diga cosas al oído Para que te acuerdes si no estás conmigo Despacito Quiero desnudarte a besos despacito Firmo en las paredes de tu laberinto Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube) (Sube, sube) Quiero ver bailar tu pelo Quiero ser tu ritmo Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Déjame sobrepasar tus zonas de peligro Hasta provocar tus gritos Y que olvides tu apellido Despacito Vamos a hacerlo en una playa en Puerto Rico Hasta que las olas griten "¡ay, bendito!" Para que mi sello se quede contigo Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Hasta provocar tus gritos Y que olvides tu apellido (DY) Despacito
2019-01-26 16:29:43 +01:00
if ap_id not in info.pinned_objects do
2019-01-08 09:25:50 +01:00
max_pinned_statuses = Pleroma.Config.get([:instance, :max_pinned_statuses], 0)
Refactor pinned posts to use objects instead of activities. Despacito lyrics in the description don't open Ay Fonsi DY Oh Oh no, oh no Oh yeah Diridiri, dirididi Daddy Go Sí, sabes que ya llevo un rato mirándote Tengo que bailar contigo hoy (DY) Vi que tu mirada ya estaba llamándome Muéstrame el camino que yo voy (Oh) Tú, tú eres el imán y yo soy el metal Me voy acercando y voy armando el plan Solo con pensarlo se acelera el pulso (Oh yeah) Ya, ya me está gustando más de lo normal Todos mis sentidos van pidiendo más Esto hay que tomarlo sin ningún apuro Despacito Quiero respirar tu cuello despacito Deja que te diga cosas al oído Para que te acuerdes si no estás conmigo Despacito Quiero desnudarte a besos despacito Firmo en las paredes de tu laberinto Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube) (Sube, sube) Quiero ver bailar tu pelo Quiero ser tu ritmo Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Déjame sobrepasar tus zonas de peligro Hasta provocar tus gritos Y que olvides tu apellido (Diridiri, dirididi Daddy) Si te pido un beso ven dámelo Yo sé que estás pensándolo Llevo tiempo intentándolo Mami, esto es dando y dándolo Sabes que tu corazón conmigo te hace bom, bom Sabes que esa beba está buscando de mi bom, bom Ven prueba de mi boca para ver cómo te sabe Quiero, quiero, quiero ver cuánto amor a ti te cabe Yo no tengo prisa, yo me quiero dar el viaje Empecemos lento, después salvaje Pasito a pasito, suave suavecito Nos vamos pegando poquito a poquito Cuando tú me besas con esa destreza Veo que eres malicia con delicadeza Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Y es que esa belleza es un rompecabezas Pero pa montarlo aquí tengo la pieza Despacito Quiero respirar tu cuello despacito Deja que te diga cosas al oído Para que te acuerdes si no estás conmigo Despacito Quiero desnudarte a besos despacito Firmo en las paredes de tu laberinto Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube) (Sube, sube) Quiero ver bailar tu pelo Quiero ser tu ritmo Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Déjame sobrepasar tus zonas de peligro Hasta provocar tus gritos Y que olvides tu apellido Despacito Vamos a hacerlo en una playa en Puerto Rico Hasta que las olas griten "¡ay, bendito!" Para que mi sello se quede contigo Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Hasta provocar tus gritos Y que olvides tu apellido (DY) Despacito
2019-01-26 16:29:43 +01:00
params = %{pinned_objects: [ap_id | info.pinned_objects]}
2019-01-07 14:45:33 +01:00
if local do
info
|> cast(params, [:pinned_objects])
|> validate_length(:pinned_objects,
max: max_pinned_statuses,
message: "You have already pinned the maximum number of statuses"
)
else
info
|> cast(params, [:pinned_objects])
end
2019-01-07 14:45:33 +01:00
else
change(info)
end
end
Refactor pinned posts to use objects instead of activities. Despacito lyrics in the description don't open Ay Fonsi DY Oh Oh no, oh no Oh yeah Diridiri, dirididi Daddy Go Sí, sabes que ya llevo un rato mirándote Tengo que bailar contigo hoy (DY) Vi que tu mirada ya estaba llamándome Muéstrame el camino que yo voy (Oh) Tú, tú eres el imán y yo soy el metal Me voy acercando y voy armando el plan Solo con pensarlo se acelera el pulso (Oh yeah) Ya, ya me está gustando más de lo normal Todos mis sentidos van pidiendo más Esto hay que tomarlo sin ningún apuro Despacito Quiero respirar tu cuello despacito Deja que te diga cosas al oído Para que te acuerdes si no estás conmigo Despacito Quiero desnudarte a besos despacito Firmo en las paredes de tu laberinto Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube) (Sube, sube) Quiero ver bailar tu pelo Quiero ser tu ritmo Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Déjame sobrepasar tus zonas de peligro Hasta provocar tus gritos Y que olvides tu apellido (Diridiri, dirididi Daddy) Si te pido un beso ven dámelo Yo sé que estás pensándolo Llevo tiempo intentándolo Mami, esto es dando y dándolo Sabes que tu corazón conmigo te hace bom, bom Sabes que esa beba está buscando de mi bom, bom Ven prueba de mi boca para ver cómo te sabe Quiero, quiero, quiero ver cuánto amor a ti te cabe Yo no tengo prisa, yo me quiero dar el viaje Empecemos lento, después salvaje Pasito a pasito, suave suavecito Nos vamos pegando poquito a poquito Cuando tú me besas con esa destreza Veo que eres malicia con delicadeza Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Y es que esa belleza es un rompecabezas Pero pa montarlo aquí tengo la pieza Despacito Quiero respirar tu cuello despacito Deja que te diga cosas al oído Para que te acuerdes si no estás conmigo Despacito Quiero desnudarte a besos despacito Firmo en las paredes de tu laberinto Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube) (Sube, sube) Quiero ver bailar tu pelo Quiero ser tu ritmo Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Déjame sobrepasar tus zonas de peligro Hasta provocar tus gritos Y que olvides tu apellido Despacito Vamos a hacerlo en una playa en Puerto Rico Hasta que las olas griten "¡ay, bendito!" Para que mi sello se quede contigo Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Hasta provocar tus gritos Y que olvides tu apellido (DY) Despacito
2019-01-26 16:29:43 +01:00
def remove_pinned_object(info, %Pleroma.Object{data: %{"id" => ap_id}}) do
params = %{pinned_objects: List.delete(info.pinned_objects, ap_id)}
cast(info, params, [:pinned_objects])
2019-01-07 14:45:33 +01:00
end
end