Initial commit
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
<div class="FormAccount-title">
|
||||
<p class="FormAccount-titleText">LDAP Configuration</p>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">Host</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.host %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">Port</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.port %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">Encryption</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.encryption %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">Certificate file (if any)</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.ca_file %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">SSL Version</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.ssl_version %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">Connection user</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.connection_user %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">Connection password</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.connection_password %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">User Id. field</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.user_id_field %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">Username field</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.username_field %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">User email field</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.email_field %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">Domain bases</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.domain_bases %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">Additional search filter</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.additional_search_filter %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">User object class</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.user_object_class %></div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel"><label class="FormAccount-label">Group object class</label></div>
|
||||
<div class="FormAccount-rowData"><%= @ldap_configuration.group_object_class %></div>
|
||||
</div>
|
||||
@@ -0,0 +1,51 @@
|
||||
<%#
|
||||
# @param title [String] (local) page html title to be appended to organization name
|
||||
# @params settings_body [String] (yielded content) HTML content for the main section
|
||||
%>
|
||||
|
||||
<% content_for(:page_title) do %>
|
||||
<%= current_user.organization.name %> <%= title %> |
|
||||
<% end %>
|
||||
<%= content_for(:js) do %>
|
||||
<script type="text/javascript">
|
||||
var username = "<%= current_user.username %>";
|
||||
var organization_data = {
|
||||
base_url: "<%= CartoDB.url(self, 'create_organization_user', user: current_user) %>", // HACK!!!
|
||||
id: "<%= current_user.organization.id %>",
|
||||
quota_in_bytes: <%= current_user.organization.quota_in_bytes %>,
|
||||
seats: <%= current_user.organization.seats %>,
|
||||
viewer_seats: <%= current_user.organization.viewer_seats %>,
|
||||
assigned_seats: <%= current_user.organization.assigned_seats %>,
|
||||
assigned_viewer_seats: <%= current_user.organization.assigned_viewer_seats %>,
|
||||
owner: { id: "<%= current_user.organization.owner.id %>" },
|
||||
admins: <%= current_user.organization.users.select(&:org_admin).map { |u| { id: u.id } }.to_json.html_safe %>,
|
||||
signup_enabled: <%= current_user.organization.auth_username_password_enabled || current_user.organization.auth_google_enabled %>
|
||||
};
|
||||
var config = <%= safe_js_object frontend_config %>;
|
||||
var authenticity_token = "<%= form_authenticity_token %>";
|
||||
var user_data = <%= safe_js_object current_user.data.to_json.html_safe %>;
|
||||
<% if @avatar_valid_extensions %>
|
||||
var avatar_valid_extensions = <%= raw @avatar_valid_extensions %>;
|
||||
<% end %>
|
||||
var mobile_enabled = "<%= current_user.mobile_sdk_enabled? %>";
|
||||
var organization_notifications = <%= safe_js_object @organization_notifications.to_json %>;
|
||||
</script>
|
||||
<%= javascript_include_tag 'common', 'common_vendor', 'organization' %>
|
||||
<% end %>
|
||||
<%= content_for(:css) do %>
|
||||
<%= stylesheet_link_tag 'organization.css', :media => 'all' %>
|
||||
<% end %>
|
||||
|
||||
<%= render :partial => 'shared/flash_message' %>
|
||||
|
||||
<div class="CDB-Text FormAccount-Section u-inner">
|
||||
<%= render partial: 'admin/shared/pages_subheader' %>
|
||||
|
||||
<div class="FormAccount-Content CDB-Text">
|
||||
<%= render partial: 'admin/shared/org_subheader' %>
|
||||
|
||||
<%= yield :settings_body %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= render 'admin/shared/new_private_footer' %>
|
||||
@@ -0,0 +1,131 @@
|
||||
<% content_for :settings_body do %>
|
||||
<div class="FormAccount-container">
|
||||
<% if @ldap_configuration %>
|
||||
<%= render :partial => 'admin/organizations/ldap_configuration' %>
|
||||
<% else %>
|
||||
<%= form_for @organization, url: CartoDB.url(self, 'organization_auth_update', user: current_user), multipart: true do |f| %>
|
||||
<%= csrf_meta_tags %>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel">
|
||||
<label class="CDB-Text CDB-Size-medium is-semibold u-mainTextColor">Whitelisted email domains</label>
|
||||
</div>
|
||||
<div class="FormAccount-rowData">
|
||||
<div class="FormAccount-tags js-domains">
|
||||
<ul class="CDB-Text CDB-Size-medium FormAccount-tagsList js-domainsList">
|
||||
<span class= "CDB-Text CDB-Size-small u-altTextColor FormAccount-tagsList--placeholder js-placeholder">Only valid domains, wildcard (*) accepted (ex. *.carto.com)</span>
|
||||
</ul>
|
||||
</div>
|
||||
<%= f.hidden_field :whitelisted_email_domains, :value => "#{ @organization[:whitelisted_email_domains].join(',') if !@organization[:whitelisted_email_domains].blank? }", :class => "js-whitelist CDB-InputText CDB-Text", :placeholder => "Only valid domains, wildcard (*) accepted (ex. *.carto.com)" %>
|
||||
<div class="u-flex u-lSpace--xl">
|
||||
<% if @organization.errors[:whitelisted_email_domains].present? %>
|
||||
<p class="CDB-Text FormAccount-rowInfoText FormAccount-rowInfoText--error u-tSpace"><%= @organization.errors[:whitelisted_email_domains].first%></p>
|
||||
<% end %>
|
||||
<p class="CDB-Text CDB-Size-small u-altTextColor">If empty, login and signup pages will be disabled</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel">
|
||||
<label class="CDB-Text CDB-Size-medium is-semibold u-mainTextColor">Username / password</label>
|
||||
</div>
|
||||
<div class="FormAccount-rowData">
|
||||
<div class="Toggler">
|
||||
<%= f.check_box :auth_username_password_enabled, :id => "auth_username_password_enabled" %>
|
||||
<%= label_tag(:auth_username_password_enabled, '') %>
|
||||
</div>
|
||||
<div class="u-flex u-lSpace--xl">
|
||||
<p class="CDB-Text CDB-Size-small u-altTextColor">Allow users to signup with their own username & email submission</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel">
|
||||
<label class="CDB-Text CDB-Size-medium is-semibold u-mainTextColor">Google Apps Login</label>
|
||||
</div>
|
||||
<div class="FormAccount-rowData">
|
||||
<div class="Toggler">
|
||||
<%= f.check_box :auth_google_enabled, :id => "auth_google_enabled" %>
|
||||
<%= label_tag(:auth_google_enabled, '') %>
|
||||
</div>
|
||||
<div class="u-flex u-lSpace--xl">
|
||||
<p class="CDB-Text CDB-Size-small u-altTextColor">Allow users to signup with their own Google domain account</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel">
|
||||
<label class="CDB-Text CDB-Size-medium is-semibold u-mainTextColor">GitHub Login</label>
|
||||
</div>
|
||||
<div class="FormAccount-rowData">
|
||||
<div class="Toggler">
|
||||
<%= f.check_box :auth_github_enabled, :id => "auth_github_enabled" %>
|
||||
<%= label_tag(:auth_github_enabled, '') %>
|
||||
</div>
|
||||
<div class="u-flex u-lSpace--xl">
|
||||
<p class="CDB-Text CDB-Size-small u-altTextColor">Allow users to signup with their own GitHub account</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel">
|
||||
<label class="CDB-Text CDB-Size-medium is-semibold u-mainTextColor">Strong Passwords</label>
|
||||
</div>
|
||||
<div class="FormAccount-rowData">
|
||||
<div class="Toggler">
|
||||
<%= f.check_box :strong_passwords_enabled, :id => "strong_passwords_enabled" %>
|
||||
<%= label_tag(:strong_passwords_enabled, '') %>
|
||||
</div>
|
||||
<div class="u-flex u-lSpace--xl">
|
||||
<p class="CDB-Text CDB-Size-small u-altTextColor">Passwords must contain 8 characters, and require a combination of letters, numbers, and/or special characters.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-row">
|
||||
<div class="FormAccount-rowLabel">
|
||||
<label class="CDB-Text CDB-Size-medium is-semibold u-mainTextColor">Password Expiration</label>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-rowData">
|
||||
<div class="FormAccount-inputSuffix">
|
||||
<%= f.text_field :password_expiration_in_d,
|
||||
:type => "number",
|
||||
:class => "CDB-InputText CDB-Text FormAccount-input FormAccount-input--number",
|
||||
:placeholder => "#{@organization.default_password_expiration_in_d || 180}", :min => 1, :max => 365,
|
||||
:value => "#{@organization.password_expiration_in_d}",
|
||||
:disabled => @organization.password_expiration_in_d ? false : true %>
|
||||
<label class="CDB-Text CDB-Size-small u-altTextColor">days</label>
|
||||
</div>
|
||||
|
||||
<div class="CDB-Legend u-upperCase CDB-Text is-semibold CDB-Size-small u-lSpace--xxl">
|
||||
<div class="u-flex u-alignCenter">
|
||||
<div class="u-iBlock u-rSpace--m">
|
||||
<input class="CDB-Checkbox js-input"
|
||||
type="checkbox"
|
||||
id="unlimited_password_expiration"
|
||||
<%= !@organization.password_expiration_in_d ? 'checked' : '' %> />
|
||||
<span class="u-iBlock CDB-Checkbox-face"></span>
|
||||
</div>
|
||||
<label for="unlimited_password_expiration">Unlimited</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-footer">
|
||||
<p class="FormAccount-footerText"></p>
|
||||
<button type="submit" class="CDB-Button CDB-Button--primary js-save">
|
||||
<span class="CDB-Button-Text CDB-Text is-semibold CDB-Size-small u-upperCase">Save changes</span>
|
||||
</button>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<%= render template: 'admin/organizations/_organization_settings', locals: { title: 'auth settings' } %>
|
||||
@@ -0,0 +1,6 @@
|
||||
<% content_for :settings_body do %>
|
||||
<div class="js-groups-content">
|
||||
<%= render partial: 'admin/shared/loading', locals: { title: 'Loading assets' } %>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= render template: 'admin/organizations/_organization_settings', locals: { title: 'groups' } %>
|
||||
@@ -0,0 +1,102 @@
|
||||
<% content_for :settings_body do %>
|
||||
<div class="FormAccount-container js-OrganizationNotification">
|
||||
<%= form_for @notification, url: CartoDB.url(self, 'new_organization_notification_admin', user: current_user) do |f| %>
|
||||
<%= csrf_meta_tags %>
|
||||
|
||||
<div class="FormAccount-row FormAccount-row--smallMarginBottom">
|
||||
<div class="FormAccount-rowLabel">
|
||||
<label class="CDB-Text CDB-Size-medium is-semibold u-mainTextColor">Notification Description</label>
|
||||
</div>
|
||||
<div class="FormAccount-rowData">
|
||||
<%= f.text_area :body, :class => "CDB-Textarea CDB-Text FormAccount-textarea FormAccount-input FormAccount-input--totalwidth OrganizationNotifications-textarea js-textarea" %>
|
||||
<div class="Md-container" data-title="*Italic*, **Bold** and [Link](http://url.com) supported">
|
||||
<span class="Md-icon u-rSpace--m">
|
||||
<svg width="16px" height="8px" viewBox="0 0 16 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="Md-buttonInner">
|
||||
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g fill-rule="nonzero" fill="#FFFFFF">
|
||||
<polygon points="0 7.01999998 0 0 2.06470588 0 4.12941175 2.58088235 6.19411763 0 8.25882351 0 8.25882351 7.01999998 6.19411763 7.01999998 6.19411763 2.99382352 4.12941175 5.57470587 2.06470588 2.99382352 2.06470588 7.01999998"></polygon>
|
||||
<polygon points="12.9044117 7.01999998 9.80735291 3.61323528 11.8720588 3.61323528 11.8720588 0 13.9367647 0 13.9367647 3.61323528 16.0014705 3.61323528"></polygon>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
</span>
|
||||
|
||||
<p class="Md-text CDB-Text CDB-Size-small u-altTextColor">Supported markup</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="FormAccount-rowInfo">
|
||||
<p class="FormAccount-rowInfoText"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="OrganizationNotification-submissionRow js-update">
|
||||
<div class="FormAccount-rowData">
|
||||
<div class="CDB-Text CDB-Size-medium u-rSpace--xl">
|
||||
<label class="CDB-Text CDB-Size-medium is-semibold u-mainTextColor">Send to:</label>
|
||||
<% Carto::Notification::RECIPIENTS.each do |recipient| %>
|
||||
<input class="CDB-Radio u-lSpace--xl" type="radio" name="carto_notification[recipients]" value="<%= recipient %>" <%= recipient == @notification.recipients ? 'checked' : '' %> required="true">
|
||||
<span class="u-iBlock CDB-Radio-face u-lSpace--xl"></span>
|
||||
<label class="u-iBlock u-lSpace CDB-Text CDB-Size-medium u-secondaryTextColor is-semibold"><%= recipient.capitalize %></label>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="FormAccount-rowData js-send">
|
||||
<p class="Md-counter CDB-Text CDB-Size-medium u-secondaryTextColor u-rSpace--xl">140</p>
|
||||
|
||||
<button type="submit" class="OrganizationNotifications-button CDB-Button CDB-Button--primary is-disabled js-save">
|
||||
<div class="CDB-Button-Text CDB-Text is-semibold CDB-Size-small u-upperCase u-flex">Send</div>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if @notifications.size > 0 %>
|
||||
<div class="OrganizationNotifications">
|
||||
<div class="FormAccount-title">
|
||||
<p class="FormAccount-titleText">
|
||||
Past Notifications
|
||||
<span class="FormAccount-subtitleText">
|
||||
(stores up to 12 most recent notifications)
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<span class="FormAccount-separator"></span>
|
||||
|
||||
<ul class="NotificationsList">
|
||||
<% @notifications.each do |notification| %>
|
||||
<li class="NotificationsList-item js-NotificationsList-item">
|
||||
<div class="NotificationsList-itemCategory NotificationsList-itemCategory--<%= notification.icon %>">
|
||||
</div>
|
||||
|
||||
<div class="NotificationsList-itemInfo">
|
||||
<div class="NotificationsList-itemPrimaryInfo">
|
||||
<div class="NotificationsList-itemTitle CDB-Text CDB-Size-large u-mainTextColor js-html_body" data-body="<%= notification.body %>">
|
||||
<%= raw notification.html_body %>
|
||||
</div>
|
||||
|
||||
<div class="NotificationsList-itemDescription">
|
||||
<p class="CDB-Text CDB-Size-medium u-altTextColor"><abbr title="<%= notification.created_at %>" class="u-rSpace--xl"><%= notification.created_at.strftime("%d/%m/%Y") %></abbr> User type: <span class="js-recipients" data-recipients="<%= notification.recipients %>"><%= notification.recipients.capitalize %></span></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="NotificationsList-itemSecondaryInfo">
|
||||
<div class="NotificationsList-itemMeta CDB-Text CDB-Size-small">
|
||||
<button class="FormAccount-link NotificationsList-itemLink js-resend">Resend</button>
|
||||
</div>
|
||||
|
||||
<div class="NotificationsList-itemMeta CDB-Text CDB-Size-small">
|
||||
<button class="FormAccount-link NotificationsList-itemLink NotificationsList-itemLink--remove js-remove" data-id="<%= notification.id %>">Remove for all users</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<%= render template: 'admin/organizations/_organization_settings', locals: { title: 'notifications' } %>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,45 @@
|
||||
<% content_for(:page_title) do %>
|
||||
<%= current_user.organization.name %> |
|
||||
<% end %>
|
||||
<%= content_for(:js) do %>
|
||||
<script type="text/javascript">
|
||||
var username = "<%= current_user.username %>";
|
||||
var type = "oauth";
|
||||
var config = <%= safe_js_object frontend_config %>;
|
||||
var organization_data = {
|
||||
base_url: "<%= CartoDB.url(self, 'create_organization_user', user: current_user) %>", // HACK!!!
|
||||
id: "<%= current_user.organization.id %>",
|
||||
quota_in_bytes: <%= current_user.organization.quota_in_bytes %>,
|
||||
seats: <%= current_user.organization.seats %>,
|
||||
viewer_seats: <%= current_user.organization.viewer_seats %>,
|
||||
assigned_seats: <%= current_user.organization.assigned_seats %>,
|
||||
assigned_viewer_seats: <%= current_user.organization.assigned_viewer_seats %>,
|
||||
owner: { id: "<%= current_user.organization.owner.id %>" },
|
||||
admins: <%= current_user.organization.users.select(&:org_admin).map { |u| { id: u.id } }.to_json.html_safe %>,
|
||||
signup_enabled: <%= current_user.organization.auth_username_password_enabled || current_user.organization.auth_google_enabled %>
|
||||
};
|
||||
var user_data = <%= safe_js_object current_user.data.to_json.html_safe %>;
|
||||
var upgrade_url = "<%= current_user.upgrade_url(request.protocol) %>";
|
||||
var organization_notifications = <%= safe_js_object @organization_notifications.to_json %>;
|
||||
</script>
|
||||
<%= javascript_include_tag 'common', 'common_vendor', 'organization' %>
|
||||
<% end %>
|
||||
<%= content_for(:css) do %>
|
||||
<%= stylesheet_link_tag 'organization.css', :media => 'all' %>
|
||||
<% end %>
|
||||
|
||||
<%= render :partial => 'shared/flash_message' %>
|
||||
|
||||
<div class="FormAccount-Section u-inner">
|
||||
<%= render :partial => 'admin/shared/pages_subheader' %>
|
||||
|
||||
<div class="FormAccount-Content">
|
||||
<%= render :partial => 'admin/shared/org_subheader' %>
|
||||
|
||||
<div class="FormAccount-container FormAccount-container--short">
|
||||
<div class="FormAccount js-orgUsersList"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= render 'admin/shared/new_private_footer' %>
|
||||
Reference in New Issue
Block a user