Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
347df642
Commit
347df642
authored
Dec 01, 2018
by
lain
Browse files
Fix masto api user updating.
parent
c443c9bd
Pipeline
#4805
passed with stages
in 2 minutes and 27 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/user.ex
View file @
347df642
...
...
@@ -112,10 +112,9 @@ def remote_user_creation(params) do
end
end
# TODO: Check if this still used
def
update_changeset
(
struct
,
params
\\
%{})
do
struct
|>
cast
(
params
,
[
:bio
,
:name
])
|>
cast
(
params
,
[
:bio
,
:name
,
:avatar
])
|>
unique_constraint
(
:nickname
)
|>
validate_format
(
:nickname
,
~r/^[a-zA-Z\d]+$/
)
|>
validate_length
(
:bio
,
max:
5000
)
...
...
lib/pleroma/user/info.ex
View file @
347df642
...
...
@@ -128,6 +128,14 @@ def profile_update(info, params) do
])
end
def
mastodon_profile_update
(
info
,
params
)
do
info
|>
cast
(
params
,
[
:locked
,
:banner
])
end
def
set_source_data
(
info
,
source_data
)
do
params
=
%{
source_data:
source_data
}
...
...
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
View file @
347df642
...
...
@@ -32,67 +32,55 @@ def create_app(conn, params) do
end
end
defp
add_if_present
(
map
,
params
,
params_field
,
map_field
,
value_function
\\
fn
x
->
{
:ok
,
x
}
end
)
do
if
Map
.
has_key?
(
params
,
params_field
)
do
case
value_function
.
(
params
[
params_field
])
do
{
:ok
,
new_value
}
->
Map
.
put
(
map
,
map_field
,
new_value
)
:error
->
map
end
else
map
end
end
def
update_credentials
(%{
assigns:
%{
user:
user
}}
=
conn
,
params
)
do
original_user
=
user
params
=
if
bio
=
params
[
"note"
]
do
Map
.
put
(
params
,
"bio"
,
bio
)
else
params
end
params
=
if
name
=
params
[
"display_name"
]
do
Map
.
put
(
params
,
"name"
,
name
)
else
params
end
user_params
=
%{}
|>
add_if_present
(
params
,
"display_name"
,
:name
)
|>
add_if_present
(
params
,
"note"
,
:bio
)
|>
add_if_present
(
params
,
"avatar"
,
:avatar
,
fn
value
->
with
%
Plug
.
Upload
{}
<-
value
,
{
:ok
,
object
}
<-
ActivityPub
.
upload
(
value
,
type:
:avatar
)
do
{
:ok
,
object
.
data
}
else
_
->
:error
end
end
)
user
=
if
avatar
=
params
[
"avatar"
]
do
with
%
Plug
.
Upload
{}
<-
avatar
,
{
:ok
,
object
}
<-
ActivityPub
.
upload
(
avatar
,
type:
:avatar
),
change
=
Ecto
.
Changeset
.
change
(
user
,
%{
avatar:
object
.
data
})
,
{
:ok
,
user
}
=
User
.
update_and_set_cache
(
change
)
do
user
info_params
=
%{}
|>
add_if_present
(
params
,
"locked"
,
:locked
,
fn
value
->
{
:ok
,
value
==
"true"
}
end
)
|>
add_if_present
(
params
,
"header"
,
:banner
,
fn
value
->
with
%
Plug
.
Upload
{}
<-
value
,
{
:ok
,
object
}
<-
ActivityPub
.
upload
(
value
,
type:
:banner
)
do
{
:ok
,
object
.
data
}
else
_
e
->
use
r
_
->
:erro
r
end
e
lse
user
end
e
nd
)
info_cng
=
User
.
Info
.
mastodon_profile_update
(
user
.
info
,
info_params
)
# user =
# if banner = params["header"] do
# with %Plug.Upload{} <- banner,
# {:ok, object} <- ActivityPub.upload(banner, type: :banner),
# new_info <- Map.put(user.info, "banner", object.data),
# change <- User.info_changeset(user, %{info: new_info}),
# {:ok, user} <- User.update_and_set_cache(change) do
# user
# else
# _e -> user
# end
# else
# user
# end
# user =
# if locked = params["locked"] do
# with locked <- locked == "true",
# new_info <- Map.put(user.info, "locked", locked),
# change <- User.info_changeset(user, %{info: new_info}),
# {:ok, user} <- User.update_and_set_cache(change) do
# user
# else
# _e -> user
# end
# else
# user
# end
with
changeset
<-
User
.
update_changeset
(
user
,
params
),
with
changeset
<-
User
.
update_changeset
(
user
,
user_params
),
changeset
<-
Ecto
.
Changeset
.
put_embed
(
changeset
,
:info
,
info_cng
),
{
:ok
,
user
}
<-
User
.
update_and_set_cache
(
changeset
)
do
if
original_user
!=
user
do
CommonAPI
.
update
(
user
)
...
...
test/web/mastodon_api/mastodon_api_controller_test.exs
View file @
347df642
...
...
@@ -1263,6 +1263,18 @@ test "updates the user's bio", %{conn: conn} do
assert
user
[
"note"
]
==
"I drink #cofe"
end
test
"updates the user's locking status"
,
%{
conn:
conn
}
do
user
=
insert
(
:user
)
conn
=
conn
|>
assign
(
:user
,
user
)
|>
patch
(
"/api/v1/accounts/update_credentials"
,
%{
locked:
"true"
})
assert
user
=
json_response
(
conn
,
200
)
assert
user
[
"locked"
]
==
true
end
test
"updates the user's name"
,
%{
conn:
conn
}
do
user
=
insert
(
:user
)
...
...
@@ -1289,8 +1301,8 @@ test "updates the user's avatar", %{conn: conn} do
|>
assign
(
:user
,
user
)
|>
patch
(
"/api/v1/accounts/update_credentials"
,
%{
"avatar"
=>
new_avatar
})
assert
user
=
json_response
(
conn
,
200
)
assert
user
[
"avatar"
]
!=
"https://placehold.it/48x48"
assert
user
_response
=
json_response
(
conn
,
200
)
assert
user
_response
[
"avatar"
]
!=
User
.
avatar_url
(
user
)
end
test
"updates the user's banner"
,
%{
conn:
conn
}
do
...
...
@@ -1307,8 +1319,8 @@ test "updates the user's banner", %{conn: conn} do
|>
assign
(
:user
,
user
)
|>
patch
(
"/api/v1/accounts/update_credentials"
,
%{
"header"
=>
new_header
})
assert
user
=
json_response
(
conn
,
200
)
assert
user
[
"header"
]
!=
"https://placehold.it/700x335"
assert
user
_response
=
json_response
(
conn
,
200
)
assert
user
_response
[
"header"
]
!=
User
.
banner_url
(
user
)
end
end
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment