Skip to content

Commit

Permalink
Merge branch 'webconfig' into v3.0-devel
Browse files Browse the repository at this point in the history
  • Loading branch information
greghaynes committed May 27, 2010
2 parents e1f7030 + 5663cc2 commit 29495a6
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 23 deletions.
1 change: 1 addition & 0 deletions src/pyscripts/plugins/JSONAPI/accounts.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from twisted.web import resource

from xsbs.http.jsonapi import JsonSite, JsonUserSite, response
from xsbs.users.privilege import isUserMaster, isUserAdmin

try:
import json
Expand Down
27 changes: 19 additions & 8 deletions src/pyscripts/plugins/JSONAPI/admin/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class ConfigPluginSite(JsonAdminSite):
def __init__(self, plugin_name):
JsonAdminSite.__init__(self)
self.plugin_name = plugin_name
def render_admin_JSON(self, request):
def render_admin_JSON(self, request, user):
return json.dumps({
'plugin': self.plugin_name,
'sections': pluginSections(self.plugin_name)
Expand All @@ -21,19 +21,30 @@ def __init__(self, plugin_name, section_name):
JsonAdminSite.__init__(self)
self.plugin_name = plugin_name
self.section_name = section_name
def render_admin_JSON(self, request):
def render_admin_JSON(self, request, user):
return json.dumps({
'plugin': self.plugin_name,
'section': self.section_name,
'options': sectionOptions(self.plugin_name, self.section_name)
})

class ConfigSite(JsonAdminSite):
def __init__(self):
JsonAdminSite.__init__(self)
self.plugin_names = []
for name in pluginNames():
pluginConfigSite = ConfigPluginSite(name)
for section in pluginSections(name):
pluginConfigSite.putChild(section, ConfigSectionSite(name, section))
self.putChild(name, pluginConfigSite)
if name not in self.plugin_names:
self.plugin_names.append(name)
def render_admin_JSON(self, request, user):
return json.dumps({
'plugins': self.plugin_names
})

def setup(site):
configSite = JsonAdminSite()
for name in pluginNames():
pluginConfigSite = ConfigPluginSite(name)
for section in pluginSections(name):
pluginConfigSite.putChild(section, ConfigSectionSite(name, section))
configSite.putChild(name, pluginConfigSite)
configSite = ConfigSite()
site.putChild('config', configSite)

4 changes: 2 additions & 2 deletions src/pyscripts/xsbs/http/jsonapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ def render_user_JSON(self, request, user):
class JsonAdminSite(JsonUserSite):
def render_user_JSON(self, request, user):
if not isUserAdmin(user.id):
return response('insufficient_permissions', 'User does not have master permissions')
return self.render_master_JSON(request, user)
return response('insufficient_permissions', 'User does not have admin permissions')
return self.render_admin_JSON(request, user)

site = JsonSite()
httpServer.root_site.putChild('json', site)
Expand Down
36 changes: 24 additions & 12 deletions src/pyscripts/xsbs/settings.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from ConfigParser import ConfigParser, NoOptionError, NoSectionError
from elixir import Entity, Field, String, Text
from elixir import Entity, Field, String, Text, session

# Set this to wherever your configuration files lie. Must end in a /
configuration_path = 'Config/'
Expand All @@ -15,27 +15,39 @@ class ConfigOption(Entity):
name = Field(String(30))
value = Field(Text)

def loadPluginConfig(dict, plugin):
def loadPluginConfig(cfg_dict, plugin):
'''Accepts a dictionary and plugin name.
All stored values for the plugin will be loaded into dict[section][option] = value.
This allows you to pass a dictionary pre-loaded with default values. '''
options = ConfigOption.query.filter_by(plugin=plugin).all()
for option in options:
try:
sectdict = dict[option.section]
except KeyError:
dict[options.section] = {}
sectdict = dict[option.section]
sectdict[option.name] = option.value
if len(options) == 0:
for section, sectdict in cfg_dict.items():
for option, value in sectdict.items():
db_opt = ConfigOption(plugin=plugin, section=section, name=option, value=value)
session.commit()
else:
for option in options:
try:
sectdict = cfg_dict[option.section]
except KeyError:
cfg_dict[options.section] = {}
sectdict = cfg_dict[option.section]
sectdict[option.name] = option.value

def strip_arr(l):
s_l = []
for item in l:
s_l.append(item[0])
return s_l

def pluginNames():
return []
return strip_arr(session.query(ConfigOption.plugin))

def pluginSections(plugin_name):
return []
return strip_arr(session.query(ConfigOption.section).filter_by(plugin=plugin_name))

def sectionOptions(plugin_name, section):
return []
return strip_arr(session.query(ConfigOption.section).filter_by(plugin=plugin_name).filter_by(section=section))

def setOption(plugin_name, section, option, value):
pass
Expand Down
2 changes: 1 addition & 1 deletion tools/http/js/xsbs.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ function adminLoginDialog(hostname, callback) {
$('#login_status').empty();
$('#login_status').html('Trying login...');
var username = $('#username_input').val();
var password = $('#password_input').val();
var password = $('#password').val();
tryLogin(hostname, username, password,
function(data) {
error_code = data.error
Expand Down

0 comments on commit 29495a6

Please sign in to comment.