mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-01-03 20:49:08 +01:00
removed some files that don't belong into cvs
This commit is contained in:
parent
d29ea406c2
commit
56aa7e6eb3
@ -1,6 +0,0 @@
|
||||
phpgroupware-etemplate (0.9.14-0.RC3.3) unstable; urgency=low
|
||||
|
||||
* New release.
|
||||
- Source is now splitted into modules.
|
||||
|
||||
-- Luca - De Whiskey's - De Vitis <luca@debian.org> Mon, 21 May 2001 15:00:56 +0200
|
@ -1,13 +0,0 @@
|
||||
Source: phpgroupware-etemplate
|
||||
Section: web
|
||||
Priority: optional
|
||||
Maintainer: Luca - De Whiskey's - De Vitis <luca@debian.org>
|
||||
Build-Depends: debhelper (>> 3.0.0)
|
||||
Standards-Version: 3.5.2
|
||||
|
||||
Package: phpgroupware-etemplate
|
||||
Section: web
|
||||
Architecture: all
|
||||
Depends: phpgroupware (>= ${Source-Version}), php3-pgsql | php3-cgi-pgsql | php4-pgsql | php3-mysql | php3-cgi-mysql | php4-mysql
|
||||
Description: The phpGroupWare etemplate module.
|
||||
This phpGroupWare module provides the Templates and Dialog-Editor.
|
@ -1,15 +0,0 @@
|
||||
This package was debianized by Luca - De Whiskey's - De Vitis <luca@debian.org> on
|
||||
Sat, 29 Jun 2002 17:13:40 +0200
|
||||
|
||||
It was downloaded from the CVS repository at subversion.gnu.org. Try:
|
||||
prompt$ CVSROOT=:pserver:anoncvs@subversions.gnu.org:/cvsroot/phpgroupware
|
||||
prompt$ CVS_RSH=ssh
|
||||
prompt$ cvs login
|
||||
prompt$ cvs get all packages
|
||||
|
||||
Upstream Author(s):
|
||||
Please, see credits.txt, the README file or visit http://apps.phpgroupware.org/
|
||||
|
||||
Copyright:
|
||||
A copy of the GNU General Public License, version 2, can be found in
|
||||
/usr/share/common-licenses/GPL .
|
@ -1,74 +0,0 @@
|
||||
#!/usr/bin/make -f
|
||||
# Sample debian/rules that uses debhelper.
|
||||
# GNU copyright 1997 by Joey Hess.
|
||||
#
|
||||
# This version is for a hypothetical package that builds an
|
||||
# architecture-dependant package, as well as an architecture-independent
|
||||
# package.
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
|
||||
# This is the debhelper compatability version to use.
|
||||
export DH_COMPAT=3
|
||||
|
||||
APP = etemplate
|
||||
PACKAGE = debian/phpgroupware-$(APP)/usr/share/phpgroupware/$(APP)
|
||||
PACKAGEDOC = debian/phpgroupware-$(APP)/usr/share/doc/phpgroupware-$(APP)
|
||||
|
||||
COPYRIGHT = -iname copyright\* -or -iname license
|
||||
CHANGELOG = -iname change\*
|
||||
INSTALL = -iname install
|
||||
FINDOPT = -type f -not \( -path \*CVS\* -or -path \*debian\* -or -name .cvsignore \)
|
||||
SPECIAL = -size 0 -or $(INSTALL) -or $(CHANGELOG) -or $(COPYRIGHT) -or -name \*.sgml
|
||||
STAMPS = -name configure-stamp -or -name build-stamp
|
||||
APPFILES = -not \( -path \*doc\* -or -path \. -or -name '*.pl' -or -name '*.py' -or $(STAMPS) \)
|
||||
DOCFILES = -not \( $(SPECIAL) \)
|
||||
|
||||
configure: configure-stamp
|
||||
configure-stamp:
|
||||
dh_testdir
|
||||
# No configuration needed.
|
||||
touch configure-stamp
|
||||
|
||||
build: configure-stamp build-stamp
|
||||
build-stamp:
|
||||
dh_testdir
|
||||
# Here should go the commands necessary to build the sgml documentation...
|
||||
touch build-stamp
|
||||
|
||||
clean:
|
||||
dh_testdir
|
||||
rm -f build-stamp configure-stamp
|
||||
rm -f debian/.builded
|
||||
rm -f debian/files
|
||||
# Here should go the commands to clean the builded sgml documents.
|
||||
dh_clean
|
||||
|
||||
install: build
|
||||
dh_testdir
|
||||
|
||||
# Install $(APP) files in $(PACKAGE)
|
||||
find $(FINDOPT) $(APPFILES) \
|
||||
-exec install -D --mode=644 {} $(PACKAGE)/{} \;
|
||||
|
||||
# Install $(APP) doc files in $(PACKAGEDOC)
|
||||
cd doc ;\
|
||||
find $(FINDOPT) $(DOCFILES) \
|
||||
-exec install -D --mode=644 {} ../$(PACKAGEDOC)/{} \;
|
||||
|
||||
binary-indep: build install
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_installdocs
|
||||
dh_installchangelogs
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
dh_installdeb
|
||||
dh_gencontrol
|
||||
dh_md5sums
|
||||
dh_builddeb | tee debian/.builded
|
||||
|
||||
binary: binary-indep
|
||||
.PHONY: build clean binary-indep binary-arch binary install configure
|
@ -1,6 +0,0 @@
|
||||
phpgroupware-infolog (0.9.14-0.RC3.3) unstable; urgency=low
|
||||
|
||||
* New release.
|
||||
- Source is now splitted into modules.
|
||||
|
||||
-- Luca - De Whiskey's - De Vitis <luca@debian.org> Mon, 21 May 2001 15:00:56 +0200
|
@ -1,15 +0,0 @@
|
||||
Source: phpgroupware-infolog
|
||||
Section: web
|
||||
Priority: optional
|
||||
Maintainer: Luca - De Whiskey's - De Vitis <luca@debian.org>
|
||||
Build-Depends: debhelper (>> 3.0.0)
|
||||
Standards-Version: 3.5.2
|
||||
|
||||
Package: phpgroupware-infolog
|
||||
Section: web
|
||||
Architecture: all
|
||||
Depends: phpgroupware (>= ${Source-Version}), php3-pgsql | php3-cgi-pgsql | php4-pgsql | php3-mysql | php3-cgi-mysql | php4-mysql
|
||||
Description: The phpGroupWare infolog applcation
|
||||
This phpGroupWare module allows to track ongoing and previous support
|
||||
requests, phone calls, and other customer relations.
|
||||
|
@ -1,15 +0,0 @@
|
||||
This package was debianized by Luca - De Whiskey's - De Vitis <luca@debian.org> on
|
||||
Sat, 29 Jun 2002 17:13:40 +0200
|
||||
|
||||
It was downloaded from the CVS repository at subversion.gnu.org. Try:
|
||||
prompt$ CVSROOT=:pserver:anoncvs@subversions.gnu.org:/cvsroot/phpgroupware
|
||||
prompt$ CVS_RSH=ssh
|
||||
prompt$ cvs login
|
||||
prompt$ cvs get all packages
|
||||
|
||||
Upstream Author(s):
|
||||
Please, see credits.txt, the README file or visit http://apps.phpgroupware.org/
|
||||
|
||||
Copyright:
|
||||
A copy of the GNU General Public License, version 2, can be found in
|
||||
/usr/share/common-licenses/GPL .
|
@ -1,74 +0,0 @@
|
||||
#!/usr/bin/make -f
|
||||
# Sample debian/rules that uses debhelper.
|
||||
# GNU copyright 1997 by Joey Hess.
|
||||
#
|
||||
# This version is for a hypothetical package that builds an
|
||||
# architecture-dependant package, as well as an architecture-independent
|
||||
# package.
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
|
||||
# This is the debhelper compatability version to use.
|
||||
export DH_COMPAT=3
|
||||
|
||||
APP = infolog
|
||||
PACKAGE = debian/phpgroupware-$(APP)/usr/share/phpgroupware/$(APP)
|
||||
PACKAGEDOC = debian/phpgroupware-$(APP)/usr/share/doc/phpgroupware-$(APP)
|
||||
|
||||
COPYRIGHT = -iname copyright\* -or -iname license
|
||||
CHANGELOG = -iname change\*
|
||||
INSTALL = -iname install
|
||||
FINDOPT = -type f -not \( -path \*CVS\* -or -path \*debian\* -or -name .cvsignore \)
|
||||
SPECIAL = -size 0 -or $(INSTALL) -or $(CHANGELOG) -or $(COPYRIGHT) -or -name \*.sgml
|
||||
STAMPS = -name configure-stamp -or -name build-stamp
|
||||
APPFILES = -not \( -path \*doc\* -or -path \. -or -name '*.pl' -or -name '*.py' -or $(STAMPS) \)
|
||||
DOCFILES = -not \( $(SPECIAL) \)
|
||||
|
||||
configure: configure-stamp
|
||||
configure-stamp:
|
||||
dh_testdir
|
||||
# No configuration needed.
|
||||
touch configure-stamp
|
||||
|
||||
build: configure-stamp build-stamp
|
||||
build-stamp:
|
||||
dh_testdir
|
||||
# Here should go the commands necessary to build the sgml documentation...
|
||||
touch build-stamp
|
||||
|
||||
clean:
|
||||
dh_testdir
|
||||
rm -f build-stamp configure-stamp
|
||||
rm -f debian/.builded
|
||||
rm -f debian/files
|
||||
# Here should go the commands to clean the builded sgml documents.
|
||||
dh_clean
|
||||
|
||||
install: build
|
||||
dh_testdir
|
||||
|
||||
# Install $(APP) files in $(PACKAGE)
|
||||
find $(FINDOPT) $(APPFILES) \
|
||||
-exec install -D --mode=644 {} $(PACKAGE)/{} \;
|
||||
|
||||
# Install $(APP) doc files in $(PACKAGEDOC)
|
||||
cd doc ;\
|
||||
find $(FINDOPT) $(DOCFILES) \
|
||||
-exec install -D --mode=644 {} ../$(PACKAGEDOC)/{} \;
|
||||
|
||||
binary-indep: build install
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_installdocs
|
||||
dh_installchangelogs
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
dh_installdeb
|
||||
dh_gencontrol
|
||||
dh_md5sums
|
||||
dh_builddeb | tee debian/.builded
|
||||
|
||||
binary: binary-indep
|
||||
.PHONY: build clean binary-indep binary-arch binary install configure
|
@ -1,403 +0,0 @@
|
||||
#LyX 1.1 created this file. For more info see http://www.lyx.org/
|
||||
\lyxformat 218
|
||||
\textclass docbook
|
||||
\language english
|
||||
\inputencoding auto
|
||||
\fontscheme default
|
||||
\graphics default
|
||||
\paperfontsize default
|
||||
\spacing single
|
||||
\papersize Default
|
||||
\paperpackage a4
|
||||
\use_geometry 0
|
||||
\use_amsmath 0
|
||||
\paperorientation portrait
|
||||
\secnumdepth 3
|
||||
\tocdepth 3
|
||||
\paragraph_separation indent
|
||||
\defskip medskip
|
||||
\quotes_language english
|
||||
\quotes_times 2
|
||||
\papercolumns 1
|
||||
\papersides 1
|
||||
\paperpagestyle default
|
||||
|
||||
\layout Title
|
||||
|
||||
Proposal for a Common Groupware Interface Standard
|
||||
\layout Author
|
||||
|
||||
by Miles Lott <milos@groupwhere.org>
|
||||
\layout Date
|
||||
|
||||
September 13, 2001 and December 29, 2003
|
||||
\layout Standard
|
||||
|
||||
|
||||
\begin_inset LatexCommand \tableofcontents{}
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\layout Section
|
||||
|
||||
Scope
|
||||
\layout Standard
|
||||
|
||||
As many different opensource and freesoftware groupware systems are being
|
||||
developed, the full realization of the dream of a connected world should
|
||||
be prefaced by an agreement to interoperate.
|
||||
There are limited ways in which cooperation with these and commercial groupware
|
||||
systems may be achecived, the majority if not all of which were derived
|
||||
via the establishment of open standards.
|
||||
These might include email (POP3/IMAP), contacts(LDAP,vcard), or scheduling(ical
|
||||
/vcal).
|
||||
It is felt that while these have proven themselves to be very useful, they
|
||||
are insufficient to satisfy the real needs of a typical business environment.
|
||||
\layout Standard
|
||||
|
||||
This document hopes to provide a reasonable, if limited, recommendation
|
||||
for a set of standardized methods to be used for groupware services interaction.
|
||||
More specifically, it hopes to address the need for such a standard as
|
||||
well as to spur discussion about the common service names and methods themselve
|
||||
s.
|
||||
\layout Standard
|
||||
|
||||
Examples will be given for implementations in XML-RPC, since this standard
|
||||
is relatively fixed and open.
|
||||
\layout Standard
|
||||
|
||||
This document does not provide recommendations for the underlying access
|
||||
control system which would allow or deny a particular action.
|
||||
\layout Standard
|
||||
|
||||
Also not discussed here is login and authorization to be used for initial
|
||||
access to a service provider.
|
||||
\layout Section
|
||||
|
||||
The Services
|
||||
\layout Subsection
|
||||
|
||||
Overview
|
||||
\layout Standard
|
||||
|
||||
There are a few common services types that will be needed for minimum useability
|
||||
of a groupware server or application.
|
||||
They are:
|
||||
\layout Itemize
|
||||
|
||||
Contacts
|
||||
\layout Itemize
|
||||
|
||||
Schedule
|
||||
\layout Itemize
|
||||
|
||||
Notes
|
||||
\layout Itemize
|
||||
|
||||
Todo
|
||||
\layout Standard
|
||||
|
||||
These services are represented already in places such as existing groupware
|
||||
client-server applications and also in the PalmOS basic-4 buttons and applicati
|
||||
ons.
|
||||
Different systems may have different names for these services internally,
|
||||
e.g.
|
||||
Contacts - addresses, addressbook, people, Schedule - calendar, agenda,
|
||||
meetings.
|
||||
\layout Standard
|
||||
|
||||
Within each of these services are some common methods that would be called
|
||||
to store, retreive, or update data:
|
||||
\layout Itemize
|
||||
|
||||
read_list
|
||||
\layout Itemize
|
||||
|
||||
read
|
||||
\layout Itemize
|
||||
|
||||
save
|
||||
\layout Itemize
|
||||
|
||||
delete
|
||||
\layout Subsection
|
||||
|
||||
Detail
|
||||
\layout Subsubsection
|
||||
|
||||
Contacts
|
||||
\layout Standard
|
||||
|
||||
The concept of contacts may encompass local addressbooks, LDAP, and lists
|
||||
stored in other media.
|
||||
The purpose of the contacts service is not to duplicate or attempt to replace
|
||||
these.
|
||||
In some respects, it might do just that.
|
||||
But its goal is more so to provide a common and shareable way for the other
|
||||
core services to create, edit, and read a common user and address list.
|
||||
All of the other services may use the contact service to obtain record
|
||||
owner information to be used in access control.
|
||||
They would also use them when it is required to share this data, as with
|
||||
a meeting where other local and non-local users will be invited to attend.
|
||||
\layout Standard
|
||||
|
||||
Contacts may include the local installed user base, users on other cooperative
|
||||
servers, or email addresses used for limited cooperation with other groupware
|
||||
services that are not compliant with this service scheme or implementations
|
||||
thereof.
|
||||
It could also include individuals using web-based or local ISP email services.
|
||||
The scope of this document, however, is to define the service with regard
|
||||
to the common methods to be used for server-server and client-server communicat
|
||||
ions:
|
||||
\layout Itemize
|
||||
|
||||
read_list
|
||||
\layout Standard
|
||||
|
||||
This method is used to list contacts, with or without limits, filters, or
|
||||
search criteria.
|
||||
In this way it can be used for simple lists or to search for contact records
|
||||
and their identifiers.
|
||||
The optional search criteria includes:
|
||||
\layout Enumerate
|
||||
|
||||
start - Start at this identifier (integer: default 0)
|
||||
\layout Enumerate
|
||||
|
||||
limit - Limit to this number of records returned(integer: unlimited by default)
|
||||
\layout Enumerate
|
||||
|
||||
fieldlist - limit to showing only these fields (array: default to identifier,
|
||||
owner identifier, possibly firstname and lastname)
|
||||
\layout Enumerate
|
||||
|
||||
filter - Show records that are public or private only, or other system-specific
|
||||
filters, e.g group or company(string: default '')
|
||||
\layout Enumerate
|
||||
|
||||
query - Search internal fieldlist for a value (string: default '')
|
||||
\layout Standard
|
||||
|
||||
The return for this method includes:
|
||||
\layout Enumerate
|
||||
|
||||
count of number of records returned(integer)
|
||||
\layout Enumerate
|
||||
|
||||
array consisting of: array: identifier => (array: fieldlist key => value
|
||||
pairs)
|
||||
\layout Itemize
|
||||
|
||||
read
|
||||
\layout Standard
|
||||
|
||||
Once the identifier for a single contact record is known, the contact may
|
||||
be read for more detail using this method.
|
||||
This takes two parameters:
|
||||
\layout Enumerate
|
||||
|
||||
identifier - (integer: no default)
|
||||
\layout Enumerate
|
||||
|
||||
fieldlist - limit to showing only these fields (array: default to identifier,
|
||||
owner identifier, possibly firstname and lastname)
|
||||
\layout Standard
|
||||
|
||||
And returns:
|
||||
\layout Enumerate
|
||||
|
||||
array consisting of: array: identifier => (array: fieldlist key => value
|
||||
pairs)
|
||||
\layout Itemize
|
||||
|
||||
save
|
||||
\layout Standard
|
||||
|
||||
This is a method used to save an existing record or create a new one.
|
||||
If the identifier for an existing record is not passed, a new entry will
|
||||
be created.
|
||||
\layout Itemize
|
||||
|
||||
delete
|
||||
\layout Standard
|
||||
|
||||
This will allow deletion of a record by passing its identifier.
|
||||
\layout Subsubsection
|
||||
|
||||
Schedule
|
||||
\layout Subsubsection
|
||||
|
||||
Notes
|
||||
\layout Subsubsection
|
||||
|
||||
Todo
|
||||
\layout Subsection
|
||||
|
||||
Examples in XML-RPC
|
||||
\layout Standard
|
||||
|
||||
Query the contacts service for read_list, using only start and limit to
|
||||
grab the first 5 records, starting with identifier 1.
|
||||
Additionally, return only the firstname and lastname fields n_given and
|
||||
n_family (firstname and lastname in pseudo vcard format):
|
||||
\layout Code
|
||||
|
||||
<methodCall>
|
||||
\layout Code
|
||||
|
||||
<methodName>service.contacts.read_list</methodName>
|
||||
\layout Code
|
||||
|
||||
<params>
|
||||
\layout Code
|
||||
|
||||
<param>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>start</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>1</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>limit</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>5</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>fields</name>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>n_given</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>n_given</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>n_family</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>n_family</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
</struct></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>query</name>
|
||||
\layout Code
|
||||
|
||||
<value><string></string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>filter</name>
|
||||
\layout Code
|
||||
|
||||
<value><string></string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
</struct></value>
|
||||
\layout Code
|
||||
|
||||
</param>
|
||||
\layout Code
|
||||
|
||||
</params>
|
||||
\layout Code
|
||||
|
||||
</methodCall>
|
||||
\layout Section
|
||||
|
||||
Conclusion
|
||||
\layout Standard
|
||||
|
||||
This document outlined the following services and methods:
|
||||
\layout Subsection
|
||||
|
||||
Contacts:
|
||||
\layout Itemize
|
||||
|
||||
service.contacts.read_list([search criteria])
|
||||
\layout Itemize
|
||||
|
||||
service.contacts.read(identifier,[fieldlist])
|
||||
\layout Itemize
|
||||
|
||||
service.contacts.save(fields)
|
||||
\layout Itemize
|
||||
|
||||
service.contacts.delete(identifier)
|
||||
\layout Subsection
|
||||
|
||||
Schedule:
|
||||
\layout Itemize
|
||||
|
||||
service.schedule.read_list([search criteria])
|
||||
\layout Itemize
|
||||
|
||||
service.schedule.read(identifier,[fieldlist])
|
||||
\layout Itemize
|
||||
|
||||
service.schedule.save(fields)
|
||||
\layout Itemize
|
||||
|
||||
service.schedule.delete(identifier)
|
||||
\layout Subsection
|
||||
|
||||
Notes:
|
||||
\layout Itemize
|
||||
|
||||
service.notes.read_list([search criteria])
|
||||
\layout Itemize
|
||||
|
||||
service.notes.read(identifier,[fieldlist])
|
||||
\layout Itemize
|
||||
|
||||
service.notes.save(fields)
|
||||
\layout Itemize
|
||||
|
||||
service.notes.delete(identifier)
|
||||
\layout Subsection
|
||||
|
||||
Todo:
|
||||
\layout Itemize
|
||||
|
||||
service.todo.read_list(search criteria)
|
||||
\layout Itemize
|
||||
|
||||
service.todo.read(identifer,[fieldlist])
|
||||
\layout Itemize
|
||||
|
||||
service.todo.save(fields)
|
||||
\layout Itemize
|
||||
|
||||
service.todo.delete(identifier)
|
||||
\the_end
|
@ -1,713 +0,0 @@
|
||||
#LyX 1.1 created this file. For more info see http://www.lyx.org/
|
||||
\lyxformat 218
|
||||
\textclass docbook
|
||||
\language english
|
||||
\inputencoding auto
|
||||
\fontscheme default
|
||||
\graphics default
|
||||
\paperfontsize default
|
||||
\spacing single
|
||||
\papersize Default
|
||||
\paperpackage a4
|
||||
\use_geometry 0
|
||||
\use_amsmath 0
|
||||
\paperorientation portrait
|
||||
\secnumdepth 3
|
||||
\tocdepth 3
|
||||
\paragraph_separation indent
|
||||
\defskip medskip
|
||||
\quotes_language english
|
||||
\quotes_times 2
|
||||
\papercolumns 1
|
||||
\papersides 1
|
||||
\paperpagestyle default
|
||||
|
||||
\layout Title
|
||||
|
||||
phpGroupWare XML-RPC/SOAP Methodology
|
||||
\layout Author
|
||||
|
||||
Miles Lott
|
||||
\layout Author
|
||||
|
||||
milosch@phpgroupware.org
|
||||
\layout Date
|
||||
|
||||
August 23, 2001
|
||||
\layout Standard
|
||||
|
||||
additions made September 3, 2001.
|
||||
\layout Standard
|
||||
|
||||
This document is very preliminary, but describes a working system.
|
||||
\layout Section
|
||||
|
||||
System level requests
|
||||
\layout Subsection
|
||||
|
||||
Login and authentication
|
||||
\layout Standard
|
||||
|
||||
Authentication for user logins is handled internally no differently than
|
||||
for the typical phpGroupWare login via web browser.
|
||||
Server logins, added for XML-RPC and SOAP, are only slightly different.
|
||||
For either protocol, user and server login and authentication and subsequent
|
||||
requests are handled by their respective server apps, xmlrpc.php and soap.php.
|
||||
A server is identified by a custom HTTP header, without which a normal
|
||||
user login will be undertaken.
|
||||
\layout Standard
|
||||
|
||||
A client or server sends the appropriate XML-RPC or SOAP packet containing
|
||||
host, user, and password information to the phpgw server.
|
||||
The server then assigns a sessionid and key, which is returned to the client
|
||||
in the appropriate format.
|
||||
\layout Standard
|
||||
|
||||
Our current method for authenticating requests after successful login is
|
||||
via the Authorization: Basic HTTP header to be sent by the client or requesting
|
||||
server.
|
||||
The format of this header is a base64 encoding of the assigned sessionid
|
||||
and kp3 variables, seperated by a ':'.
|
||||
\layout Standard
|
||||
|
||||
Further security may be obtained by using SSL on the client and server.
|
||||
In the future, we may encrypt/descrypt the data on either end, or at least
|
||||
provide this as an option.
|
||||
The sessionid and key variables will make this possible, and relatively
|
||||
secure.
|
||||
\layout Subsubsection
|
||||
|
||||
system.login
|
||||
\layout Standard
|
||||
|
||||
The first request a client will make is the system.login method.
|
||||
Here is a sample of a server login packet in XML-RPC:
|
||||
\layout Code
|
||||
|
||||
<?xml version="1.0"?>
|
||||
\layout Code
|
||||
|
||||
<methodCall>
|
||||
\layout Code
|
||||
|
||||
<methodName>system.login</methodName>
|
||||
\layout Code
|
||||
|
||||
<params>
|
||||
\layout Code
|
||||
|
||||
<param>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>server_name</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>my.host.name</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>username</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>bubba</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>password</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>gump</string></value>
|
||||
\layout Code
|
||||
|
||||
</member> </struct></value>
|
||||
\layout Code
|
||||
|
||||
</param>
|
||||
\layout Code
|
||||
|
||||
</params>
|
||||
\layout Code
|
||||
|
||||
</methodCall>
|
||||
\layout Standard
|
||||
|
||||
And the same in SOAP:
|
||||
\layout Code
|
||||
|
||||
<?xml version="1.0"?>
|
||||
\layout Code
|
||||
|
||||
<SOAP-ENV:Envelope
|
||||
\layout Code
|
||||
|
||||
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.
|
||||
org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"
|
||||
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:si="http://soapi
|
||||
nterop.org/xsd"
|
||||
\layout Code
|
||||
|
||||
xmlns:ns6="http://soapinterop.org" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.o
|
||||
rg/soap/encoding/">
|
||||
\layout Code
|
||||
|
||||
<SOAP-ENV:Body> <ns6:system_login>
|
||||
\layout Code
|
||||
|
||||
<server_name xsi:type=":string">my.host.name</server_name>
|
||||
\layout Code
|
||||
|
||||
<username xsi:type=":string">bubba</username>
|
||||
\layout Code
|
||||
|
||||
<password xsi:type=":string">gump</password>
|
||||
\layout Code
|
||||
|
||||
</ns6:system_login>
|
||||
\layout Code
|
||||
|
||||
</SOAP-ENV:Body>
|
||||
\layout Code
|
||||
|
||||
</SOAP-ENV:Envelope>
|
||||
\layout Standard
|
||||
|
||||
The same style of packet would be required for a user/client login.
|
||||
A successful login should yield the following reply:
|
||||
\layout Code
|
||||
|
||||
<methodResponse>
|
||||
\layout Code
|
||||
|
||||
<params>
|
||||
\layout Code
|
||||
|
||||
<param>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>sessionid</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>cf5c5534307562fc57915608377db007</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>kp3</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>2fe54daa11c8d52116788aa3f93cb70e</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
</struct></value>
|
||||
\layout Code
|
||||
|
||||
</param>
|
||||
\layout Code
|
||||
|
||||
</params>
|
||||
\layout Code
|
||||
|
||||
</methodResponse>
|
||||
\layout Standard
|
||||
|
||||
And a failed login:
|
||||
\layout Code
|
||||
|
||||
<methodResponse>
|
||||
\layout Code
|
||||
|
||||
<params>
|
||||
\layout Code
|
||||
|
||||
<param>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>GOAWAY</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>XOXO</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
</struct></value>
|
||||
\layout Code
|
||||
|
||||
</param>
|
||||
\layout Code
|
||||
|
||||
</params>
|
||||
\layout Code
|
||||
|
||||
</methodResponse>
|
||||
\layout Standard
|
||||
|
||||
eqweqw
|
||||
\layout Subsubsection
|
||||
|
||||
system.logout
|
||||
\layout Standard
|
||||
|
||||
Logout:
|
||||
\layout Code
|
||||
|
||||
<?xml version="1.0"?>
|
||||
\layout Code
|
||||
|
||||
<methodCall>
|
||||
\layout Code
|
||||
|
||||
<methodName>system.logout</methodName>
|
||||
\layout Code
|
||||
|
||||
<params> <param>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>sessionid</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>ea35cac53d2c12bd05caecd97304478a</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>kp3</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>4f2b256e0da4e7cbbebaac9f1fc8ca4a</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
</struct></value>
|
||||
\layout Code
|
||||
|
||||
</param>
|
||||
\layout Code
|
||||
|
||||
</params>
|
||||
\layout Code
|
||||
|
||||
</methodCall>
|
||||
\layout Standard
|
||||
|
||||
Logout worked:
|
||||
\layout Code
|
||||
|
||||
<methodResponse>
|
||||
\layout Code
|
||||
|
||||
<params>
|
||||
\layout Code
|
||||
|
||||
<param>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>GOODBYE</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>XOXO</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
</struct></value>
|
||||
\layout Code
|
||||
|
||||
</param>
|
||||
\layout Code
|
||||
|
||||
</params>
|
||||
\layout Code
|
||||
|
||||
</methodResponse>
|
||||
\layout Section
|
||||
|
||||
Business layer requests
|
||||
\layout Standard
|
||||
|
||||
Once a successful login return packet has been received and sessionid/kp3
|
||||
have been extracted, every subsequent packet sent to the phpgroupware server
|
||||
must be preceded by an Authorization header.
|
||||
Here is a sample header:
|
||||
\layout Code
|
||||
|
||||
POST /phpgroupware/xmlrpc.php HTTP/1.0
|
||||
\layout Code
|
||||
|
||||
User-Agent: PHP XMLRPC 1.0
|
||||
\layout Code
|
||||
|
||||
Host: my.local.host
|
||||
\layout Code
|
||||
|
||||
Authorization: Basic ZDgxNDIyZDRkYjg5NDEyNGNiMzZlMDhhZTdlYzAxZmY6NTU3YzkyYjBmNGE
|
||||
4ZDVlOTUzMzI2YmU2OTQyNjM3YjQ=
|
||||
\layout Code
|
||||
|
||||
Content-Type: text/xml
|
||||
\layout Code
|
||||
|
||||
Content-Length: 875
|
||||
\layout Standard
|
||||
|
||||
The longish string is a base64 encoding of the $sessionid .
|
||||
':' .
|
||||
$kp3.
|
||||
For now this is our only supported authentication method.
|
||||
Additional methods would probably also affect the methodCalls.
|
||||
This is certainly open to discussion.
|
||||
Following is a typical request for some contact data:
|
||||
\layout Code
|
||||
|
||||
<?xml version="1.0"?>
|
||||
\layout Code
|
||||
|
||||
<methodCall>
|
||||
\layout Code
|
||||
|
||||
<methodName>addressbook.boaddressbook.read_entries</methodName>
|
||||
\layout Code
|
||||
|
||||
<params>
|
||||
\layout Code
|
||||
|
||||
<param>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>start</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>1</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>limit</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>5</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>fields</name>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>n_given</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>n_given</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>n_family</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>n_family</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
</struct></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>query</name>
|
||||
\layout Code
|
||||
|
||||
<value><string></string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>filter</name>
|
||||
\layout Code
|
||||
|
||||
<value><string></string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>sort</name>
|
||||
\layout Code
|
||||
|
||||
<value><string></string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>order</name>
|
||||
\layout Code
|
||||
|
||||
<value><string></string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
</struct></value>
|
||||
\layout Code
|
||||
|
||||
</param>
|
||||
\layout Code
|
||||
|
||||
</params>
|
||||
\layout Code
|
||||
|
||||
</methodCall>
|
||||
\layout Standard
|
||||
|
||||
Successful response:
|
||||
\layout Code
|
||||
|
||||
<?xml version="1.0"?>
|
||||
\layout Code
|
||||
|
||||
<methodResponse>
|
||||
\layout Code
|
||||
|
||||
<params>
|
||||
\layout Code
|
||||
|
||||
<param>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>0</name>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>id</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>1</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>lid</name>
|
||||
\layout Code
|
||||
|
||||
<value><string></string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>tid</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>n</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>owner</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>500</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>access</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>private</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>cat_id</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>1</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>n_given</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>Alan</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
</struct></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>1</name>
|
||||
\layout Code
|
||||
|
||||
<value><struct>
|
||||
\layout Code
|
||||
|
||||
<member><name>id</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>2</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>lid</name>
|
||||
\layout Code
|
||||
|
||||
<value><string></string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>tid</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>n</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>owner</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>500</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>access</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>private</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>cat_id</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>1</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
<member><name>n_given</name>
|
||||
\layout Code
|
||||
|
||||
<value><string>Andy</string></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
</struct></value>
|
||||
\layout Code
|
||||
|
||||
</member>
|
||||
\layout Code
|
||||
|
||||
...
|
||||
\layout Standard
|
||||
|
||||
Unauthorized access attempt returns:
|
||||
\layout Code
|
||||
|
||||
<methodResponse>
|
||||
\layout Code
|
||||
|
||||
<params>
|
||||
\layout Code
|
||||
|
||||
<param>
|
||||
\layout Code
|
||||
|
||||
<value><string>UNAUTHORIZED</string></value>
|
||||
\layout Code
|
||||
|
||||
</param>
|
||||
\layout Code
|
||||
|
||||
</params>
|
||||
\layout Code
|
||||
|
||||
</methodResponse>
|
||||
\layout Section
|
||||
|
||||
More to come...
|
||||
\layout Standard
|
||||
|
||||
Documenting every single call will be difficult, but should be done.
|
||||
In leiu of this, please see the class.bo{APPNAME}.inc.php files in each applicatio
|
||||
n/inc directory in the phpgroupware cvs.
|
||||
In this file will be a list_methods() function, which returns the information
|
||||
to the server about input/output structure for each call.
|
||||
If the file does not have this function, then it is not yet workable via
|
||||
this interface.
|
||||
As for the actual functions, they are also in this file.
|
||||
Generally, they will all accept associative array input and return same,
|
||||
but not always.
|
||||
This code is in flux, have fun.
|
||||
\the_end
|
Binary file not shown.
@ -1,6 +0,0 @@
|
||||
phpgroupware-setup (0.9.14-0.RC3.3) unstable; urgency=low
|
||||
|
||||
* New release.
|
||||
- Source is now splitted into modules.
|
||||
|
||||
-- Luca - De Whiskey's - De Vitis <luca@debian.org> Mon, 21 May 2001 15:00:56 +0200
|
@ -1,15 +0,0 @@
|
||||
Source: phpgroupware-setup
|
||||
Section: web
|
||||
Priority: optional
|
||||
Maintainer: Luca - De Whiskey's - De Vitis <luca@debian.org>
|
||||
Build-Depends: debhelper (>> 3.0.0)
|
||||
Standards-Version: 3.5.2
|
||||
|
||||
Package: phpgroupware-setup
|
||||
Section: web
|
||||
Architecture: all
|
||||
Depends: phpgroupware (>= ${Source-Version}), php3-pgsql | php3-cgi-pgsql | php4-pgsql | php3-mysql | php3-cgi-mysql | php4-mysql
|
||||
Description: The phpGroupWare setup III module
|
||||
This phpGroupWare module allows the system administrators to manage the
|
||||
wole set of modules.
|
||||
|
@ -1,15 +0,0 @@
|
||||
This package was debianized by Luca - De Whiskey's - De Vitis <luca@debian.org> on
|
||||
Sat, 29 Jun 2002 17:13:40 +0200
|
||||
|
||||
It was downloaded from the CVS repository at subversion.gnu.org. Try:
|
||||
prompt$ CVSROOT=:pserver:anoncvs@subversions.gnu.org:/cvsroot/phpgroupware
|
||||
prompt$ CVS_RSH=ssh
|
||||
prompt$ cvs login
|
||||
prompt$ cvs get all packages
|
||||
|
||||
Upstream Author(s):
|
||||
Please, see credits.txt, the README file or visit http://apps.phpgroupware.org/
|
||||
|
||||
Copyright:
|
||||
A copy of the GNU General Public License, version 2, can be found in
|
||||
/usr/share/common-licenses/GPL .
|
@ -1,74 +0,0 @@
|
||||
#!/usr/bin/make -f
|
||||
# Sample debian/rules that uses debhelper.
|
||||
# GNU copyright 1997 by Joey Hess.
|
||||
#
|
||||
# This version is for a hypothetical package that builds an
|
||||
# architecture-dependant package, as well as an architecture-independent
|
||||
# package.
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
|
||||
# This is the debhelper compatability version to use.
|
||||
export DH_COMPAT=3
|
||||
|
||||
APP = setup
|
||||
PACKAGE = debian/phpgroupware-$(APP)/usr/share/phpgroupware/$(APP)
|
||||
PACKAGEDOC = debian/phpgroupware-$(APP)/usr/share/doc/phpgroupware-$(APP)
|
||||
|
||||
COPYRIGHT = -iname copyright\* -or -iname license
|
||||
CHANGELOG = -iname change\*
|
||||
INSTALL = -iname install
|
||||
FINDOPT = -type f -not \( -path \*CVS\* -or -path \*debian\* -or -name .cvsignore \)
|
||||
SPECIAL = -size 0 -or $(INSTALL) -or $(CHANGELOG) -or $(COPYRIGHT) -or -name \*.sgml
|
||||
STAMPS = -name configure-stamp -or -name build-stamp
|
||||
APPFILES = -not \( -path \*doc\* -or -path \. -or -name '*.pl' -or -name '*.py' -or $(STAMPS) \)
|
||||
DOCFILES = -not \( $(SPECIAL) \)
|
||||
|
||||
configure: configure-stamp
|
||||
configure-stamp:
|
||||
dh_testdir
|
||||
# No configuration needed.
|
||||
touch configure-stamp
|
||||
|
||||
build: configure-stamp build-stamp
|
||||
build-stamp:
|
||||
dh_testdir
|
||||
# Here should go the commands necessary to build the sgml documentation...
|
||||
touch build-stamp
|
||||
|
||||
clean:
|
||||
dh_testdir
|
||||
rm -f build-stamp configure-stamp
|
||||
rm -f debian/.builded
|
||||
rm -f debian/files
|
||||
# Here should go the commands to clean the builded sgml documents.
|
||||
dh_clean
|
||||
|
||||
install: build
|
||||
dh_testdir
|
||||
|
||||
# Install $(APP) files in $(PACKAGE)
|
||||
find $(FINDOPT) $(APPFILES) \
|
||||
-exec install -D --mode=644 {} $(PACKAGE)/{} \;
|
||||
|
||||
# Install $(APP) doc files in $(PACKAGEDOC)
|
||||
cd doc ;\
|
||||
find $(FINDOPT) $(DOCFILES) \
|
||||
-exec install -D --mode=644 {} ../$(PACKAGEDOC)/{} \;
|
||||
|
||||
binary-indep: build install
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_installdocs
|
||||
dh_installchangelogs
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
dh_installdeb
|
||||
dh_gencontrol
|
||||
dh_md5sums
|
||||
dh_builddeb | tee debian/.builded
|
||||
|
||||
binary: binary-indep
|
||||
.PHONY: build clean binary-indep binary-arch binary install configure
|
290
xmlrpc.php.old
290
xmlrpc.php.old
@ -1,290 +0,0 @@
|
||||
<?php
|
||||
/**************************************************************************\
|
||||
* phpGroupWare xmlrpc server *
|
||||
* http://www.phpgroupware.org *
|
||||
* This file written by Joseph Engo <jengo@phpgroupware.org> *
|
||||
* -------------------------------------------- *
|
||||
* 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. *
|
||||
\**************************************************************************/
|
||||
|
||||
/* $Id$ */
|
||||
/* $Source$ */
|
||||
|
||||
// NOTE! This file is still in the experimental stages, use at your own risk!
|
||||
// The only current documentation for it is the code and the comments
|
||||
// A document explaining its usage should be done shortly
|
||||
// PLEASE, do *NOT* make any changes to this file without talking to me
|
||||
// directly first. Until I get it fully undercontrol.
|
||||
// There might be possiable security holes in this, I haven't fully tested it
|
||||
// (jengo)
|
||||
|
||||
exit;
|
||||
|
||||
$GLOBALS['phpgw_info'] = array();
|
||||
$GLOBALS['phpgw_info']['flags'] = array(
|
||||
'currentapp' => 'login',
|
||||
'noheader' => True,
|
||||
'disable_Template_class' => True
|
||||
);
|
||||
include('header.inc.php');
|
||||
|
||||
// If XML-RPC isn't enabled in PHP, return an XML-RPC response stating so
|
||||
if (! function_exists('xmlrpc_server_create'))
|
||||
{
|
||||
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
|
||||
echo "<methodResponse>\n";
|
||||
echo "<fault>\n";
|
||||
echo " <value>\n";
|
||||
echo " <struct>\n";
|
||||
echo " <member>\n";
|
||||
echo " <name>faultString</name>\n";
|
||||
echo " <value>\n";
|
||||
echo " <string>XML-RPC support NOT enabled in PHP installation</string>\n";
|
||||
echo " </value>\n";
|
||||
echo " </member>\n";
|
||||
echo " <member>\n";
|
||||
echo " <name>faultCode</name>\n";
|
||||
echo " <value>\n";
|
||||
echo " <int>1005</int>\n";
|
||||
echo " </value>\n";
|
||||
echo " </member>\n";
|
||||
echo " </struct>\n";
|
||||
echo " </value>\n";
|
||||
echo "</fault>\n";
|
||||
echo "</methodResponse>\n";
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
// Return all PHP errors as faults
|
||||
$GLOBALS['xmlrpc_server'] = xmlrpc_server_create();
|
||||
error_reporting(E_ERROR | E_WARNING | E_PARSE);
|
||||
set_error_handler('xmlrpc_custom_error');
|
||||
|
||||
$headers = getallheaders();
|
||||
if (ereg('Basic',$headers['Authorization']))
|
||||
{
|
||||
$tmp = $headers['Authorization'];
|
||||
$tmp = ereg_replace(' ','',$tmp);
|
||||
$tmp = ereg_replace('Basic','',$tmp);
|
||||
$auth = base64_decode(trim($tmp));
|
||||
list($sessionid,$kp3) = split(':',$auth);
|
||||
|
||||
if ($GLOBALS['phpgw']->session->verify($sessionid,$kp3))
|
||||
{
|
||||
$GLOBALS['xmlrpc_server'] = xmlrpc_server_create();
|
||||
$request_xml = $HTTP_RAW_POST_DATA;
|
||||
|
||||
// Find out what method they are calling
|
||||
// This function is odd, you *NEED* to assign the results
|
||||
// to a value, or $method is never returned. (jengo)
|
||||
$null = xmlrpc_decode_request($request_xml, &$method);
|
||||
$GLOBALS['phpgw']->session->xmlrpc_method_called = $method;
|
||||
$GLOBALS['phpgw']->session->update_dla();
|
||||
|
||||
// Check permissions and load the class, register all methods
|
||||
// for that class, and execute it
|
||||
list($app,$class,$func) = explode('.',$method);
|
||||
|
||||
if ($method == 'system.logout' || $GLOBALS['phpgw_info']['user']['apps'][$app] || $app == 'phpgwapi')
|
||||
{
|
||||
$GLOBALS['obj'] = CreateObject($app . '.' . $class);
|
||||
|
||||
xmlrpc_server_register_method($xmlrpc_server,sprintf('%s.%s.%s',$app,$class,'listMethods'),'xmlrpc_list_methods');
|
||||
xmlrpc_server_register_method($xmlrpc_server,sprintf('%s.%s.%s',$app,$class,'describeMethods'),xmlrpc_describe_methods);
|
||||
xmlrpc_server_register_method($xmlrpc_server,'system.logout','xmlrpc_logout');
|
||||
|
||||
while (list(,$new_method) = @each($obj->xmlrpc_methods))
|
||||
{
|
||||
$full_method_name = sprintf('%s.%s.%s',$app,$class,$new_method['name']);
|
||||
|
||||
xmlrpc_server_register_method($xmlrpc_server,$full_method_name,'xmlrpc_call_wrapper');
|
||||
// The following function is listed as being in the API, but doesn't actually exisit.
|
||||
// This is more of a mental note to track down its exisitence
|
||||
//xmlrpc_server_set_method_description($xmlrpc_server,$full_method_name,$new_method);
|
||||
}
|
||||
}
|
||||
else if ($method != 'system.listMethods' && $method != 'system.describeMethods')
|
||||
{
|
||||
xmlrpc_error(1001,'Access not permitted');
|
||||
}
|
||||
|
||||
echo xmlrpc_server_call_method($xmlrpc_server,$request_xml,'');
|
||||
xmlrpc_server_destroy($xmlrpc_server);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Session is invailed
|
||||
xmlrpc_error(1001,'Session expired');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// First, create a single method being system.login
|
||||
// If they don't request this, then just return a failed session error
|
||||
$xmlrpc_server = xmlrpc_server_create();
|
||||
$request_xml = $HTTP_RAW_POST_DATA;
|
||||
|
||||
// Find out what method they are calling
|
||||
// This function is odd, you *NEED* to assign the results
|
||||
// to a value, or $method is never returned. (jengo)
|
||||
$null = xmlrpc_decode_request($request_xml, &$method);
|
||||
|
||||
if ($method == 'system.login')
|
||||
{
|
||||
xmlrpc_server_register_method($xmlrpc_server,'system.login','xmlrpc_login');
|
||||
echo xmlrpc_server_call_method($xmlrpc_server,$request_xml,'');
|
||||
xmlrpc_server_destroy($xmlrpc_server);
|
||||
|
||||
exit;
|
||||
}
|
||||
else
|
||||
{
|
||||
// They didn't request system.login and they didn't pass sessionid or
|
||||
// kp3, this is an invailed session (The session could have also been killed or expired)
|
||||
xmlrpc_error(1001,'Session expired');
|
||||
}
|
||||
}
|
||||
|
||||
// When PHP returns an error, return that error with a fault instead of
|
||||
// HTML with will make most parsers fall apart
|
||||
function xmlrpc_custom_error($error_number, $error_string, $filename, $line, $vars)
|
||||
{
|
||||
if (error_reporting() & $error_number)
|
||||
{
|
||||
$error_string .= sprintf("\nFilename: %s\nLine: %s",$filename,$line);
|
||||
|
||||
xmlrpc_error(1005,$error_string);
|
||||
}
|
||||
}
|
||||
|
||||
// This will create an XML-RPC error
|
||||
// FIXME! This needs to be expanded to handle PHP errors themselfs
|
||||
// it will make debugging easier
|
||||
function xmlrpc_error($error_number, $error_string)
|
||||
{
|
||||
$values = array(
|
||||
'faultString' => $error_string,
|
||||
'faultCode' => $error_number
|
||||
);
|
||||
|
||||
echo xmlrpc_encode_request(NULL,$values);
|
||||
|
||||
xmlrpc_server_destroy($GLOBALS['xmlrpc_server']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// This will dynamicly create the avaiable methods for each class
|
||||
function xmlrpc_list_methods($method)
|
||||
{
|
||||
list($app,$class,$func) = explode('.',$method);
|
||||
$methods[] = 'system.login';
|
||||
$methods[] = 'system.logout';
|
||||
$methods[] = $method;
|
||||
$methods[] = $app . '.' . $class . 'describeMethods';
|
||||
for ($i=0; $i<count($GLOBALS['obj']->xmlrpc_methods); $i++)
|
||||
{
|
||||
$methods[] = $GLOBALS['obj']->xmlrpc_methods[$i]['name'];
|
||||
}
|
||||
|
||||
return $methods;
|
||||
}
|
||||
|
||||
function xmlrpc_describe_methods($method)
|
||||
{
|
||||
list($app,$class,$func) = explode('.',$method);
|
||||
// FIXME! Add the missing pre-defined methods, example: system.login
|
||||
for ($i=0; $i<count($GLOBALS['obj']->xmlrpc_methods); $i++)
|
||||
{
|
||||
$methods[] = $GLOBALS['obj']->xmlrpc_methods[$i];
|
||||
}
|
||||
|
||||
return $methods;
|
||||
}
|
||||
|
||||
// I know everyone hates wrappers, but this is the best way this can be done
|
||||
// The XML-RPC functions pass method_name as the first parameter, which is
|
||||
// unacceptable.
|
||||
// Another reason for this, is it might be possiable to pass the sessionid
|
||||
// and kp3 instead of using HTTP_AUTH features.
|
||||
// Would be a nice workaround for librarys that don't support it, as its
|
||||
// not in the XML-RPC spec.
|
||||
function xmlrpc_call_wrapper($method_name, $parameters)
|
||||
{
|
||||
$a = explode('.',$method_name);
|
||||
|
||||
if (count($parameters) == 0)
|
||||
{
|
||||
$return = $GLOBALS['obj']->$a[2]();
|
||||
}
|
||||
else if (count($parameters) == 1)
|
||||
{
|
||||
$return = $GLOBALS['obj']->$a[2]($parameters[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
for ($i=0; $i<count($parameters); $i++)
|
||||
{
|
||||
$p[] = '$parameters[' . $i . ']';
|
||||
}
|
||||
eval('$return = $GLOBALS[\'obj\']->$a[2](' . implode(',',$p) . ');');
|
||||
}
|
||||
|
||||
// This needs to be expanded and more fully tested
|
||||
if (gettype($return) == 'NULL')
|
||||
{
|
||||
return xmlrpc_error(1002,'No return value detected');
|
||||
}
|
||||
else
|
||||
{
|
||||
return $return;
|
||||
}
|
||||
}
|
||||
|
||||
// The following are common functions used ONLY by XML-RPC
|
||||
function xmlrpc_login($method_name, $parameters)
|
||||
{
|
||||
$p = $parameters[0];
|
||||
|
||||
if ($p['domain'])
|
||||
{
|
||||
$username = $p['username'] . '@' . $p['domain'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$username = $p['username'];
|
||||
}
|
||||
|
||||
$sessionid = $GLOBALS['phpgw']->session->create($username,$p['password'],'text');
|
||||
$kp3 = $GLOBALS['phpgw']->session->kp3;
|
||||
$domain = $GLOBALS['phpgw']->session->account_domain;
|
||||
|
||||
if ($sessionid && $kp3)
|
||||
{
|
||||
return array(
|
||||
'sessionid' => $sessionid,
|
||||
'kp3' => $kp3,
|
||||
'domain' => $domain
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
xmlrpc_error(1001,'Login failed');
|
||||
}
|
||||
}
|
||||
|
||||
function xmlrpc_logout($method, $parameters)
|
||||
{
|
||||
// We have already verified the session upon before this method is even created
|
||||
// As long as nothing happens upon, its safe to destroy the session without
|
||||
// fear of it being a hijacked session
|
||||
$GLOBALS['phpgw']->session->destroy($GLOBALS['phpgw']->session->sessionid,$GLOBALS['phpgw']->session->kp3);
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user