Skip to content

Commit 3e755d8

Browse files
committed
Merge branch 'develop'
2 parents 1af2390 + b3a852d commit 3e755d8

File tree

75 files changed

+805
-466
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+805
-466
lines changed

assets/css/_base.scss

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@import "./_source_sans_pro.css";
1+
@import "./fonts/source_sans_pro.css";
22

33
html {
44
height: 100%;
@@ -142,6 +142,18 @@ form {
142142
.col-form-label {
143143
font-weight: 600;
144144
}
145+
146+
.form-group.row {
147+
margin-bottom: 1.5rem;
148+
}
149+
150+
.form-check {
151+
margin-bottom: 0.75em;
152+
}
153+
154+
.visibility-radios {
155+
padding-top: 0.375rem;
156+
}
145157
}
146158

147159
.special-label {

assets/css/app.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ $primary: #06989a;
1818
@import "./_user_profile.scss";
1919
@import "./_user_login.scss";
2020
@import "./_user_edit.scss";
21-
@import "./powerline-symbols.css";
21+
@import "./fonts/powerline-symbols.css";
2222
@import "./fonts/fira-code-nerd-font.css";
2323
@import "./fonts/jetbrains-mono-nerd-font.css";
2424
@import "~asciinema-player/dist/bundle/asciinema-player.css";
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
@font-face {
22
font-family: 'Powerline Symbols';
3-
src: local('Powerline Symbols'), local('PowerlineSymbols'), url('../static/fonts/PowerlineSymbols.otf') format('opentype');
3+
src: local('Powerline Symbols'), local('PowerlineSymbols'), url('../../static/fonts/PowerlineSymbols.otf') format('opentype');
44
}

assets/css/_source_sans_pro.css renamed to assets/css/fonts/source_sans_pro.css

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,29 @@
22
font-family: 'Source Sans Pro';
33
font-style: normal;
44
font-weight: 300;
5-
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../static/fonts/SourceSansPro-Light.ttf') format('truetype');
5+
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../../static/fonts/SourceSansPro-Light.ttf') format('truetype');
66
}
77
@font-face {
88
font-family: 'Source Sans Pro';
99
font-style: normal;
1010
font-weight: 400;
11-
src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../static/fonts/SourceSansPro-Regular.ttf') format('truetype');
11+
src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../../static/fonts/SourceSansPro-Regular.ttf') format('truetype');
1212
}
1313
@font-face {
1414
font-family: 'Source Sans Pro';
1515
font-style: normal;
1616
font-weight: 600;
17-
src: local('Source Sans Pro Semibold'), local('SourceSansPro-Semibold'), url('../static/fonts/SourceSansPro-Semibold.ttf') format('truetype');
17+
src: local('Source Sans Pro Semibold'), local('SourceSansPro-Semibold'), url('../../static/fonts/SourceSansPro-Semibold.ttf') format('truetype');
1818
}
1919
@font-face {
2020
font-family: 'Source Sans Pro';
2121
font-style: normal;
2222
font-weight: 700;
23-
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../static/fonts/SourceSansPro-Bold.ttf') format('truetype');
23+
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../../static/fonts/SourceSansPro-Bold.ttf') format('truetype');
2424
}
2525
@font-face {
2626
font-family: 'Source Sans Pro';
2727
font-style: italic;
2828
font-weight: 400;
29-
src: local('Source Sans Pro Italic'), local('SourceSansPro-It'), url('../static/fonts/SourceSansPro-Italic.ttf') format('truetype');
29+
src: local('Source Sans Pro Italic'), local('SourceSansPro-It'), url('../../static/fonts/SourceSansPro-Italic.ttf') format('truetype');
3030
}

assets/css/iframe.scss

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
@import "./_source_sans_pro.css";
1+
@import "./fonts/source_sans_pro.css";
2+
@import "./fonts/fira-code-nerd-font.css";
3+
@import "./fonts/jetbrains-mono-nerd-font.css";
24
@import "~asciinema-player/dist/bundle/asciinema-player.css";
3-
@import "./powerline-symbols.css";
5+
@import "./fonts/powerline-symbols.css";
46

57
body.iframe {
68
background-color: transparent;

config/config.exs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
# General application configuration
88
import Config
99

10+
config :asciinema, :session_opts,
11+
store: :cookie,
12+
key: "_asciinema_key",
13+
signing_salt: "qJL+3s0T",
14+
same_site: "Lax"
15+
1016
config :asciinema,
1117
ecto_repos: [Asciinema.Repo]
1218

@@ -47,7 +53,7 @@ config :logger,
4753
config :phoenix, :json_library, Jason
4854

4955
config :phoenix, :template_engines, md: PhoenixMarkdown.Engine
50-
config :phoenix_template, :format_encoders, svg: Phoenix.HTML.Engine
56+
config :phoenix_template, :format_encoders, svg: Phoenix.HTML.Engine, xml: Phoenix.HTML.Engine
5157

5258
config :sentry,
5359
dsn: "https://public:secret@sentry.io/1",

lib/asciinema.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ defmodule Asciinema do
3131
defdelegate verify_login_token(token), to: Accounts
3232

3333
def merge_accounts(src_user, dst_user) do
34+
src_user = Accounts.find_user(src_user)
35+
dst_user = Accounts.find_user(dst_user)
36+
3437
Repo.transact(fn ->
3538
Recordings.reassign_asciicasts(src_user.id, dst_user.id)
3639
Streaming.reassign_live_streams(src_user.id, dst_user.id)

lib/asciinema/accounts.ex

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defmodule Asciinema.Accounts do
66
alias Asciinema.{Fonts, Repo, Themes}
77
alias Ecto.Changeset
88

9-
@valid_email_re ~r/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i
9+
@valid_email_re ~r/^[A-Z0-9._%+-]+@([A-Z0-9-]+\.)+[A-Z]{2,}$/i
1010
@valid_username_re ~r/^[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]$/
1111

1212
def fetch_user(id) do
@@ -20,6 +20,16 @@ defmodule Asciinema.Accounts do
2020

2121
def get_user(id), do: Repo.get(User, id)
2222

23+
def find_user(%User{} = user), do: user
24+
25+
def find_user(id) when is_integer(id), do: get_user(id)
26+
27+
def find_user(id) when is_binary(id) do
28+
{_, user} = lookup_user(id)
29+
30+
user
31+
end
32+
2333
def find_user_by_username(username) do
2434
Repo.one(
2535
from(u in User,
@@ -38,8 +48,9 @@ defmodule Asciinema.Accounts do
3848
result =
3949
%User{}
4050
|> cast(attrs, [:email])
41-
|> validate_format(:email, @valid_email_re)
4251
|> validate_required([:email])
52+
|> update_change(:email, &String.downcase/1)
53+
|> validate_format(:email, @valid_email_re)
4354
|> add_contraints()
4455
|> Repo.insert()
4556

@@ -79,6 +90,8 @@ defmodule Asciinema.Accounts do
7990
:terminal_font_family,
8091
:asciicasts_private_by_default
8192
])
93+
|> validate_required([:email])
94+
|> update_change(:email, &String.downcase/1)
8295
|> validate_format(:email, @valid_email_re)
8396
|> validate_format(:username, @valid_username_re)
8497
|> validate_length(:username, min: 2, max: 16)
@@ -100,7 +113,7 @@ defmodule Asciinema.Accounts do
100113

101114
user
102115
|> change_user(params)
103-
|> validate_required([:username, :email])
116+
|> validate_required([:username])
104117
|> Repo.update()
105118
end
106119

@@ -139,7 +152,7 @@ defmodule Asciinema.Accounts do
139152

140153
def lookup_user(identifier) when is_binary(identifier) do
141154
if String.contains?(identifier, "@") do
142-
{:email, Repo.get_by(User, email: identifier)}
155+
{:email, Repo.get_by(User, email: String.downcase(identifier))}
143156
else
144157
{:username, find_user_by_username(identifier)}
145158
end

lib/asciinema/authorization.ex

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ defmodule Asciinema.Authorization do
44
alias Asciinema.Streaming.LiveStream
55

66
defmodule Policy do
7+
def can?(_user, :show, %LiveStream{visibility: v}) when v in [:public, :unlisted], do: true
78
def can?(nil, _action, _thing), do: false
89
def can?(%User{is_admin: true}, _action, _thing), do: true
910
def can?(_user, :make_featured, %Asciicast{}), do: false
@@ -23,16 +24,4 @@ defmodule Asciinema.Authorization do
2324

2425
Policy.can?(user, action, thing)
2526
end
26-
27-
defmodule ForbiddenError do
28-
defexception plug_status: 403, message: "Forbidden"
29-
end
30-
31-
def can!(user, action, thing) do
32-
if can?(user, action, thing) do
33-
:ok
34-
else
35-
raise ForbiddenError
36-
end
37-
end
3827
end

lib/asciinema/file_store/local.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ defmodule Asciinema.FileStore.Local do
4242
conn
4343
|> put_resp_header("content-type", MIME.from_path(path))
4444
|> send_file(200, full_path(path))
45-
|> halt
45+
|> halt()
4646
end
4747

4848
@impl true

0 commit comments

Comments
 (0)