X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/28f5fd6ebf7094bf3566b41461f4782e96483bfb..e47a299b1e562a3e6e16cc3c726b84a5a8f542ef:/contrib/gilbert/sites.py diff --git a/contrib/gilbert/sites.py b/contrib/gilbert/sites.py index b3f0df2..8f666f9 100644 --- a/contrib/gilbert/sites.py +++ b/contrib/gilbert/sites.py @@ -49,13 +49,19 @@ class GilbertAuthPlugin(GilbertPlugin): return True @gilbert_method - def passwd(self, request, current_password, new_password, new_password_confirm): - user = request.user - if user.check_password(current_password) and (new_password == new_password_confirm): - user.set_password(new_password) - user.save() - return True - return False + def get_passwd_form(self, request): + from django.contrib.auth.forms import PasswordChangeForm + return PasswordChangeForm(request.user).as_ext() + + @gilbert_method(form_handler=True) + def submit_passwd_form(self, request): + from django.contrib.auth.forms import PasswordChangeForm + form = PasswordChangeForm(request.user, data=request.POST) + if form.is_valid(): + form.save() + return {'success': True} + else: + return {'success': False, 'errors': form.errors} @gilbert_method def whoami(self, request): @@ -149,6 +155,7 @@ class GilbertSite(object): model_methods.append({ 'name': method.name, 'len': method.argc, + 'formHandler': method.form_handler, }) if model_methods: model_actions[model_name] = model_methods @@ -170,6 +177,7 @@ class GilbertSite(object): plugin_methods.append({ 'name': method.name, 'len': method.argc, + 'formHandler': method.form_handler, }) if plugin_methods: plugin_actions[plugin_name] = plugin_methods @@ -185,21 +193,33 @@ class GilbertSite(object): submitted_form = True if submitted_form: - post_dict = dict(request.POST) ext_request = { - 'action': post_dict.pop('extAction'), - 'method': post_dict.pop('extMethod'), - 'type': post_dict.pop('extType'), - 'tid': post_dict.pop('extTID'), - 'upload': post_dict.pop('extUpload', False), + 'action': request.POST.get('extAction'), + 'method': request.POST.get('extMethod'), + 'type': request.POST.get('extType'), + 'tid': request.POST.get('extTID'), + 'upload': request.POST.get('extUpload', False), 'data': None, - 'kwdata': post_dict } + response = self.handle_ext_request(request, ext_request, app_label) else: - ext_request = json.loads(request.raw_post_data) - ext_request['upload'] = False - ext_request['kwdata'] = None + ext_requests = json.loads(request.raw_post_data) + if type(ext_requests) is dict: + ext_requests['upload'] = False + response = self.handle_ext_request(request, ext_requests, app_label) + else: + responses = [] + for ext_request in ext_requests: + ext_request['upload'] = False + responses.append(self.handle_ext_request(request, ext_request, app_label)) + response = responses + if submitted_form: + if ext_request['upload'] is True: + return HttpResponse(('' % json.dumps(response))) + return HttpResponse(json.dumps(response), content_type=('application/json; charset=%s' % settings.DEFAULT_CHARSET)) + + def handle_ext_request(self, request, ext_request, app_label=None): try: plugin = None @@ -219,14 +239,10 @@ class GilbertSite(object): if method is None or (method.restricted and not self.has_permission(request)): raise NotImplementedError('The method named \'%s\' is not available' % method.name) - response = {'type': 'rpc', 'tid': ext_request['tid'], 'action': ext_request['action'], 'method': ext_request['method'], 'result': method(request, *(ext_request['data'] or []), **(ext_request['kwdata'] or {}))} + return {'type': 'rpc', 'tid': ext_request['tid'], 'action': ext_request['action'], 'method': ext_request['method'], 'result': method(request, *(ext_request['data'] or []))} except: exc_type, exc_value, exc_traceback = sys.exc_info() - response = {'type': 'exception', 'tid': ext_request['tid'], 'message': ('%s: %s' % (exc_type, exc_value)), 'where': format_tb(exc_traceback)[0]} - - if submitted_form: - return HttpResponse(('' % json.dumps(response))) - return HttpResponse(json.dumps(response), content_type=('application/json; charset=%s' % settings.DEFAULT_CHARSET)) + return {'type': 'exception', 'tid': ext_request['tid'], 'message': ('%s: %s' % (exc_type, exc_value)), 'where': format_tb(exc_traceback)[0]} site = GilbertSite() \ No newline at end of file