From: martyntaylor <mtay...@redhat.com>

---
 src/app/controllers/settings_controller.rb         |   26 ++++++++++++++++++++
 src/app/views/settings/index.haml                  |    9 +++++-
 src/app/views/settings/self_service.haml           |   11 +++++++-
 .../20100707000000_create_metadata_objects.rb      |    9 +++++++
 .../self_service_policy_management.feature         |   13 ++++++++++
 .../self_service_policy_management_steps.rb        |    4 +++
 src/features/support/paths.rb                      |    3 ++
 7 files changed, 72 insertions(+), 3 deletions(-)
 create mode 100644 src/features/self_service_policy_management.feature
 create mode 100644 
src/features/step_definitions/self_service_policy_management_steps.rb

diff --git a/src/app/controllers/settings_controller.rb 
b/src/app/controllers/settings_controller.rb
index 84f80be..c9dca83 100644
--- a/src/app/controllers/settings_controller.rb
+++ b/src/app/controllers/settings_controller.rb
@@ -22,12 +22,38 @@
 class SettingsController < ApplicationController
   before_filter :require_user
 
+  # Settings MetaData Keys
+  ALLOW_SELF_SERVICE_LOGINS = "allow_self_service_logins"
+
   def index
+    @is_admin = is_admin?
     @providers = Provider.list_for_user(@current_user, 
Privilege::PROVIDER_VIEW)
   end
 
   def self_service
+    if !is_admin?
+      raise PermissionError.new('You have insufficient privileges to perform 
action.')
+      return
+    end
+
+    @allow_self_service_logins = 
MetadataObject.lookup(ALLOW_SELF_SERVICE_LOGINS) == "true" ? true : false
+
     @providers = Provider.list_for_user(@current_user, 
Privilege::PROVIDER_VIEW)
   end
 
+  def update
+    if !params[ALLOW_SELF_SERVICE_LOGINS]
+      MetadataObject.set(key, 'false')
+    end
+
+    params.each_pair do |key, value|
+      MetadataObject.set(key, value)
+    end
+  end
+
+  private
+  def is_admin?
+    is_admin = @current_user.permissions.collect { |p| p.role }.find { |r| 
r.name == "Administrator" }
+    return is_admin == nil ? false : true
+  end
 end
diff --git a/src/app/views/settings/index.haml 
b/src/app/views/settings/index.haml
index fc7e3b2..6c376f5 100644
--- a/src/app/views/settings/index.haml
+++ b/src/app/views/settings/index.haml
@@ -1,2 +1,7 @@
-%h1 Settings
-Insert Page 3100 Implementation Here.
+%h1
+  Settings
+
+%h2
+  -if @is_admin
+    %a{:href => url_for(:controller => "settings", :action => "self_service")}
+      self service settings
diff --git a/src/app/views/settings/self_service.haml 
b/src/app/views/settings/self_service.haml
index 0185073..0746cd6 100644
--- a/src/app/views/settings/self_service.haml
+++ b/src/app/views/settings/self_service.haml
@@ -1 +1,10 @@
-Insert Page 3170 Implementation Here.
+%h1
+  self service settings page
+
+- form_tag :action => 'update' do |form|
+  %fieldset
+    %legend Self Service Settings
+    %label
+      Allow self service logins
+      = check_box_tag 'allow_self_service_logins', 'true', 
@allow_self_service_logins, :disabled => true
+  = submit_tag "Save", :class => "submit"
\ No newline at end of file
diff --git a/src/db/migrate/20100707000000_create_metadata_objects.rb 
b/src/db/migrate/20100707000000_create_metadata_objects.rb
index 2f3eeb5..50b097c 100644
--- a/src/db/migrate/20100707000000_create_metadata_objects.rb
+++ b/src/db/migrate/20100707000000_create_metadata_objects.rb
@@ -31,6 +31,15 @@ class CreateMetadataObjects < ActiveRecord::Migration
 
     default_zone = Zone.first
     MetadataObject.set("default_zone", default_zone) if default_zone
+
+    #create default settings
+    settings = {"allow_self_service_logins" => "true"}
+    MetadataObject.transaction do
+      settings.each_pair do |key, value|
+        mdo = MetadataObject.new(:key => key, :value => value)
+        mdo.save!
+      end
+    end
   end
 
   def self.down
diff --git a/src/features/self_service_policy_management.feature 
b/src/features/self_service_policy_management.feature
new file mode 100644
index 0000000..c80a23c
--- /dev/null
+++ b/src/features/self_service_policy_management.feature
@@ -0,0 +1,13 @@
+Feature: Cloud Engine Self Service Policy Management
+  In order to manage policy settings for self service
+  As an Admin
+  I must use the policy engine to configure the application
+
+  Background:
+    Given I am an authorised user
+    And I am logged in
+
+  Scenario: Set up Cloud Engine Policy for self-service
+    Given I am on the system settings page
+    When I follow "self service settings"
+    Then I should see "Allow self service logins"
\ No newline at end of file
diff --git 
a/src/features/step_definitions/self_service_policy_management_steps.rb 
b/src/features/step_definitions/self_service_policy_management_steps.rb
new file mode 100644
index 0000000..82590fd
--- /dev/null
+++ b/src/features/step_definitions/self_service_policy_management_steps.rb
@@ -0,0 +1,4 @@
+Given /^I am an admin$/ do
+  @admin_permission = Factory :admin_permission
+  @user = @admin_permission.user
+end
\ No newline at end of file
diff --git a/src/features/support/paths.rb b/src/features/support/paths.rb
index 537dd31..858aa09 100644
--- a/src/features/support/paths.rb
+++ b/src/features/support/paths.rb
@@ -65,6 +65,9 @@ module NavigationHelpers
     when /the new permission page/
       url_for :action => 'new', :controller => 'permissions', :only_path => 
true
 
+    when /the system settings page/
+      url_for :action => 'index', :controller => 'settings', :only_path => true
+
     # Add more mappings here.
     # Here is an example that pulls values out of the Regexp:
     #
-- 
1.7.1.1

_______________________________________________
deltacloud-devel mailing list
deltacloud-devel@lists.fedorahosted.org
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to