@@ -47,35 +47,29 @@ defmodule Asciinema.Accounts do
47
47
Repo . all ( from ( u in User , order_by: [ asc: :id ] , limit: ^ limit ) )
48
48
end
49
49
50
+ def build_user ( attrs \\ % { } ) do
51
+ Changeset . change (
52
+ % User {
53
+ default_recording_visibility: config ( :default_recording_visibility , :unlisted ) ,
54
+ default_stream_visibility: config ( :default_stream_visibility , :unlisted )
55
+ } ,
56
+ attrs
57
+ )
58
+ end
59
+
50
60
def create_user ( attrs ) do
51
61
import Ecto.Changeset
52
62
53
- % User { }
63
+ build_user ( )
54
64
|> cast ( attrs , [ :email , :username ] )
55
65
|> validate_required ( [ :email ] )
56
66
|> update_change ( :email , & String . downcase / 1 )
57
67
|> validate_format ( :email , @ valid_email_re )
68
+ |> validate_username ( )
58
69
|> add_contraints ( )
59
70
|> Repo . insert ( )
60
71
end
61
72
62
- def create_user_from_email ( email ) do
63
- import Ecto.Changeset
64
-
65
- result =
66
- % User { }
67
- |> cast ( % { email: email } , [ :email ] )
68
- |> validate_required ( [ :email ] )
69
- |> update_change ( :email , & String . downcase / 1 )
70
- |> validate_format ( :email , @ valid_email_re )
71
- |> add_contraints ( )
72
- |> Repo . insert ( )
73
-
74
- with { :error , % Ecto.Changeset { errors: [ { :email , _ } ] } } <- result do
75
- { :error , :email_taken }
76
- end
77
- end
78
-
79
73
def ensure_asciinema_user do
80
74
case Repo . get_by ( User , username: "asciinema" ) do
81
75
nil ->
@@ -85,17 +79,15 @@ defmodule Asciinema.Accounts do
85
79
86
80
}
87
81
88
- % User { }
89
- |> change_user ( attrs )
82
+ attrs
83
+ |> build_user ( )
90
84
|> Repo . insert! ( )
91
85
92
86
user ->
93
87
user
94
88
end
95
89
end
96
90
97
- def new_user , do: change_user ( % User { } )
98
-
99
91
def change_user ( user , params \\ % { } ) do
100
92
import Ecto.Changeset
101
93
@@ -108,18 +100,26 @@ defmodule Asciinema.Accounts do
108
100
:theme_prefer_original ,
109
101
:terminal_font_family ,
110
102
:default_recording_visibility ,
103
+ :default_stream_visibility ,
111
104
:stream_recording_enabled
112
105
] )
113
106
|> validate_required ( [ :email ] )
114
107
|> update_change ( :email , & String . downcase / 1 )
115
108
|> validate_format ( :email , @ valid_email_re )
116
- |> validate_format ( :username , @ valid_username_re )
117
- |> validate_length ( :username , min: 2 , max: 16 )
109
+ |> validate_username ( )
118
110
|> validate_inclusion ( :theme_name , Themes . terminal_themes ( ) )
119
111
|> validate_inclusion ( :terminal_font_family , Fonts . terminal_font_families ( ) )
120
112
|> add_contraints ( )
121
113
end
122
114
115
+ defp validate_username ( changeset ) do
116
+ import Ecto.Changeset
117
+
118
+ changeset
119
+ |> validate_format ( :username , @ valid_username_re )
120
+ |> validate_length ( :username , min: 2 , max: 16 )
121
+ end
122
+
123
123
defp add_contraints ( changeset ) do
124
124
import Ecto.Changeset
125
125
@@ -298,9 +298,9 @@ defmodule Asciinema.Accounts do
298
298
end
299
299
300
300
defp create_tmp_user ( username ) do
301
- username = String . slice ( username , 0 , 16 )
302
-
303
- Repo . insert! ( % User { temporary_username: username } )
301
+ % { temporary_username: String . slice ( username , 0 , 16 ) }
302
+ |> build_user ( )
303
+ |> Repo . insert! ( )
304
304
end
305
305
306
306
defp check_cli_ownership ( user , cli ) do
0 commit comments