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:
commit
801bb595ac
16
install.sh
16
install.sh
@ -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 \
|
||||
|
@ -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'
|
||||
|
||||
|
33
src/sunstone/etc/sunstone-plugins.yaml
Normal file
33
src/sunstone/etc/sunstone-plugins.yaml
Normal 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:
|
102
src/sunstone/models/SunstonePlugins.rb
Normal file
102
src/sunstone/models/SunstonePlugins.rb
Normal 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
|
@ -16,8 +16,6 @@
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
$: << File.dirname(__FILE__)
|
||||
|
||||
require 'HostMonitor.rb'
|
||||
require 'VMMonitor.rb'
|
||||
|
||||
|
@ -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
|
||||
|
||||
##############################################################################
|
||||
|
@ -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>
|
Loading…
x
Reference in New Issue
Block a user