Skip to content
GitLab
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
4df455f6
Verified
Commit
4df455f6
authored
Feb 03, 2019
by
Haelwenn
Browse files
[MastoAPI] Add switching of frontend flavours
parent
3b141194
Changes
5
Hide whitespace changes
Inline
Side-by-side
docs/Pleroma-API.md
View file @
4df455f6
...
...
@@ -94,3 +94,17 @@ Request parameters can be passed via [query strings](https://en.wikipedia.org/wi
## `/api/pleroma/admin/`…
See
[
Admin-API
](
Admin-API.md
)
## `/api/v1/pleroma/flavour/:flavour`
*
Method
`POST`
*
Authentication: required
*
Response: JSON string. Returns the user flavour or the default one on success, otherwise returns
`{"error": "error_msg"}`
*
Example response: "glitch"
*
Note: This is intended to be used only by mastofe
## `/api/v1/pleroma/flavour`
*
Method
`GET`
*
Authentication: required
*
Response: JSON string. Returns the user flavour or the default one.
*
Example response: "glitch"
*
Note: This is intended to be used only by mastofe
lib/pleroma/user/info.ex
View file @
4df455f6
...
...
@@ -34,6 +34,7 @@ defmodule Pleroma.User.Info do
field
(
:hide_followers
,
:boolean
,
default:
false
)
field
(
:hide_follows
,
:boolean
,
default:
false
)
field
(
:pinned_activities
,
{
:array
,
:string
},
default:
[])
field
(
:flavour
,
:string
,
default:
nil
)
# Found in the wild
# ap_id -> Where is this used?
...
...
@@ -186,6 +187,14 @@ def mastodon_settings_update(info, settings) do
|>
validate_required
([
:settings
])
end
def
mastodon_flavour_update
(
info
,
flavour
)
do
params
=
%{
flavour:
flavour
}
info
|>
cast
(
params
,
[
:flavour
])
|>
validate_required
([
:flavour
])
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 @
4df455f6
...
...
@@ -1051,6 +1051,8 @@ def index(%{assigns: %{user: user}} = conn, _params) do
accounts
=
Map
.
put
(%{},
user
.
id
,
AccountView
.
render
(
"account.json"
,
%{
user:
user
,
for:
user
}))
flavour
=
get_user_flavour
(
user
)
initial_state
=
%{
meta:
%{
...
...
@@ -1135,7 +1137,7 @@ def index(%{assigns: %{user: user}} = conn, _params) do
conn
|>
put_layout
(
false
)
|>
put_view
(
MastodonView
)
|>
render
(
"index.html"
,
%{
initial_state:
initial_state
})
|>
render
(
"index.html"
,
%{
initial_state:
initial_state
,
flavour:
flavour
})
else
conn
|>
redirect
(
to:
"/web/login"
)
...
...
@@ -1157,6 +1159,43 @@ def put_settings(%{assigns: %{user: user}} = conn, %{"data" => settings} = _para
end
end
@supported_flavours
[
"glitch"
,
"vanilla"
]
def
set_flavour
(%{
assigns:
%{
user:
user
}}
=
conn
,
%{
"flavour"
=>
flavour
}
=
_params
)
when
flavour
in
@supported_flavours
do
flavour_cng
=
User
.
Info
.
mastodon_flavour_update
(
user
.
info
,
flavour
)
with
changeset
<-
Ecto
.
Changeset
.
change
(
user
),
changeset
<-
Ecto
.
Changeset
.
put_embed
(
changeset
,
:info
,
flavour_cng
),
{
:ok
,
user
}
<-
User
.
update_and_set_cache
(
changeset
),
flavour
<-
user
.
info
.
flavour
do
json
(
conn
,
flavour
)
else
e
->
conn
|>
put_resp_content_type
(
"application/json"
)
|>
send_resp
(
500
,
Jason
.
encode!
(%{
"error"
=>
inspect
(
e
)}))
end
end
def
set_flavour
(
conn
,
_params
)
do
conn
|>
put_status
(
400
)
|>
json
(%{
error:
"Unsupported flavour"
})
end
def
get_flavour
(%{
assigns:
%{
user:
user
}}
=
conn
,
_params
)
do
json
(
conn
,
get_user_flavour
(
user
))
end
defp
get_user_flavour
(%
User
{
info:
%{
flavour:
flavour
}})
when
flavour
in
@supported_flavours
do
flavour
end
defp
get_user_flavour
(
_
)
do
"glitch"
end
def
login
(
conn
,
%{
"code"
=>
code
})
do
with
{
:ok
,
app
}
<-
get_or_make_app
(),
%
Authorization
{}
=
auth
<-
Repo
.
get_by
(
Authorization
,
token:
code
,
app_id:
app
.
id
),
...
...
lib/pleroma/web/router.ex
View file @
4df455f6
...
...
@@ -236,6 +236,9 @@ defmodule Pleroma.Web.Router do
get
(
"/suggestions"
,
MastodonAPIController
,
:suggestions
)
get
(
"/endorsements"
,
MastodonAPIController
,
:empty_array
)
post
(
"/pleroma/flavour/:flavour"
,
MastodonAPIController
,
:set_flavour
)
get
(
"/pleroma/flavour"
,
MastodonAPIController
,
:get_flavour
)
end
scope
"/api/web"
,
Pleroma
.
Web
.
MastodonAPI
do
...
...
lib/pleroma/web/templates/mastodon_api/mastodon/index.html.eex
View file @
4df455f6
...
...
@@ -8,7 +8,7 @@
</title>
<link
rel=
"icon"
type=
"image/png"
href=
"/favicon.png"
/>
<script
crossorigin=
'anonymous'
src=
"/packs/locales.js"
></script>
<script
crossorigin=
'anonymous'
src=
"/packs/locales/
glitch
/en.js"
></script>
<script
crossorigin=
'anonymous'
src=
"/packs/locales/
<%=
@flavour
%>
/en.js"
></script>
<link
rel=
'preload'
as=
'script'
crossorigin=
'anonymous'
href=
'/packs/features/getting_started.js'
>
<link
rel=
'preload'
as=
'script'
crossorigin=
'anonymous'
href=
'/packs/features/compose.js'
>
...
...
@@ -19,10 +19,10 @@
<script
src=
"/packs/core/common.js"
></script>
<link
rel=
"stylesheet"
media=
"all"
href=
"/packs/core/common.css"
/>
<script
src=
"/packs/flavours/
glitch
/common.js"
></script>
<link
rel=
"stylesheet"
media=
"all"
href=
"/packs/flavours/
glitch
/common.css"
/>
<script
src=
"/packs/flavours/
<%=
@flavour
%>
/common.js"
></script>
<link
rel=
"stylesheet"
media=
"all"
href=
"/packs/flavours/
<%=
@flavour
%>
/common.css"
/>
<script
src=
"/packs/flavours/
glitch
/home.js"
></script>
<script
src=
"/packs/flavours/
<%=
@flavour
%>
/home.js"
></script>
</head>
<body
class=
'app-body no-reduce-motion system-font'
>
<div
class=
'app-holder'
data-props=
'{"locale":"en"}'
id=
'mastodon'
>
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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