Initial commit

This commit is contained in:
zhongjin
2020-06-15 10:58:47 +08:00
commit 4f1dfe7564
8590 changed files with 1516878 additions and 0 deletions
@@ -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' %>
+131
View File
@@ -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' %>