Source code for waeup.kofa.webservices

## $Id: webservices.py 10477 2013-08-10 01:10:04Z uli $
##
## Copyright (C) 2012 Uli Fouquet & Henrik Bettermann
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##

import grok
from zope.component import getUtility
from zope.catalog.interfaces import ICatalog
from waeup.kofa.payments.interfaces import IPayer
from waeup.kofa.interfaces import IUniversity, academic_sessions_vocab

[docs]class PaymentDataWebservice(grok.View): """A simple webservice to publish payment and payer details on request from accepted IP addresses without authentication. """ grok.context(IUniversity) grok.name('paymentrequest') grok.require('waeup.Public') #ACCEPTED_IP = ('174.36.230.28', ) ACCEPTED_IP = ('127.0.0.1', )
[docs] def update(self, P_ID=None): if P_ID == None: self.output = '-1' return real_ip = self.request.get('HTTP_X_FORWARDED_FOR', None) if real_ip: self.context.logger.info('PaymentDataWebservice called: %s' % real_ip) if real_ip and self.ACCEPTED_IP: if real_ip not in self.ACCEPTED_IP: self.output = '-4' return cat = getUtility(ICatalog, name='payments_catalog') results = list( cat.searchResults(p_id=(P_ID, P_ID), p_state=('paid', 'paid'))) if len(results) != 1: self.output = '-1' return try: owner = IPayer(results[0]) full_name = owner.display_fullname reg_number = owner.reg_number matric_number = owner.matric_number faculty = owner.faculty department = owner.department except (TypeError, AttributeError): self.output = '-3' return amount = results[0].amount_auth payment_category = results[0].category payment_item = results[0].p_item academic_session = academic_sessions_vocab.getTerm( results[0].p_session).title self.output = ( 'FULL_NAME=%s&' + 'FACULTY=%s&' + 'DEPARTMENT=%s&' + 'PAYMENT_ITEM=%s&' + 'PAYMENT_CATEGORY=%s&' + 'ACADEMIC_SESSION=%s&' + 'MATRIC_NUMBER=%s&' + 'REG_NUMBER=%s&' + 'FEE_AMOUNT=%s') % (full_name, faculty, department, payment_item, payment_category, academic_session, matric_number, reg_number, amount) return
[docs] def render(self): return self.output
[docs]class XMLRPCPermission(grok.Permission): """Permission for using XMLRPC functions. """ grok.name('waeup.xmlrpc')
[docs]class XMLRPCUsers1(grok.Role): """Usergroup 1 """ grok.name('waeup.xmlrpcusers1') grok.title('XMLRPC Users Group 1') grok.permissions('waeup.xmlrpc',)
[docs]class UniversityXMLRPC(grok.XMLRPC): """XMLRPC webservices for KOFA portals. Please note, that XMLRPC does not support real keyword arguments but positional arguments only. """ grok.context(IUniversity) @grok.require('waeup.Public')
[docs] def xmlrpc_api_version(self): """Return the current API version for XMLRPC clients. """ return u'0.1'