Port session info in navbar

integrate-vt
Marcin Kulik 8 years ago
parent ace1d58167
commit 6b4685d724

@ -2,7 +2,7 @@ exports.config = {
// See http://brunch.io/#documentation for docs.
files: {
javascripts: {
joinTo: "js/app.js"
joinTo: "js/app.js",
// To use a separate vendor.js bundle, specify two files path
// http://brunch.io/docs/config#-files-
@ -12,12 +12,12 @@ exports.config = {
// }
//
// To change the order of concatenation of files, explicitly mention here
// order: {
// before: [
// "web/static/vendor/js/jquery-2.1.1.js",
// "web/static/vendor/js/bootstrap.min.js"
// ]
// }
order: {
before: [
"web/static/vendor/js/jquery-2.2.4.min.js",
"web/static/vendor/js/bootstrap.js"
]
}
},
stylesheets: {
joinTo: "css/app.css",

@ -0,0 +1,14 @@
defmodule Asciinema.Auth do
alias Asciinema.{Repo, User}
alias Plug.Conn
def init(opts) do
opts
end
def call(conn, _opts) do
user_id = Conn.get_session(conn, "warden.user.user.key")
user = user_id && Repo.get(User, user_id)
Conn.assign(conn, :current_user, user)
end
end

@ -0,0 +1,5 @@
defmodule Crypto do
def md5(data) do
Base.encode16(:erlang.md5(data), case: :lower)
end
end

@ -0,0 +1,14 @@
defmodule Asciinema.Gravatar do
def gravatar_url(email, opts \\ []) do
hash = email
|> String.downcase
|> Crypto.md5
size = Keyword.get(opts, :size, 128)
default = Keyword.get(opts, :default, "retro")
"//gravatar.com/avatar/#{hash}?s=#{size}&d=#{default}"
end
end

@ -0,0 +1,12 @@
defmodule Asciinema.GravatarTest do
use ExUnit.Case, async: true
alias Asciinema.Gravatar
test "default options" do
assert Gravatar.gravatar_url("test@example.com") == "//gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?s=128&d=retro"
end
test "custom options" do
assert Gravatar.gravatar_url("test@example.com", size: 256, default: "mm") == "//gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?s=256&d=mm"
end
end

@ -7,6 +7,7 @@ defmodule Asciinema.Router do
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
plug Asciinema.Auth
end
pipeline :api do

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -12,7 +12,7 @@
</head>
<body>
<%= render "header.html", conn: @conn %>
<%= render "header.html", conn: @conn, current_user: @current_user %>
<%= render "flash.html", conn: @conn %>
<div class="main">
@ -21,7 +21,6 @@
<%= render "footer.html", conn: @conn %>
<%# <script src="<%= static_path(@conn, "/js/app.js") %1>"></script> %>
<!-- https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js -->
<script src="<%= static_path(@conn, "/js/app.js") %>"></script>
</body>
</html>

@ -15,12 +15,25 @@
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li><a href="/browse/featured">Browse</a></li>
<li><a href="/docs">Docs</a></li>
<li><a href="<%= doc_path(@conn, :index) %>">Docs</a></li>
<li><a href="http://blog.asciinema.org">Blog</a></li>
</ul>
<ul class="nav navbar-nav navbar-right session-info">
<li><a href="/login/new" id="log-in">Log in</a></li>
<%= if @current_user do %>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<img class="avatar" src="<%= avatar_url(@current_user) %>"><%= @current_user.username || @current_user.email %><b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="<%= profile_path(@current_user) %>">Profile</a></li>
<li><a href="/user/edit">Settings</a></li>
<li><a class="logout" href="/logout">Log out</a></li>
</ul>
</li>
<% else %>
<li><a href="/login/new" id="log-in">Log in</a></li>
<% end %>
</ul>
</div>
</div>

@ -0,0 +1,21 @@
defmodule Asciinema.UserView do
alias Asciinema.{Gravatar, User}
def avatar_url(user) do
username = user_username(user)
email = user.email || "#{username}+#{user.id}@asciinema.org"
Gravatar.gravatar_url(email)
end
def profile_path(%User{id: id, username: username}) do
if username do
"/~#{username}"
else
"/u/#{id}"
end
end
defp user_username(user) do
user.username || user.temporary_username || "user:#{user.id}"
end
end

@ -52,6 +52,7 @@ defmodule Asciinema.Web do
import Asciinema.Router.Helpers
import Asciinema.ErrorHelpers
import Asciinema.Gettext
import Asciinema.UserView
end
end

Loading…
Cancel
Save