Skip to content
Snippets Groups Projects
Commit d88b9362 authored by Kamil Trzciński's avatar Kamil Trzciński
Browse files

Merge branch 'user-avatar' into 'master'

Use avatars from GitLab

Rewrite Gravatar URLs if needed in order to have images in different size

/cc @dzaporozhets @vsizov 

See merge request !220
parents 9cf47eb6 7c7d7b97
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -4,6 +4,7 @@ v7.14.0 (unreleased)
- Added Application Settings
- Randomize test database for CI tests
- Make YAML validation stricter
- Use avatars received from GitLab
 
v7.13.1
- Fix: user could steal specific runner
Loading
Loading
.avatar {
float: left;
margin-right: 12px;
width: 40px;
height: 40px;
padding: 0;
@include border-radius($avatar_radius);
&.avatar-inline {
float: none;
margin-left: 4px;
margin-bottom: 2px;
&.s16 { margin-right: 4px; }
&.s24 { margin-right: 4px; }
}
&.avatar-tile {
@include border-radius(0px);
}
&.s16 { width: 16px; height: 16px; margin-right: 6px; }
&.s24 { width: 24px; height: 24px; margin-right: 8px; }
&.s26 { width: 26px; height: 26px; margin-right: 8px; }
&.s32 { width: 32px; height: 32px; margin-right: 10px; }
&.s60 { width: 60px; height: 60px; margin-right: 12px; }
&.s90 { width: 90px; height: 90px; margin-right: 15px; }
&.s160 { width: 160px; height: 160px; margin-right: 20px; }
}
Loading
Loading
@@ -37,3 +37,8 @@ $border_warning: #EB9532;
$font-size-base: 13px !default;
$nav-pills-active-link-hover-bg: $bg_style_color;
$pagination-active-bg: $bg_style_color;
/**
* Avatar variables
*/
$avatar_radius: 50%;
Loading
Loading
@@ -3,18 +3,6 @@ module ApplicationHelper
image_tag 'loader.gif', alt: 'Loading'
end
 
def gravatar_icon(user_email = '', size = nil)
size = 40 if size.nil? || size <= 0
if !GitlabCi.config.gravatar.enabled || user_email.blank?
'no_avatar.png'
else
gravatar_url = request.ssl? || GitlabCi.config.gitlab_ci.https ? GitlabCi.config.gravatar.ssl_url : GitlabCi.config.gravatar.plain_url
user_email.strip!
sprintf gravatar_url, hash: Digest::MD5.hexdigest(user_email.downcase), size: size
end
end
# Navigation link helper
#
# Returns an `li` element with an 'active' class if the supplied
Loading
Loading
module UserHelper
def user_avatar_url(user = nil, size = nil, default = 'identicon')
size = 40 if size.nil? || size <= 0
if user.blank? || user.avatar_url.blank?
'no_avatar.png'
elsif /^(http(s?):\/\/(www|secure)\.gravatar\.com\/avatar\/(\w*))/ =~ user.avatar_url
Regexp.last_match[0] + "?s=#{size}&d=#{default}"
else
user.avatar_url
end
end
end
Loading
Loading
@@ -22,6 +22,10 @@ class User
end
end
 
def avatar_url
attributes['avatar_url']
end
def cache_key(*args)
"#{self.id}:#{args.join(":")}:#{sync_at.to_s}"
end
Loading
Loading
Loading
Loading
@@ -21,7 +21,7 @@
%li
= link_to user_sessions_path do
.profile-holder
= image_tag gravatar_icon(current_user.email, 64), alt: ''
= image_tag user_avatar_url(current_user, 64), class: 'avatar s32', alt: ''
%span= current_user.name
%li
= link_to user_sessions_path, class: "logout", method: :delete do
Loading
Loading
= image_tag gravatar_icon(current_user.email, 120), class: 'img-polaroid', alt: ''
= image_tag user_avatar_url(current_user, 90), class: 'avatar avatar-inline avatar-tile s90', alt: ''
%h3
Hi, #{@user.name}
 
Loading
Loading
Loading
Loading
@@ -32,11 +32,6 @@ defaults: &defaults
# The location where build traces are stored (default: builds/). Relative paths are relative to Rails.root
# builds_path: builds/
 
