recaptcha plugin
also some UI fixes for the plugin page Change-Id: I161c458756c20e034c29d4515801fd9f6427aa53 Reviewed-on: https://gerrit.instructure.com/2093 Tested-by: Hudson <hudson@instructure.com> Reviewed-by: Ryan Shaw <ryan@instructure.com>
This commit is contained in:
parent
b866a18699
commit
629805db3c
|
@ -304,11 +304,11 @@ class UsersController < ApplicationController
|
|||
# If a teacher created the student, and the student then comes to register, they
|
||||
# should still be allowed to.
|
||||
if @active_cc && @active_cc.user && !@pseudonym.user
|
||||
@user = @active_cc.user
|
||||
@user ||= @active_cc.user
|
||||
elsif @any_cc && @any_cc.user && !@pseudonym.user
|
||||
@user = @any_cc.user
|
||||
@user ||= @any_cc.user
|
||||
elsif @pseudonym && (!@pseudonym.user || @pseudonym.user.creation_pending?)
|
||||
@user = @pseudonym.user
|
||||
@user ||= @pseudonym.user
|
||||
else
|
||||
# If not creation_pending, we want to throw an already_exists error, which
|
||||
# we'll get if we set this to nil, since then a few lines down will try to
|
||||
|
@ -318,7 +318,7 @@ class UsersController < ApplicationController
|
|||
@user ||= User.new
|
||||
@user.attributes = params[:user]
|
||||
@user.name ||= params[:pseudonym][:unique_id]
|
||||
if @user.save
|
||||
if @user.errors.empty? && @user.save
|
||||
@pseudonym ||= @user.pseudonyms.build
|
||||
@pseudonym.attributes = params[:pseudonym]
|
||||
@pseudonym.account_id = @domain_root_account.id
|
||||
|
|
|
@ -13,7 +13,30 @@ body.modal
|
|||
margin: 0
|
||||
padding: 0
|
||||
|
||||
#modal-box
|
||||
#modal-box-top
|
||||
background: url(/images/login-bg.jpg) no-repeat
|
||||
width: $modal_box_width
|
||||
height: 10px
|
||||
overflow: hidden
|
||||
margin: 75px auto 0
|
||||
padding: 10px 20px 0 20px
|
||||
position: relative
|
||||
#modal-box-bottom
|
||||
background: url(/images/login-bg.jpg) no-repeat bottom center
|
||||
width: $modal_box_width
|
||||
height: 9px
|
||||
overflow: hidden
|
||||
margin: 0 auto 0
|
||||
padding: 0px 20px 10px 20px
|
||||
position: relative
|
||||
#modal-box-arbitrary-size
|
||||
margin-top: -30px !important
|
||||
padding-top: 0 !important
|
||||
height: auto !important
|
||||
background-image: url(/images/login-bg-middle-tall.jpg) !important
|
||||
#register_form
|
||||
margin-top: 40px
|
||||
#modal-box,#modal-box-arbitrary-size
|
||||
background: url(/images/login-bg.jpg) no-repeat
|
||||
width: $modal_box_width
|
||||
height: 358px
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
table.plugins
|
||||
border-collapse: collapse
|
||||
th
|
||||
border-bottom: 1px dotted #888
|
||||
text-align: left
|
||||
font-weight: bold
|
||||
padding-left: 5px
|
||||
td
|
||||
border-bottom: 1px dotted #ccc
|
||||
padding: 2px 5px
|
||||
&.name
|
||||
font-size: 1.2em
|
||||
font-weight: bold
|
||||
padding-right: 10px
|
||||
&.description,&.tag
|
||||
font-size: 0.8em
|
|
@ -1,3 +1,10 @@
|
|||
<% content_for :page_title do %>Canvas Plugins<% end %>
|
||||
|
||||
<%
|
||||
add_crumb 'Plugins'
|
||||
jammit_css 'plugins'
|
||||
%>
|
||||
|
||||
<h2>Canvas Plugins</h2>
|
||||
|
||||
<% if @plugins.any? %>
|
||||
|
@ -5,17 +12,18 @@
|
|||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Description</th>
|
||||
<th>tag</th>
|
||||
<th>Tag</th>
|
||||
<th>Website</th>
|
||||
<th>Author</th>
|
||||
<th>Version</th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
<% @plugins.each do |plugin| %>
|
||||
<tr class="<%= cycle('odd', 'even') %>">
|
||||
<td><span class="name"><%= h plugin.name %></span></td>
|
||||
<td><%= content_tag('span', h(plugin.description), :class => 'description') unless plugin.description.blank? %></td>
|
||||
<td><%= h plugin.tag %></td>
|
||||
<td><%= content_tag('span', link_to(h(plugin.website), plugin.website), :class => 'url') unless plugin.website.blank? %></td>
|
||||
<td class='name'><span class="name"><%= h plugin.name %></span></td>
|
||||
<td class='description'><%= content_tag('span', h(plugin.description), :class => 'description') unless plugin.description.blank? %></td>
|
||||
<td class='tag'><%= h plugin.tag %></td>
|
||||
<td class='website'><%= content_tag('span', link_to(h(plugin.website), plugin.website), :class => 'url') unless plugin.website.blank? %></td>
|
||||
<td class="author"><%= plugin.author_website.blank? ? h(plugin.author) : link_to(h(plugin.author), plugin.author_website) %></td>
|
||||
<td class="version"><%= h plugin.version %></td>
|
||||
<td class="configure"><%= link_to("Configure", plugin_path(plugin.id)) if plugin.has_settings_partial? %></td>
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
<h2>Settings: <%=h @plugin.name %></h2>
|
||||
<% content_for :page_title do %>Plugin Settings: <%=h @plugin.name %><% end %>
|
||||
<%
|
||||
add_crumb('Plugins', plugins_path)
|
||||
add_crumb(@plugin.name)
|
||||
%>
|
||||
|
||||
<h2>Plugin Settings: <%=h @plugin.name %></h2>
|
||||
|
||||
<%= render :partial => "settings_header" %>
|
||||
|
||||
|
@ -6,11 +12,14 @@
|
|||
<% form_for(@plugin_setting, :url => plugin_path(@plugin.id), :html => {:method => :put}) do |f| %>
|
||||
<% partial = render :partial => @plugin.settings_partial, :locals => {:settings => @plugin_setting.settings.merge(params[:settings] || {})} %>
|
||||
<%= f.error_messages if !@error_messages_handled %>
|
||||
<div class="box tabular">
|
||||
<div class="box tabular">
|
||||
<%= partial %>
|
||||
</div>
|
||||
<%= submit_tag "Apply" %>
|
||||
</div>
|
||||
<div class='button-container'>
|
||||
<button type="submit" class="button">Apply</button>
|
||||
<%=link_to("Return to plugins list", plugins_path,:class => 'button button-secondary')%>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<p><%=link_to("Return to plugins list", plugins_path)%></p>
|
||||
<p></p>
|
||||
|
|
|
@ -43,14 +43,30 @@ $(function(){
|
|||
});
|
||||
</script>
|
||||
<% end %>
|
||||
<div id="modal-box" class="modal-box-tall">
|
||||
<div style="margin: 120px 80px 0; position: relative;">
|
||||
<h2>Register a new account</h2>
|
||||
<div id="modal-box-top"></div>
|
||||
<div id="modal-box-arbitrary-size">
|
||||
<div style="margin: 30px 80px 0; position: relative;">
|
||||
<h2>Register for a new account</h2>
|
||||
<% form_for @pseudonym, :url => users_path, :html => {:id => "register_form", :method => :post} do |form| %>
|
||||
<input type="hidden" name="new_teacher" value="1"/>
|
||||
<span class="field-with-fancyplaceholder"><%= label :user, :name, "Your name" %><%= text_field :user, :name, :class => "text" %></span>
|
||||
<span class="field-with-fancyplaceholder"><%= form.label :unique_id, "Email address" %><%= form.text_field :unique_id, :class => "text", :value => !@pseudonym || @pseudonym.deleted? ? (@pseudonym.deleted_unique_id rescue nil) : @pseudonym.unique_id %></span>
|
||||
<button type="submit" class="button">Register</button>
|
||||
<table>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input type="hidden" name="new_teacher" value="1"/>
|
||||
<span class="field-with-fancyplaceholder"><%= label :user, :name, "Your name" %><%= text_field :user, :name, :class => "text" %></span>
|
||||
<span class="field-with-fancyplaceholder"><%= form.label :unique_id, "Email address" %><%= form.text_field :unique_id, :class => "text", :value => !@pseudonym || @pseudonym.deleted? ? (@pseudonym.deleted_unique_id rescue nil) : @pseudonym.unique_id %></span>
|
||||
</td>
|
||||
</tr>
|
||||
<% Canvas::Plugin.all_for_tag('registration_form').each do |plugin| %>
|
||||
<%= render :partial => plugin.settings[:registration_partial] %>
|
||||
<% end %>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<button type="submit" class="button">Register</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div id="modal-box-bottom"></div>
|
|
@ -200,6 +200,8 @@ stylesheets:
|
|||
speed_grader:
|
||||
- public/stylesheets/static/ui.selectmenu.css
|
||||
- public/stylesheets/compiled/speed_grader.css
|
||||
plugins:
|
||||
- public/stylesheets/compiled/plugins.css
|
||||
gradebook_uploads:
|
||||
- public/stylesheets/static/slick.grid.css
|
||||
- public/stylesheets/compiled/gradebook_uploads.css
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
|
@ -0,0 +1 @@
|
|||
gem 'recaptcha', '0.3.1', :require => 'recaptcha/rails'
|
23
vendor/plugins/registration_captcha/app/views/users/_recaptcha_settings.html.erb
vendored
Normal file
23
vendor/plugins/registration_captcha/app/views/users/_recaptcha_settings.html.erb
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
<% fields_for :settings, OpenObject.new(settings) do |f| %>
|
||||
<table style="width: 500px;">
|
||||
<tr>
|
||||
<td colspan="2" style="padding-bottom: 20px;">
|
||||
<p>Before you can use the ReCaptcha plugin you'll need to
|
||||
<a href="https://www.google.com/recaptcha/admin">sign up for an account on ReCaptcha.</a>
|
||||
Make sure to set your domain correctly to handle your site domain(s). After
|
||||
you've set up an account, enter your public and private keys below.
|
||||
</p>
|
||||
<p><b>Note:</b> any changes you make to these settings won't be
|
||||
updated until you restart your server.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= f.label :public_key, "ReCaptcha Public Key:" %></td>
|
||||
<td><%= f.text_field :public_key %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><%= f.label :private_key, "ReCaptcha Private Key:" %></td>
|
||||
<td><%= f.text_field :private_key %></td>
|
||||
</tr>
|
||||
</table>
|
||||
<% end %>
|
8
vendor/plugins/registration_captcha/app/views/users/_registration_form_recaptcha.html.erb
vendored
Normal file
8
vendor/plugins/registration_captcha/app/views/users/_registration_form_recaptcha.html.erb
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
<% plugin = Canvas::Plugin.find('registration_form_recaptcha') %>
|
||||
<% if plugin && !plugin.settings[:public_key].blank? && !plugin.settings[:private_key].blank? %>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<%= recaptcha_tags(:public_key => plugin.settings[:public_key], :ssl => true) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
|
@ -0,0 +1,7 @@
|
|||
require 'recaptcha/rails'
|
||||
require 'canvas/plugin'
|
||||
|
||||
Rails.configuration.to_prepare do
|
||||
require_dependency 'users_controller_recaptcha'
|
||||
require_dependency 'register_recaptcha_plugin'
|
||||
end
|
|
@ -0,0 +1,11 @@
|
|||
plugin = Canvas::Plugin.register('registration_form_recaptcha', 'registration_form', {
|
||||
:description => 'captcha plugin for the registration form',
|
||||
:website => 'http://www.instructure.com',
|
||||
:author => 'Instructure',
|
||||
:author_website => 'http://www.instructure.com',
|
||||
:version => 1.0,
|
||||
:settings_partial => 'users/recaptcha_settings',
|
||||
:settings => {
|
||||
:registration_partial => 'users/registration_form_recaptcha'
|
||||
}
|
||||
})
|
|
@ -0,0 +1,11 @@
|
|||
UsersController.class_eval do
|
||||
alias :create_original :create
|
||||
def create
|
||||
@user = User.new(params[:user])
|
||||
recap = Canvas::Plugin.find('registration_form_recaptcha')
|
||||
if recap && !recap.settings[:public_key].blank? && !recap.settings[:private_key].blank?
|
||||
@user = nil if verify_recaptcha(:model => @user, :private_key => recap.settings[:private_key])
|
||||
end
|
||||
create_original
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue