user: remote actors can have no nickname if they are virtual services
authorWilliam Pitcock <nenolod@dereferenced.org>
Mon, 6 Aug 2018 06:50:18 +0000 (06:50 +0000)
committerWilliam Pitcock <nenolod@dereferenced.org>
Mon, 6 Aug 2018 08:22:11 +0000 (08:22 +0000)
lib/pleroma/user.ex
lib/pleroma/web/activity_pub/activity_pub.ex

index 640c34aec5c347606fa4588099856ce9c4abb555..82a2a78331747153c55aa530b0536adbc5d7f067 100644 (file)
@@ -77,7 +77,7 @@ defmodule Pleroma.User do
     changes =
       %User{}
       |> cast(params, [:bio, :name, :ap_id, :nickname, :info, :avatar])
-      |> validate_required([:name, :ap_id, :nickname])
+      |> validate_required([:name, :ap_id])
       |> unique_constraint(:nickname)
       |> validate_format(:nickname, @email_regex)
       |> validate_length(:bio, max: 5000)
index ec605b694f49557b0f7dcfb472618ae98d324439..bab272323f47e749c9b098800e775432c7f541f5 100644 (file)
@@ -554,12 +554,19 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
         "locked" => locked
       },
       avatar: avatar,
-      nickname: "#{data["preferredUsername"]}@#{URI.parse(data["id"]).host}",
       name: data["name"],
       follower_address: data["followers"],
       bio: data["summary"]
     }
 
+    # nickname can be nil because of virtual actors
+    user_data =
+      if data["preferredUsername"] do
+        Map.put(user_data, :nickname, "#{data["preferredUsername"]}@#{URI.parse(data["id"]).host}")
+      else
+        Map.put(user_data, :nickname, nil)
+      end
+
     {:ok, user_data}
   end