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
ce98d5eb
Commit
ce98d5eb
authored
Dec 02, 2018
by
Maxim Filippov
🌚
Browse files
Parse user's bio on register
parent
371d96b1
Changes
5
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/user.ex
View file @
ce98d5eb
...
...
@@ -4,6 +4,8 @@ defmodule Pleroma.User do
import
Ecto
.
{
Changeset
,
Query
}
alias
Pleroma
.
{
Repo
,
User
,
Object
,
Web
,
Activity
,
Notification
}
alias
Comeonin
.
Pbkdf2
alias
Pleroma
.
Formatter
alias
Pleroma
.
Web
.
CommonAPI
.
Utils
,
as:
CommonUtils
alias
Pleroma
.
Web
.
{
OStatus
,
Websub
,
OAuth
}
alias
Pleroma
.
Web
.
ActivityPub
.
{
Utils
,
ActivityPub
}
...
...
@@ -802,4 +804,18 @@ def wait_and_refresh(timeout, %User{} = a, %User{} = b) do
:error
end
end
def
parse_bio
(
bio
,
user
\\
%
User
{
info:
%{
source_data:
%{}}})
do
mentions
=
Formatter
.
parse_mentions
(
bio
)
tags
=
Formatter
.
parse_tags
(
bio
)
emoji
=
(
user
.
info
.
source_data
[
"tag"
]
||
[])
|>
Enum
.
filter
(
fn
%{
"type"
=>
t
}
->
t
==
"Emoji"
end
)
|>
Enum
.
map
(
fn
%{
"icon"
=>
%{
"url"
=>
url
},
"name"
=>
name
}
->
{
String
.
trim
(
name
,
":"
),
url
}
end
)
CommonUtils
.
format_input
(
bio
,
mentions
,
tags
,
"text/plain"
)
|>
Formatter
.
emojify
(
emoji
)
end
end
lib/pleroma/web/twitter_api/twitter_api.ex
View file @
ce98d5eb
...
...
@@ -132,7 +132,7 @@ def register_user(params) do
params
=
%{
nickname:
params
[
"nickname"
],
name:
params
[
"fullname"
],
bio:
params
[
"bio"
],
bio:
User
.
parse_bio
(
params
[
"bio"
]
)
,
email:
params
[
"email"
],
password:
params
[
"password"
],
password_confirmation:
params
[
"confirm"
]
...
...
lib/pleroma/web/twitter_api/twitter_api_controller.ex
View file @
ce98d5eb
...
...
@@ -448,27 +448,16 @@ defp build_info_cng(user, params) do
User
.
Info
.
profile_update
(
user
.
info
,
info_params
)
end
defp
add
_profile_
emoji
(
user
,
params
)
do
defp
parse
_profile_
bio
(
user
,
params
)
do
if
bio
=
params
[
"description"
]
do
mentions
=
Formatter
.
parse_mentions
(
bio
)
tags
=
Formatter
.
parse_tags
(
bio
)
emoji
=
(
user
.
info
.
source_data
[
"tag"
]
||
[])
|>
Enum
.
filter
(
fn
%{
"type"
=>
t
}
->
t
==
"Emoji"
end
)
|>
Enum
.
map
(
fn
%{
"icon"
=>
%{
"url"
=>
url
},
"name"
=>
name
}
->
{
String
.
trim
(
name
,
":"
),
url
}
end
)
bio_html
=
CommonUtils
.
format_input
(
bio
,
mentions
,
tags
,
"text/plain"
)
Map
.
put
(
params
,
"bio"
,
bio_html
|>
Formatter
.
emojify
(
emoji
))
Map
.
put
(
params
,
"bio"
,
User
.
parse_bio
(
bio
,
user
))
else
params
end
end
def
update_profile
(%{
assigns:
%{
user:
user
}}
=
conn
,
params
)
do
params
=
add
_profile_
emoji
(
user
,
params
)
params
=
parse
_profile_
bio
(
user
,
params
)
info_cng
=
build_info_cng
(
user
,
params
)
with
changeset
<-
User
.
update_changeset
(
user
,
params
),
...
...
test/web/twitter_api/twitter_api_controller_test.exs
View file @
ce98d5eb
...
...
@@ -949,18 +949,19 @@ test "it returns a user's friends", %{conn: conn} do
describe
"POST /api/account/update_profile.json"
do
test
"it updates a user's profile"
,
%{
conn:
conn
}
do
user
=
insert
(
:user
)
user2
=
insert
(
:user
)
conn
=
conn
|>
assign
(
:user
,
user
)
|>
post
(
"/api/account/update_profile.json"
,
%{
"name"
=>
"new name"
,
"description"
=>
"
new description
"
"description"
=>
"
hi @
#{
user2
.
nickname
}
"
})
user
=
Repo
.
get!
(
User
,
user
.
id
)
assert
user
.
name
==
"new name"
assert
user
.
bio
==
"
new description
"
assert
user
.
bio
==
"
hi <span><a class='mention' href='
#{
user2
.
ap_id
}
'>@<span>
#{
user2
.
nickname
}
</span></a></span>
"
assert
json_response
(
conn
,
200
)
==
UserView
.
render
(
"user.json"
,
%{
user:
user
,
for:
user
})
end
...
...
test/web/twitter_api/twitter_api_test.exs
View file @
ce98d5eb
...
...
@@ -257,6 +257,34 @@ test "it registers a new user and returns the user." do
UserView
.
render
(
"show.json"
,
%{
user:
fetched_user
})
end
test
"it registers a new user and parses mentions in the bio"
do
data1
=
%{
"nickname"
=>
"john"
,
"email"
=>
"john@gmail.com"
,
"fullname"
=>
"John Doe"
,
"bio"
=>
"test"
,
"password"
=>
"bear"
,
"confirm"
=>
"bear"
}
{
:ok
,
user1
}
=
TwitterAPI
.
register_user
(
data1
)
data2
=
%{
"nickname"
=>
"lain"
,
"email"
=>
"lain@wired.jp"
,
"fullname"
=>
"lain iwakura"
,
"bio"
=>
"@john test"
,
"password"
=>
"bear"
,
"confirm"
=>
"bear"
}
{
:ok
,
user2
}
=
TwitterAPI
.
register_user
(
data2
)
expected_text
=
"<span><a class='mention' href='
#{
user1
.
ap_id
}
'>@<span>john</span></a></span> test"
assert
user2
.
bio
==
expected_text
end
@moduletag
skip:
"needs 'registrations_open: false' in config"
test
"it registers a new user via invite token and returns the user."
do
{
:ok
,
token
}
=
UserInviteToken
.
create_token
()
...
...
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