forked from extern/egroupware
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