diff --git a/Gemfile b/Gemfile index 2eb3f45..1ef1c3a 100644 --- a/Gemfile +++ b/Gemfile @@ -1 +1 @@ -gem 'httparty', '~> 0.13.7' +gem 'httparty' diff --git a/app/models/oic_session.rb b/app/models/oic_session.rb index 045a123..8793bbd 100644 --- a/app/models/oic_session.rb +++ b/app/models/oic_session.rb @@ -86,7 +86,11 @@ def refresh_access_token! def self.parse_token(token) jwt = token.split('.') - return JSON::parse(Base64::decode64(jwt[1])) + begin + return JSON::parse(Base64::decode64(jwt[1])) + rescue => exception + return JSON::parse(Base64::urlsafe_decode64(jwt[1])) + end end def claims @@ -133,9 +137,10 @@ def authorized? end def admin? - if client_config['admin_group'].present? && - user["member_of"].include?(client_config['admin_group']) - return true + if client_config['admin_group'].present? && user["member_of"].present? + if user["member_of"].include?(client_config['admin_group']) + return true + end end return false @@ -143,7 +148,11 @@ def admin? def user if @user.blank? || id_token_changed? - @user = JSON::parse(Base64::decode64(id_token.split('.')[1])) + begin + @user = JSON::parse(Base64::decode64(id_token.split('.')[1])) + rescue => exception + @user = JSON::parse(Base64::urlsafe_decode64(id_token.split('.')[1])) + end end return @user end @@ -217,7 +226,7 @@ def complete? end def scopes - if client_config["scopes"].nil? + if client_config["scopes"].nil? return "openid profile email user_name" else client_config["scopes"].split(',').each(&:strip).join(' ') diff --git a/app/views/account/oic_local_logout.html.erb b/app/views/account/oic_local_logout.html.erb index 3b88528..add234f 100644 --- a/app/views/account/oic_local_logout.html.erb +++ b/app/views/account/oic_local_logout.html.erb @@ -1 +1 @@ -Vous avez été déconnecté. Cliquez ici pour vous connecter à nouveau. +<%= t('local_logout.logout_message') %> <%= t('local_logout.relogin_message') %> diff --git a/config/locales/en.yml b/config/locales/en.yml index ecb876d..bd5e78a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -10,3 +10,6 @@ en: group: Authorized group (blank if all users are authorized) admin_group: Admins group (members of this group are treated as admin) dynamic_config_expiry: How often to retrieve openid configuration (default 1 day) + local_logout: + logout_message: You have logged out. + relogin_message: Click to re-login. \ No newline at end of file diff --git a/config/locales/zh.yml b/config/locales/zh.yml new file mode 100644 index 0000000..9fd7413 --- /dev/null +++ b/config/locales/zh.yml @@ -0,0 +1,15 @@ +# Chinese strings go here for Rails i18n +zh: + config: + enabled: 启用 + header: OpenID 连接配置 + client_id: 客户端 ID + openid_connect_server_url: OpenID 服务器链接地址 + scopes: OpenID Connect scopes (","逗号分隔) + client_secret: 客户端密码 + group: 授权组 名称(如果所有用户都被授权,则留空) + admin_group: 管理员组 名称(该组的成员将被视为Redmine管理员) + dynamic_config_expiry: 从服务器拉取配置的时间周期 (单位:秒;默认1天) + local_logout: + logout_message: 您的账户已注销, + relogin_message: 点击重新登陆。 \ No newline at end of file