gravatar:
enabled: true
plain_url: "http://www.gravatar.com/avatar/%{hash}?s=%{size}&d=mm"
ssl_url: "https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=mm"
## Backup settings
backup:
path: "tmp/backups" # Relative paths are relative to Rails.root (default: tmp/backups/)
Loading
Loading
Loading
Loading
@@ -45,14 +45,6 @@ Settings.gitlab_ci['builds_path'] = File.expand_path(Settings.gitlab_ci[
# Compatibility with old config
Settings['gitlab_server_urls'] ||= Settings['allowed_gitlab_urls']
 
#
# Gravatar
#
Settings['gravatar'] ||= Settingslogic.new({})
Settings.gravatar['enabled'] = true if Settings.gravatar['enabled'].nil?
Settings.gravatar['plain_url'] ||= 'http://www.gravatar.com/avatar/%{hash}?s=%{size}&d=mm'
Settings.gravatar['ssl_url'] ||= 'https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=mm'
#
# Backup
#
Loading
Loading
require 'spec_helper'
 
describe ApplicationHelper do
describe "gravatar_icon" do
let(:user_email) { 'user@email.com' }
it "should return a generic avatar path when Gravatar is disabled" do
GitlabCi.config.gravatar.stub(:enabled).and_return(false)
gravatar_icon(user_email).should == 'no_avatar.png'
end
it "should return a generic avatar path when email is blank" do
gravatar_icon('').should == 'no_avatar.png'
end
context "with no ssl" do
let!(:request) {
request_double = double("Request")
request_double.stub(:ssl?).and_return(false)
request_double
}
it "should return default gravatar url" do
gravatar_icon(user_email).should match('http://www.gravatar.com/avatar/b58c6f14d292556214bd64909bcdb118')
end
it "should return custom gravatar path when gravatar_url is set" do
GitlabCi.config.gravatar.stub(:plain_url).and_return('http://example.local/?s=%{size}&hash=%{hash}')
gravatar_icon(user_email, 20).should == 'http://example.local/?s=20&hash=b58c6f14d292556214bd64909bcdb118'
end
it "should accept a custom size" do
gravatar_icon(user_email, 64).should match(/\?s=64/)
end
it "should use default size when size is wrong" do
gravatar_icon(user_email, nil).should match(/\?s=40/)
end
it "should be case insensitive" do
gravatar_icon(user_email).should == gravatar_icon(user_email.upcase + " ")
end
end
context "with ssl" do
let!(:request) {
request_double = double("Request")
request_double.stub(:ssl?).and_return(true)
request_double
}
it "should use SSL when appropriate" do
gravatar_icon(user_email).should match('https://secure.gravatar.com')
end
end
end
describe "#duration_in_words" do
it "returns minutes and seconds" do
intervals_in_words = {
Loading
Loading
require 'spec_helper'
describe UserHelper do
describe :user_avatar_url do
let (:user) { User.new({'avatar_url' => avatar_url}) }
context 'no avatar' do
let (:avatar_url) { nil }
it 'should return a generic avatar' do
user_avatar_url(user).should == 'no_avatar.png'
end
end
context 'plain gravatar' do
let (:base_url) { 'http://www.gravatar.com/avatar/abcdefgh' }
let (:avatar_url) { "#{base_url}?s=40&d=mm" }
it 'should return gravatar with default size' do
user_avatar_url(user).should == "#{base_url}?s=40&d=identicon"
end
it 'should return gravatar with custom size' do
user_avatar_url(user, 120).should == "#{base_url}?s=120&d=identicon"
end
end
context 'secure gravatar' do
let (:base_url) { 'https://secure.gravatar.com/avatar/abcdefgh' }
let (:avatar_url) { "#{base_url}?s=40&d=mm" }
it 'should return gravatar with default size' do
user_avatar_url(user).should == "#{base_url}?s=40&d=identicon"
end
it 'should return gravatar with custom size' do
user_avatar_url(user, 120).should == "#{base_url}?s=120&d=identicon"
end
end
context 'custom avatar' do
let (:avatar_url) { 'http://example.local/avatar.png' }
it 'should return custom avatar' do
user_avatar_url(user).should == avatar_url
end
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment