1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-22 18:50:08 +03:00

Merge branch 'feature-573'

Conflicts:
	src/sunstone/views/index.erb
This commit is contained in:
Jaime Melis 2011-06-24 15:58:53 +02:00
commit 801bb595ac
7 changed files with 172 additions and 25 deletions

View File

@ -212,6 +212,7 @@ SUNSTONE_DIRS="$SUNSTONE_LOCATION/models \
$SUNSTONE_LOCATION/public \
$SUNSTONE_LOCATION/public/js \
$SUNSTONE_LOCATION/public/js/plugins \
$SUNSTONE_LOCATION/public/js/user-plugins \
$SUNSTONE_LOCATION/public/css \
$SUNSTONE_LOCATION/public/vendor \
$SUNSTONE_LOCATION/public/vendor/jQueryLayout \
@ -223,7 +224,8 @@ SUNSTONE_DIRS="$SUNSTONE_LOCATION/models \
$SUNSTONE_LOCATION/share \
$SUNSTONE_LOCATION/share/OneMonitor \
$SUNSTONE_LOCATION/public/images \
$SUNSTONE_LOCATION/templates"
$SUNSTONE_LOCATION/templates \
$SUNSTONE_LOCATION/views"
LIB_ECO_CLIENT_DIRS="$LIB_LOCATION/ruby \
$LIB_LOCATION/ruby/OpenNebula \
@ -326,6 +328,7 @@ INSTALL_SUNSTONE_FILES=(
SUNSTONE_MODELS_FILES:$SUNSTONE_LOCATION/models
SUNSTONE_MODELS_JSON_FILES:$SUNSTONE_LOCATION/models/OpenNebulaJSON
SUNSTONE_TEMPLATE_FILES:$SUNSTONE_LOCATION/templates
SUNSTONE_VIEWS_FILES:$SUNSTONE_LOCATION/views
SUNSTONE_PUBLIC_JS_FILES:$SUNSTONE_LOCATION/public/js
SUNSTONE_PUBLIC_JS_PLUGINS_FILES:$SUNSTONE_LOCATION/public/js/plugins
SUNSTONE_PUBLIC_CSS_FILES:$SUNSTONE_LOCATION/public/css
@ -791,10 +794,12 @@ SUNSTONE_FILES="src/sunstone/config.ru \
SUNSTONE_BIN_FILES="src/sunstone/bin/sunstone-server"
SUNSTONE_ETC_FILES="src/sunstone/etc/sunstone-server.conf"
SUNSTONE_ETC_FILES="src/sunstone/etc/sunstone-server.conf \
src/sunstone/etc/sunstone-plugins.yaml"
SUNSTONE_MODELS_FILES="src/sunstone/models/OpenNebulaJSON.rb \
src/sunstone/models/SunstoneServer.rb"
src/sunstone/models/SunstoneServer.rb \
src/sunstone/models/SunstonePlugins.rb"
SUNSTONE_MODELS_JSON_FILES="src/sunstone/models/OpenNebulaJSON/HostJSON.rb \
src/sunstone/models/OpenNebulaJSON/ImageJSON.rb \
@ -806,8 +811,9 @@ SUNSTONE_MODELS_JSON_FILES="src/sunstone/models/OpenNebulaJSON/HostJSON.rb \
src/sunstone/models/OpenNebulaJSON/TemplateJSON.rb \
src/sunstone/models/OpenNebulaJSON/VirtualNetworkJSON.rb"
SUNSTONE_TEMPLATE_FILES="src/sunstone/templates/index.html \
src/sunstone/templates/login.html"
SUNSTONE_TEMPLATE_FILES="src/sunstone/templates/login.html"
SUNSTONE_VIEWS_FILES="src/sunstone/views/index.erb"
SUNSTONE_PUBLIC_JS_FILES="src/sunstone/public/js/layout.js \
src/sunstone/public/js/login.js \

View File

@ -16,8 +16,9 @@
# limitations under the License. #
#--------------------------------------------------------------------------- #
# TBD Change path for intallation tree
$: << File.dirname(__FILE__)
SUNSTONE_ROOT_DIR = File.dirname(__FILE__)
$: << SUNSTONE_ROOT_DIR
require 'sunstone-server.rb'

View File

@ -0,0 +1,33 @@
---
- plugins/dashboard-tab.js:
:ALL: true
:user:
:group:
- plugins/hosts-tab.js:
:ALL: true
:user:
:group:
- plugins/groups-tab.js:
:ALL: true
:user:
:group:
- plugins/templates-tab.js:
:ALL: true
:user:
:group:
- plugins/vms-tab.js:
:ALL: true
:user:
:group:
- plugins/vnets-tab.js:
:ALL: true
:user:
:group:
- plugins/images-tab.js:
:ALL: true
:user:
:group:
- plugins/users-tab.js:
:ALL: true
:user:
:group:

View File

@ -0,0 +1,102 @@
# -------------------------------------------------------------------------- #
# Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
require 'yaml'
require 'json'
class SunstonePlugins
USER_PLUGIN_POLICY = false # or true to enable them by default
attr_reader :plugins_conf
def initialize
load_conf
check_plugins
end
def load_conf
@plugins_conf = YAML.load_file(PLUGIN_CONFIGURATION_FILE)
end
def check_plugins
base_path = SUNSTONE_ROOT_DIR+'/public/js/'
@installed_plugins = Array.new
# read user plugins
modified = false
Dir[base_path+'user-plugins/*.js'].each do |p_path|
m = p_path.match(/^#{base_path}(.*)$/)
if m and plugin = m[1]
@installed_plugins << plugin
if !plugins.include? plugin
@plugins_conf << {plugin=>{:ALL => USER_PLUGIN_POLICY,
:user => nil,
:group => nil}}
modified = true
end
end
end
write_conf if modified
# read base plugins
Dir[base_path+'plugins/*.js'].each do |p_path|
m = p_path.match(/^#{base_path}(.*)$/)
if m and plugin = m[1]
@installed_plugins << plugin
end
end
end
def plugins
@plugins_conf.collect{|p| p.keys[0]}
end
def installed?(plugin)
@installed_plugins.include? plugin
end
def authorized_plugins(user,group=nil)
auth_plugins = {"user-plugins"=>Array.new, "plugins"=>Array.new}
@plugins_conf.each do |plugin_conf|
plugin = plugin_conf.keys.first
perms = plugin_conf[plugin]
if installed?(plugin)
p_path, p_name = plugin.split('/')
if perms[:user] and perms[:user][user]
auth_plugins[p_path] << p_name
elsif perms[:group] and perms[:group][group]
auth_plugins[p_path] << p_name
elsif perms[:ALL]
auth_plugins[p_path] << p_name
end
end
end
auth_plugins
end
def write_conf
File.open(PLUGIN_CONFIGURATION_FILE,'w') do |f|
f.write(@plugins_conf.to_yaml)
end
end
def to_json
@plugins_conf.to_json
end
end

View File

@ -16,8 +16,6 @@
# limitations under the License. #
#--------------------------------------------------------------------------- #
$: << File.dirname(__FILE__)
require 'HostMonitor.rb'
require 'VMMonitor.rb'

View File

@ -15,7 +15,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
#--------------------------------------------------------------------------- #
ONE_LOCATION = ENV["ONE_LOCATION"]
@ -24,28 +24,32 @@ if !ONE_LOCATION
VAR_LOCATION = "/var/lib/one"
RUBY_LIB_LOCATION = "/usr/lib/one/ruby"
CONFIGURATION_FILE = "/etc/one/sunstone-server.conf"
PLUGIN_CONFIGURATION_FILE = "/etc/sunstone-plugins.yaml"
else
VAR_LOCATION = ONE_LOCATION+"/var"
LOG_LOCATION = ONE_LOCATION+"/var"
RUBY_LIB_LOCATION = ONE_LOCATION+"/lib/ruby"
CONFIGURATION_FILE = ONE_LOCATION+"/etc/sunstone-server.conf"
PLUGIN_CONFIGURATION_FILE = ONE_LOCATION+"/etc/sunstone-plugins.yaml"
end
HOST_LOG_FOLDER = LOG_LOCATION+"/OneMonitor/host"
VM_LOG_FOLDER = LOG_LOCATION+"/OneMonitor/vm"
$: << RUBY_LIB_LOCATION
$: << File.dirname(__FILE__)+'/models'
$: << File.dirname(__FILE__)+'/share/OneMonitor'
$: << SUNSTONE_ROOT_DIR+'/models'
$: << SUNSTONE_ROOT_DIR+'/share/OneMonitor'
##############################################################################
# Required libraries
##############################################################################
require 'rubygems'
require 'sinatra'
require 'erb'
require 'cloud/Configuration'
require 'SunstoneServer'
require 'SunstonePlugins'
set :config, Configuration.new(CONFIGURATION_FILE)
@ -95,7 +99,6 @@ helpers do
session.clear
return [204, ""]
end
end
before do
@ -133,11 +136,14 @@ get '/' do
:value=>"#{session[:user_id]}",
:expires=>time)
File.read(File.dirname(__FILE__)+'/templates/index.html')
p = SunstonePlugins.new
@plugins = p.authorized_plugins(session[:user])
erb :index
end
get '/login' do
File.read(File.dirname(__FILE__)+'/templates/login.html')
File.read(SUNSTONE_ROOT_DIR+'/templates/login.html')
end
##############################################################################

View File

@ -27,17 +27,18 @@
<script type="text/javascript" src="js/sunstone.js"></script>
<script type="text/javascript" src="js/sunstone-util.js"></script>
<!--Base plugins-->
<script type="text/javascript" src="js/plugins/dashboard-tab.js"></script>
<script type="text/javascript" src="js/plugins/hosts-tab.js"></script>
<script type="text/javascript" src="js/plugins/groups-tab.js"></script>
<script type="text/javascript" src="js/plugins/templates-tab.js"></script>
<script type="text/javascript" src="js/plugins/vms-tab.js"></script>
<script type="text/javascript" src="js/plugins/vnets-tab.js"></script>
<script type="text/javascript" src="js/plugins/images-tab.js"></script>
<script type="text/javascript" src="js/plugins/users-tab.js"></script>
<!-- Base Plugins -->
<% @plugins["plugins"].each do |plugin| %>
<script type="text/javascript" src="/js/plugins/<%= plugin %>"></script>
<% end %>
<!--<script type="text/javascript" src="js/plugins/dummy-plugin.js"></script>-->
<!-- End Base Plugins -->
<!-- User Plugins -->
<% @plugins["user-plugins"].each do |plugin| %>
<script type="text/javascript" src="/js/user-plugins/<%= plugin %>"></script>
<% end %>
<!-- End User Plugins -->
</head>
<body>