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
2437f512
Commit
2437f512
authored
Jun 20, 2019
by
rinpatch
Browse files
Merge branch 'fix/config-gen-releases' into 'develop'
Refactor mix tasks a bit and make config generator work with releases See merge request
!1312
parents
3b48876c
e3e8a7dc
Pipeline
#13596
passed with stages
in 39 minutes and 39 seconds
Changes
11
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
lib/mix/
tasks/
pleroma
/common
.ex
→
lib/mix/pleroma.ex
View file @
2437f512
...
...
@@ -2,7 +2,7 @@
# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule
Mix
.
Tasks
.
Pleroma
.
Common
do
defmodule
Mix
.
Pleroma
do
@doc
"Common functions to be reused in mix tasks"
def
start_pleroma
do
Application
.
put_env
(
:phoenix
,
:serve_endpoints
,
false
,
persistent:
true
)
...
...
@@ -14,7 +14,7 @@ def get_option(options, opt, prompt, defval \\ nil, defname \\ nil) do
end
def
shell_prompt
(
prompt
,
defval
\\
nil
,
defname
\\
nil
)
do
prompt_message
=
"
#{
prompt
}
[
#{
defname
||
defval
}
]"
prompt_message
=
"
#{
prompt
}
[
#{
defname
||
defval
}
]
"
input
=
if
mix_shell?
(),
...
...
lib/mix/tasks/benchmark.ex
→
lib/mix/tasks/
pleroma/
benchmark.ex
View file @
2437f512
defmodule
Mix
.
Tasks
.
Pleroma
.
Benchmark
do
import
Mix
.
Pleroma
use
Mix
.
Task
alias
Mix
.
Tasks
.
Pleroma
.
Common
def
run
([
"search"
])
do
Common
.
start_pleroma
()
start_pleroma
()
Benchee
.
run
(%{
"search"
=>
fn
->
...
...
@@ -13,7 +13,7 @@ def run(["search"]) do
end
def
run
([
"tag"
])
do
Common
.
start_pleroma
()
start_pleroma
()
Benchee
.
run
(%{
"tag"
=>
fn
->
...
...
lib/mix/tasks/pleroma/config.ex
View file @
2437f512
defmodule
Mix
.
Tasks
.
Pleroma
.
Config
do
use
Mix
.
Task
alias
Mix
.
Tasks
.
Pleroma
.
Common
import
Mix
.
Pleroma
alias
Pleroma
.
Repo
alias
Pleroma
.
Web
.
AdminAPI
.
Config
@shortdoc
"Manages the location of the config"
...
...
@@ -17,7 +17,7 @@ defmodule Mix.Tasks.Pleroma.Config do
"""
def
run
([
"migrate_to_db"
])
do
Common
.
start_pleroma
()
start_pleroma
()
if
Pleroma
.
Config
.
get
([
:instance
,
:dynamic_configuration
])
do
Application
.
get_all_env
(
:pleroma
)
...
...
@@ -37,7 +37,7 @@ def run(["migrate_to_db"]) do
end
def
run
([
"migrate_from_db"
,
env
])
do
Common
.
start_pleroma
()
start_pleroma
()
if
Pleroma
.
Config
.
get
([
:instance
,
:dynamic_configuration
])
do
config_path
=
"config/
#{
env
}
.exported_from_db.secret.exs"
...
...
lib/mix/tasks/pleroma/database.ex
View file @
2437f512
...
...
@@ -3,12 +3,12 @@
# SPDX-License-Identifier: AGPL-3.0-only
defmodule
Mix
.
Tasks
.
Pleroma
.
Database
do
alias
Mix
.
Tasks
.
Pleroma
.
Common
alias
Pleroma
.
Conversation
alias
Pleroma
.
Object
alias
Pleroma
.
Repo
alias
Pleroma
.
User
require
Logger
import
Mix
.
Pleroma
use
Mix
.
Task
@shortdoc
"A collection of database related tasks"
...
...
@@ -45,7 +45,7 @@ def run(["remove_embedded_objects" | args]) do
]
)
Common
.
start_pleroma
()
start_pleroma
()
Logger
.
info
(
"Removing embedded objects"
)
Repo
.
query!
(
...
...
@@ -66,12 +66,12 @@ def run(["remove_embedded_objects" | args]) do
end
def
run
([
"bump_all_conversations"
])
do
Common
.
start_pleroma
()
start_pleroma
()
Conversation
.
bump_for_all_activities
()
end
def
run
([
"update_users_following_followers_counts"
])
do
Common
.
start_pleroma
()
start_pleroma
()
users
=
Repo
.
all
(
User
)
Enum
.
each
(
users
,
&
User
.
remove_duplicated_following
/
1
)
...
...
@@ -89,7 +89,7 @@ def run(["prune_objects" | args]) do
]
)
Common
.
start_pleroma
()
start_pleroma
()
deadline
=
Pleroma
.
Config
.
get
([
:instance
,
:remote_post_retention_days
])
...
...
lib/mix/tasks/pleroma/instance.ex
View file @
2437f512
...
...
@@ -4,7 +4,7 @@
defmodule
Mix
.
Tasks
.
Pleroma
.
Instance
do
use
Mix
.
Task
alias
Mix
.
Tasks
.
Pleroma
.
Common
import
Mix
.
Pleroma
@shortdoc
"Manages Pleroma instance"
@moduledoc
"""
...
...
@@ -31,6 +31,8 @@ defmodule Mix.Tasks.Pleroma.Instance do
- `--dbpass DBPASS` - the password to use for the database connection
- `--indexable Y/N` - Allow/disallow indexing site by search engines
- `--db-configurable Y/N` - Allow/disallow configuring instance from admin part
- `--uploads-dir` - the directory uploads go in when using a local uploader
- `--static-dir` - the directory custom public files should be read from (custom emojis, frontend bundle overrides, robots.txt, etc.)
"""
def
run
([
"gen"
|
rest
])
do
...
...
@@ -50,7 +52,9 @@ def run(["gen" | rest]) do
dbuser:
:string
,
dbpass:
:string
,
indexable:
:string
,
db_configurable:
:string
db_configurable:
:string
,
uploads_dir:
:string
,
static_dir:
:string
],
aliases:
[
o:
:output
,
...
...
@@ -70,7 +74,7 @@ def run(["gen" | rest]) do
if
proceed?
do
[
domain
,
port
|
_
]
=
String
.
split
(
Common
.
get_option
(
get_option
(
options
,
:domain
,
"What domain will your instance use? (e.g pleroma.soykaf.com)"
...
...
@@ -79,16 +83,16 @@ def run(["gen" | rest]) do
)
++
[
443
]
name
=
Common
.
get_option
(
get_option
(
options
,
:instance_name
,
"What is the name of your instance? (e.g. Pleroma/Soykaf)"
)
email
=
Common
.
get_option
(
options
,
:admin_email
,
"What is your admin email address?"
)
email
=
get_option
(
options
,
:admin_email
,
"What is your admin email address?"
)
notify_email
=
Common
.
get_option
(
get_option
(
options
,
:notify_email
,
"What email address do you want to use for sending email notifications?"
,
...
...
@@ -96,7 +100,7 @@ def run(["gen" | rest]) do
)
indexable
=
Common
.
get_option
(
get_option
(
options
,
:indexable
,
"Do you want search engines to index your site? (y/n)"
,
...
...
@@ -104,21 +108,19 @@ def run(["gen" | rest]) do
)
===
"y"
db_configurable?
=
Common
.
get_option
(
get_option
(
options
,
:db_configurable
,
"Do you want to
be abl
e t
o
configur
e instance
from admin
part
? (y/n)"
,
"Do you want to
stor
e t
he
configur
ation in the database (allows controlling it
from admin
-fe)
? (y/n)"
,
"y"
)
===
"y"
dbhost
=
Common
.
get_option
(
options
,
:dbhost
,
"What is the hostname of your database?"
,
"localhost"
)
dbhost
=
get_option
(
options
,
:dbhost
,
"What is the hostname of your database?"
,
"localhost"
)
dbname
=
Common
.
get_option
(
options
,
:dbname
,
"What is the name of your database?"
,
"pleroma_dev"
)
dbname
=
get_option
(
options
,
:dbname
,
"What is the name of your database?"
,
"pleroma_dev"
)
dbuser
=
Common
.
get_option
(
get_option
(
options
,
:dbuser
,
"What is the user used to connect to your database?"
,
...
...
@@ -126,7 +128,7 @@ def run(["gen" | rest]) do
)
dbpass
=
Common
.
get_option
(
get_option
(
options
,
:dbpass
,
"What is the password used to connect to your database?"
,
...
...
@@ -134,6 +136,22 @@ def run(["gen" | rest]) do
"autogenerated"
)
uploads_dir
=
get_option
(
options
,
:upload_dir
,
"What directory should media uploads go in (when using the local uploader)?"
,
Pleroma
.
Config
.
get
([
Pleroma
.
Uploaders
.
Local
,
:uploads
])
)
static_dir
=
get_option
(
options
,
:static_dir
,
"What directory should custom public files be read from (custom emojis, frontend bundle overrides, robots.txt, etc.)?"
,
Pleroma
.
Config
.
get
([
:instance
,
:static_dir
])
)
secret
=
:crypto
.
strong_rand_bytes
(
64
)
|>
Base
.
encode64
()
|>
binary_part
(
0
,
64
)
signing_salt
=
:crypto
.
strong_rand_bytes
(
8
)
|>
Base
.
encode64
()
|>
binary_part
(
0
,
8
)
{
web_push_public_key
,
web_push_private_key
}
=
:crypto
.
generate_key
(
:ecdh
,
:prime256v1
)
...
...
@@ -150,12 +168,13 @@ def run(["gen" | rest]) do
dbname:
dbname
,
dbuser:
dbuser
,
dbpass:
dbpass
,
version:
Pleroma
.
Mixfile
.
project
()
|>
Keyword
.
get
(
:version
),
secret:
secret
,
signing_salt:
signing_salt
,
web_push_public_key:
Base
.
url_encode64
(
web_push_public_key
,
padding:
false
),
web_push_private_key:
Base
.
url_encode64
(
web_push_private_key
,
padding:
false
),
db_configurable?:
db_configurable?
db_configurable?:
db_configurable?
,
static_dir:
static_dir
,
uploads_dir:
uploads_dir
)
result_psql
=
...
...
@@ -166,31 +185,31 @@ def run(["gen" | rest]) do
dbpass:
dbpass
)
Common
.
shell_info
(
shell_info
(
"Writing config to
#{
config_path
}
. You should rename it to config/prod.secret.exs or config/dev.secret.exs."
)
File
.
write
(
config_path
,
result_config
)
Common
.
shell_info
(
"Writing
#{
psql_path
}
."
)
shell_info
(
"Writing
#{
psql_path
}
."
)
File
.
write
(
psql_path
,
result_psql
)
write_robots_txt
(
indexable
)
Common
.
shell_info
(
shell_info
(
"
\n
"
<>
"""
To get started:
1. Verify the contents of the generated files.
2. Run `sudo -u postgres psql -f #{
Common.
escape_sh_path(psql_path)}`.
2. Run `sudo -u postgres psql -f #{escape_sh_path(psql_path)}`.
"""
<>
if
config_path
in
[
"config/dev.secret.exs"
,
"config/prod.secret.exs"
]
do
""
else
"3. Run `mv
#{
Common
.
escape_sh_path
(
config_path
)
}
'config/prod.secret.exs'`."
"3. Run `mv
#{
escape_sh_path
(
config_path
)
}
'config/prod.secret.exs'`."
end
)
else
Common
.
shell_error
(
shell_error
(
"The task would have overwritten the following files:
\n
"
<>
(
Enum
.
map
(
paths
,
&
"-
#{
&1
}
\n
"
)
|>
Enum
.
join
(
""
))
<>
"Rerun with `--force` to overwrite them."
...
...
@@ -215,10 +234,10 @@ defp write_robots_txt(indexable) do
if
File
.
exists?
(
robots_txt_path
)
do
File
.
cp!
(
robots_txt_path
,
"
#{
robots_txt_path
}
.bak"
)
Common
.
shell_info
(
"Backing up existing robots.txt to
#{
robots_txt_path
}
.bak"
)
shell_info
(
"Backing up existing robots.txt to
#{
robots_txt_path
}
.bak"
)
end
File
.
write
(
robots_txt_path
,
robots_txt
)
Common
.
shell_info
(
"Writing
#{
robots_txt_path
}
."
)
shell_info
(
"Writing
#{
robots_txt_path
}
."
)
end
end
lib/mix/tasks/pleroma/relay.ex
View file @
2437f512
...
...
@@ -4,7 +4,7 @@
defmodule
Mix
.
Tasks
.
Pleroma
.
Relay
do
use
Mix
.
Task
alias
Mix
.
Tasks
.
Pleroma
.
Common
import
Mix
.
Pleroma
alias
Pleroma
.
Web
.
ActivityPub
.
Relay
@shortdoc
"Manages remote relays"
...
...
@@ -24,24 +24,24 @@ defmodule Mix.Tasks.Pleroma.Relay do
Example: ``mix pleroma.relay unfollow https://example.org/relay``
"""
def
run
([
"follow"
,
target
])
do
Common
.
start_pleroma
()
start_pleroma
()
with
{
:ok
,
_activity
}
<-
Relay
.
follow
(
target
)
do
# put this task to sleep to allow the genserver to push out the messages
:timer
.
sleep
(
500
)
else
{
:error
,
e
}
->
Common
.
shell_error
(
"Error while following
#{
target
}
:
#{
inspect
(
e
)
}
"
)
{
:error
,
e
}
->
shell_error
(
"Error while following
#{
target
}
:
#{
inspect
(
e
)
}
"
)
end
end
def
run
([
"unfollow"
,
target
])
do
Common
.
start_pleroma
()
start_pleroma
()
with
{
:ok
,
_activity
}
<-
Relay
.
unfollow
(
target
)
do
# put this task to sleep to allow the genserver to push out the messages
:timer
.
sleep
(
500
)
else
{
:error
,
e
}
->
Common
.
shell_error
(
"Error while following
#{
target
}
:
#{
inspect
(
e
)
}
"
)
{
:error
,
e
}
->
shell_error
(
"Error while following
#{
target
}
:
#{
inspect
(
e
)
}
"
)
end
end
end
lib/mix/tasks/pleroma/sample_config.eex
View file @
2437f512
...
...
@@ -16,7 +16,6 @@ config :pleroma, :instance,
notify_email: "
<%=
notify_email
%>
",
limit: 5000,
registrations_open: true,
dedupe_media: false,
dynamic_configuration:
<%=
db_configurable?
%>
config :pleroma, :media_proxy,
...
...
@@ -38,6 +37,9 @@ config :web_push_encryption, :vapid_details,
public_key: "
<%=
web_push_public_key
%>
",
private_key: "
<%=
web_push_private_key
%>
"
config :pleroma, :instance, static_dir: "
<%=
static_dir
%>
"
config :pleroma, Pleroma.Uploaders.Local, uploads: "
<%=
uploads_dir
%>
"
# Enable Strict-Transport-Security once SSL is working:
# config :pleroma, :http_security,
# sts: true
...
...
lib/mix/tasks/pleroma/uploads.ex
View file @
2437f512
...
...
@@ -4,7 +4,7 @@
defmodule
Mix
.
Tasks
.
Pleroma
.
Uploads
do
use
Mix
.
Task
alias
Mix
.
Tasks
.
Pleroma
.
Common
import
Mix
.
Pleroma
alias
Pleroma
.
Upload
alias
Pleroma
.
Uploaders
.
Local
require
Logger
...
...
@@ -24,7 +24,7 @@ defmodule Mix.Tasks.Pleroma.Uploads do
"""
def
run
([
"migrate_local"
,
target_uploader
|
args
])
do
delete?
=
Enum
.
member?
(
args
,
"--delete"
)
Common
.
start_pleroma
()
start_pleroma
()
local_path
=
Pleroma
.
Config
.
get!
([
Local
,
:uploads
])
uploader
=
Module
.
concat
(
Pleroma
.
Uploaders
,
target_uploader
)
...
...
@@ -38,10 +38,10 @@ def run(["migrate_local", target_uploader | args]) do
Pleroma
.
Config
.
put
([
Upload
,
:uploader
],
uploader
)
end
Common
.
shell_info
(
"Migrating files from local
#{
local_path
}
to
#{
to_string
(
uploader
)
}
"
)
shell_info
(
"Migrating files from local
#{
local_path
}
to
#{
to_string
(
uploader
)
}
"
)
if
delete?
do
Common
.
shell_info
(
shell_info
(
"Attention: uploaded files will be deleted, hope you have backups! (--delete ; cancel with ^C)"
)
...
...
@@ -78,7 +78,7 @@ def run(["migrate_local", target_uploader | args]) do
|>
Enum
.
filter
(
&
&1
)
total_count
=
length
(
uploads
)
Common
.
shell_info
(
"Found
#{
total_count
}
uploads"
)
shell_info
(
"Found
#{
total_count
}
uploads"
)
uploads
|>
Task
.
async_stream
(
...
...
@@ -90,7 +90,7 @@ def run(["migrate_local", target_uploader | args]) do
:ok
error
->
Common
.
shell_error
(
"failed to upload
#{
inspect
(
upload
.
path
)
}
:
#{
inspect
(
error
)
}
"
)
shell_error
(
"failed to upload
#{
inspect
(
upload
.
path
)
}
:
#{
inspect
(
error
)
}
"
)
end
end
,
timeout:
150_000
...
...
@@ -99,10 +99,10 @@ def run(["migrate_local", target_uploader | args]) do
# credo:disable-for-next-line Credo.Check.Warning.UnusedEnumOperation
|>
Enum
.
reduce
(
0
,
fn
done
,
count
->
count
=
count
+
length
(
done
)
Common
.
shell_info
(
"Uploaded
#{
count
}
/
#{
total_count
}
files"
)
shell_info
(
"Uploaded
#{
count
}
/
#{
total_count
}
files"
)
count
end
)
Common
.
shell_info
(
"Done!"
)
shell_info
(
"Done!"
)
end
end
lib/mix/tasks/pleroma/user.ex
View file @
2437f512
...
...
@@ -5,7 +5,7 @@
defmodule
Mix
.
Tasks
.
Pleroma
.
User
do
use
Mix
.
Task
import
Ecto
.
Changeset
alias
Mix
.
Tasks
.
Pleroma
.
Common
import
Mix
.
Pleroma
alias
Pleroma
.
User
alias
Pleroma
.
UserInviteToken
alias
Pleroma
.
Web
.
OAuth
...
...
@@ -120,7 +120,7 @@ def run(["new", nickname, email | rest]) do
admin?
=
Keyword
.
get
(
options
,
:admin
,
false
)
assume_yes?
=
Keyword
.
get
(
options
,
:assume_yes
,
false
)
Common
.
shell_info
(
"""
shell_info
(
"""
A user will be created with the following information:
- nickname: #{nickname}
- email: #{email}
...
...
@@ -133,10 +133,10 @@ def run(["new", nickname, email | rest]) do
- admin: #{if(admin?, do: "true", else: "false")}
"""
)
proceed?
=
assume_yes?
or
Common
.
shell_yes?
(
"Continue?"
)
proceed?
=
assume_yes?
or
shell_yes?
(
"Continue?"
)
if
proceed?
do
Common
.
start_pleroma
()
start_pleroma
()
params
=
%{
nickname:
nickname
,
...
...
@@ -150,7 +150,7 @@ def run(["new", nickname, email | rest]) do
changeset
=
User
.
register_changeset
(%
User
{},
params
,
need_confirmation:
false
)
{
:ok
,
_user
}
=
User
.
register
(
changeset
)
Common
.
shell_info
(
"User
#{
nickname
}
created"
)
shell_info
(
"User
#{
nickname
}
created"
)
if
moderator?
do
run
([
"set"
,
nickname
,
"--moderator"
])
...
...
@@ -164,43 +164,43 @@ def run(["new", nickname, email | rest]) do
run
([
"reset_password"
,
nickname
])
end
else
Common
.
shell_info
(
"User will not be created."
)
shell_info
(
"User will not be created."
)
end
end
def
run
([
"rm"
,
nickname
])
do
Common
.
start_pleroma
()
start_pleroma
()
with
%
User
{
local:
true
}
=
user
<-
User
.
get_cached_by_nickname
(
nickname
)
do
User
.
perform
(
:delete
,
user
)
Common
.
shell_info
(
"User
#{
nickname
}
deleted."
)
shell_info
(
"User
#{
nickname
}
deleted."
)
else
_
->
Common
.
shell_error
(
"No local user
#{
nickname
}
"
)
shell_error
(
"No local user
#{
nickname
}
"
)
end
end
def
run
([
"toggle_activated"
,
nickname
])
do
Common
.
start_pleroma
()
start_pleroma
()
with
%
User
{}
=
user
<-
User
.
get_cached_by_nickname
(
nickname
)
do
{
:ok
,
user
}
=
User
.
deactivate
(
user
,
!user
.
info
.
deactivated
)
Common
.
shell_info
(
shell_info
(
"Activation status of
#{
nickname
}
:
#{
if
(
user
.
info
.
deactivated
,
do
:
"de"
,
else
:
""
)
}
activated"
)
else
_
->
Common
.
shell_error
(
"No user
#{
nickname
}
"
)
shell_error
(
"No user
#{
nickname
}
"
)
end
end
def
run
([
"reset_password"
,
nickname
])
do
Common
.
start_pleroma
()
start_pleroma
()
with
%
User
{
local:
true
}
=
user
<-
User
.
get_cached_by_nickname
(
nickname
),
{
:ok
,
token
}
<-
Pleroma
.
PasswordResetToken
.
create_token
(
user
)
do
Common
.
shell_info
(
"Generated password reset token for
#{
user
.
nickname
}
"
)
shell_info
(
"Generated password reset token for
#{
user
.
nickname
}
"
)
IO
.
puts
(
"URL:
#{
...
...
@@ -213,15 +213,15 @@ def run(["reset_password", nickname]) do
)
else
_
->
Common
.
shell_error
(
"No local user
#{
nickname
}
"
)
shell_error
(
"No local user
#{
nickname
}
"
)
end
end
def
run
([
"unsubscribe"
,
nickname
])
do
Common
.
start_pleroma
()
start_pleroma
()
with
%
User
{}
=
user
<-
User
.
get_cached_by_nickname
(
nickname
)
do
Common
.
shell_info
(
"Deactivating
#{
user
.
nickname
}
"
)
shell_info
(
"Deactivating
#{
user
.
nickname
}
"
)
User
.
deactivate
(
user
)
{
:ok
,
friends
}
=
User
.
get_friends
(
user
)
...
...
@@ -229,7 +229,7 @@ def run(["unsubscribe", nickname]) do
Enum
.
each
(
friends
,
fn
friend
->
user
=
User
.
get_cached_by_id
(
user
.
id
)
Common
.
shell_info
(
"Unsubscribing
#{
friend
.
nickname
}
from
#{
user
.
nickname
}
"
)
shell_info
(
"Unsubscribing
#{
friend
.
nickname
}
from
#{
user
.
nickname
}
"
)
User
.
unfollow
(
user
,
friend
)
end
)
...
...
@@ -238,16 +238,16 @@ def run(["unsubscribe", nickname]) do
user
=
User
.
get_cached_by_id
(
user
.
id
)
if
Enum
.
empty?
(
user
.
following
)
do
Common
.
shell_info
(
"Successfully unsubscribed all followers from
#{
user
.
nickname
}
"
)
shell_info
(
"Successfully unsubscribed all followers from
#{
user
.
nickname
}
"
)
end
else
_
->
Common
.
shell_error
(
"No user
#{
nickname
}
"
)
shell_error
(
"No user
#{
nickname
}
"
)
end
end
def
run
([
"set"
,
nickname
|
rest
])
do
Common
.
start_pleroma
()
start_pleroma
()
{
options
,
[],
[]}
=
OptionParser
.
parse
(
...
...
@@ -279,33 +279,33 @@ def run(["set", nickname | rest]) do
end
else
_
->
Common
.
shell_error
(
"No local user
#{
nickname
}
"
)
shell_error
(
"No local user
#{
nickname
}
"
)
end
end
def
run
([
"tag"
,
nickname
|
tags
])
do
Common
.
start_pleroma
()
start_pleroma
()
with
%
User
{}
=
user
<-
User
.
get_cached_by_nickname
(
nickname
)
do
user
=
user
|>
User
.
tag
(
tags
)
Common
.
shell_info
(
"Tags of
#{
user
.
nickname
}
:
#{
inspect
(
tags
)
}
"
)
shell_info
(
"Tags of
#{
user
.
nickname
}
:
#{
inspect
(
tags
)
}
"
)
else
_
->
Common
.
shell_error
(
"Could not change user tags for
#{
nickname
}
"
)
shell_error
(
"Could not change user tags for
#{
nickname
}
"
)
end
end
def
run
([
"untag"
,
nickname
|
tags
])
do
Common
.
start_pleroma
()
start_pleroma
()
with
%
User
{}
=
user
<-
User
.
get_cached_by_nickname
(
nickname
)
do
user
=
user
|>
User
.
untag
(
tags
)
Common
.
shell_info
(
"Tags of
#{
user
.
nickname
}
:
#{
inspect
(
tags
)
}
"
)
shell_info
(
"Tags of
#{
user
.
nickname
}
:
#{
inspect
(
tags
)
}
"
)
else
_
->
Common
.
shell_error
(
"Could not change user tags for
#{
nickname
}
"
)
shell_error
(
"Could not change user tags for
#{
nickname
}
"
)
end
end
...
...
@@ -326,14 +326,12 @@ def run(["invite" | rest]) do
end
)
|>
Enum
.
into
(%{})
Common
.
start_pleroma
()
start_pleroma
()
with
{
:ok
,
val
}
<-
options
[
:expires_at
],
options
=
Map
.
put
(
options
,
:expires_at
,
val
),
{
:ok
,
invite
}
<-
UserInviteToken
.
create_invite
(
options
)
do
Common
.
shell_info
(
"Generated user invite token "
<>
String
.
replace
(
invite
.
invite_type
,
"_"
,
" "
)
)
shell_info
(
"Generated user invite token "
<>
String
.
replace
(
invite
.
invite_type
,
"_"
,
" "
))
url
=
Pleroma
.
Web
.
Router
.
Helpers
.
redirect_url
(
...
...
@@ -345,14 +343,14 @@ def run(["invite" | rest]) do
IO
.
puts
(
url
)
else
error
->
Common
.
shell_error
(
"Could not create invite token:
#{
inspect
(
error
)
}
"
)
shell_error
(
"Could not create invite token:
#{
inspect
(
error
)
}
"
)