connecting web applications with desktop, confoo 2011

118
Connecting web and desktop: WebDAV ConFoo 2011 Tobias Schlitt <[email protected]> March 10, 2011

Upload: bachkoutou-toutou

Post on 14-Dec-2014

1.062 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAVConFoo 2011

Tobias Schlitt <[email protected]>

March 10, 2011

Page 2: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 2 / 49

Outline

Introduction

HTTP & WebDAV

Development challenges

Zeta Webdav component

Page 3: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 3 / 49

About me

I Degree in computer sience

I More than 10 years ofprofessional PHP

I Open source enthusiastI Apache Zeta ComponentsI ArbitI PHPUnitI . . .

Page 4: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 3 / 49

About me

I Degree in computer sience

I More than 10 years ofprofessional PHP

I Open source enthusiastI Apache Zeta ComponentsI ArbitI PHPUnitI . . .

Page 5: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 3 / 49

About me

I Degree in computer sience

I More than 10 years ofprofessional PHP

I Open source enthusiastI Apache Zeta ComponentsI ArbitI PHPUnitI . . .

Page 6: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 3 / 49

About me

I Degree in computer sience

I More than 10 years ofprofessional PHP

I Open source enthusiastI Apache Zeta ComponentsI ArbitI PHPUnitI . . .

Co-Founder ofQafoo GmbH

http://qafoo.com

Qafoopassion for software quality

Page 7: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 3 / 49

About me

I Degree in computer sience

I More than 10 years ofprofessional PHP

I Open source enthusiastI Apache Zeta ComponentsI ArbitI PHPUnitI . . .

Co-Founder ofQafoo GmbH

http://qafoo.com

Qafoopassion for software quality

We help people to producehigh quality PHP code.

Page 8: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 4 / 49

Outline

Introduction

HTTP & WebDAV

Development challenges

Zeta Webdav component

Page 9: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 5 / 49

The concept

GET /some/resource

Page 10: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 5 / 49

The concept

POST /some/resource???

Page 11: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 5 / 49

The concept

PUT /some/resource???

Page 12: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 5 / 49

The concept

Please file that documentunder /some/resource

Done.

Page 13: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 5 / 49

The concept

Please create a new col-lection of documentsunder /some/more

Done.

Page 14: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 6 / 49

HTTP

I Network protocol driving the web

I Current version: 1.1

I RFC 2616 (June 1999)http://tools.ietf.org/html/rfc2616

I Inventor: Sir Tim Berners-Lee

I Client / server based

I Stateless communicationI Defines

I Request / responseI Headers / bodyI Formats / actions

Page 15: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 6 / 49

HTTP

I Network protocol driving the web

I Current version: 1.1

I RFC 2616 (June 1999)http://tools.ietf.org/html/rfc2616

I Inventor: Sir Tim Berners-Lee

I Client / server based

I Stateless communicationI Defines

I Request / responseI Headers / bodyI Formats / actions

Page 16: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 6 / 49

HTTP

I Network protocol driving the web

I Current version: 1.1

I RFC 2616 (June 1999)http://tools.ietf.org/html/rfc2616

I Inventor: Sir Tim Berners-Lee

I Client / server based

I Stateless communicationI Defines

I Request / responseI Headers / bodyI Formats / actions

Page 17: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 6 / 49

HTTP

I Network protocol driving the web

I Current version: 1.1

I RFC 2616 (June 1999)http://tools.ietf.org/html/rfc2616

I Inventor: Sir Tim Berners-Lee

I Client / server based

I Stateless communicationI Defines

I Request / responseI Headers / bodyI Formats / actions

Page 18: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 7 / 49

WebDAV

I HTTP Extensions for Distributed AuthoringI RFC 2518 (February 1999)I http://tools.ietf.org/html/rfc2518

I HTTP Extensions for Web Distributed Authoring andVersioning

I RFC 4918 (June 2007)I http://tools.ietf.org/html/rfc4918

I IETF Standard

I Extension to HTTP

I Allows distributed editing

Page 19: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 7 / 49

WebDAV

I HTTP Extensions for Distributed AuthoringI RFC 2518 (February 1999)I http://tools.ietf.org/html/rfc2518

I HTTP Extensions for Web Distributed Authoring andVersioning

I RFC 4918 (June 2007)I http://tools.ietf.org/html/rfc4918

I IETF Standard

I Extension to HTTP

I Allows distributed editing

Page 20: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 7 / 49

WebDAV

I HTTP Extensions for Distributed AuthoringI RFC 2518 (February 1999)I http://tools.ietf.org/html/rfc2518

I HTTP Extensions for Web Distributed Authoring andVersioning

I RFC 4918 (June 2007)I http://tools.ietf.org/html/rfc4918

I IETF Standard

I Extension to HTTP

I Allows distributed editing

Page 21: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 7 / 49

WebDAV

I HTTP Extensions for Distributed AuthoringI RFC 2518 (February 1999)I http://tools.ietf.org/html/rfc2518

I HTTP Extensions for Web Distributed Authoring andVersioning

I RFC 4918 (June 2007)I http://tools.ietf.org/html/rfc4918

I IETF Standard

I Extension to HTTP

I Allows distributed editing

Page 22: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 7 / 49

WebDAV

I HTTP Extensions for Distributed AuthoringI RFC 2518 (February 1999)I http://tools.ietf.org/html/rfc2518

I HTTP Extensions for Web Distributed Authoring andVersioning

I RFC 4918 (June 2007)I http://tools.ietf.org/html/rfc4918

I IETF Standard

I Extension to HTTP

I Allows distributed editing

WebDAV allows your users to edit web content easily.

Page 23: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 8 / 49

Request methods

I HTTPI GETI POSTI HEADI PUTI DELETEI OPTIONSI TRACEI CONNECT

I WebDAVI MKCOLI COPYI MOVEI PROPFINDI PROPPATCHI LOCKI UNLOCK

Page 24: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 8 / 49

Request methods

I HTTPI GETI POSTI HEADI PUTI DELETEI OPTIONSI TRACEI CONNECT

I WebDAVI MKCOLI COPYI MOVEI PROPFINDI PROPPATCHI LOCKI UNLOCK

Page 25: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 8 / 49

Request methods

I HTTPI GETI POSTI HEADI PUTI DELETEI OPTIONSI TRACEI CONNECT

I WebDAVI MKCOLI COPYI MOVEI PROPFINDI PROPPATCHI LOCKI UNLOCK

Page 26: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 8 / 49

Request methods

I HTTPI GETI POSTI HEADI PUTI DELETEI OPTIONSI TRACEI CONNECT

I WebDAVI MKCOLI COPYI MOVEI PROPFINDI PROPPATCHI LOCKI UNLOCK

Page 27: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 8 / 49

Request methods

I HTTPI GETI POSTI HEADI PUTI DELETEI OPTIONSI TRACEI CONNECT

I WebDAVI MKCOLI COPYI MOVEI PROPFINDI PROPPATCHI LOCKI UNLOCK

Page 28: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 8 / 49

Request methods

I HTTPI GETI POSTI HEADI PUTI DELETEI OPTIONSI TRACEI CONNECT

I WebDAVI MKCOLI COPYI MOVEI PROPFINDI PROPPATCHI LOCKI UNLOCK

Page 29: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 8 / 49

Request methods

I HTTPI GETI POSTI HEADI PUTI DELETEI OPTIONSI TRACEI CONNECT

I WebDAVI MKCOLI COPYI MOVEI PROPFINDI PROPPATCHI LOCKI UNLOCK

Page 30: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 8 / 49

Request methods

I HTTPI GETI POSTI HEADI PUTI DELETEI OPTIONSI TRACEI CONNECT

I WebDAVI MKCOLI COPYI MOVEI PROPFINDI PROPPATCHI LOCKI UNLOCK

Significant for WebDAV

Page 31: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 9 / 49

Request headers

I HTTPI Accept[-*]I AuthorizationI If-[None-]MatchI If-[Un]Modified-SinceI User-AgentI ...

I WebDAVI DepthI DestinationI IfI OverwriteI Timeout

Page 32: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 9 / 49

Request headers

I HTTPI Accept[-*]I AuthorizationI If-[None-]MatchI If-[Un]Modified-SinceI User-AgentI ...

I WebDAVI DepthI DestinationI IfI OverwriteI Timeout

Page 33: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 9 / 49

Request headers

I HTTPI Accept[-*]I AuthorizationI If-[None-]MatchI If-[Un]Modified-SinceI User-AgentI ...

I WebDAVI DepthI DestinationI IfI OverwriteI Timeout

Significant for WebDAV

Page 34: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 10 / 49

Response headers

I HTTPI Accept-RangesI Content-LengthI Content-TypeI ETagI LocationI Retry-AfterI ServerI WWW-AuthenticateI ...

I WebDAVI DAVI Lock-TokenI Timeout

Page 35: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 10 / 49

Response headers

I HTTPI Accept-RangesI Content-LengthI Content-TypeI ETagI LocationI Retry-AfterI ServerI WWW-AuthenticateI ...

I WebDAVI DAVI Lock-TokenI Timeout

Page 36: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 10 / 49

Response headers

I HTTPI Accept-RangesI Content-LengthI Content-TypeI ETagI LocationI Retry-AfterI ServerI WWW-AuthenticateI ...

I WebDAVI DAVI Lock-TokenI Timeout

Significant for WebDAV

Page 37: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 11 / 49

Request / response bodies

I HTTPI Request body mostly not significantI Only PUT method needs body (to be stored)I Response body usually content to deliver (unspecified)I Error responses may contain arbitrary content

Page 38: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 11 / 49

Request / response bodies

I WebDAVI Bodies are significantI Many methods require XML bodies

Request

I PROPFIND

I PROPPATCH

I COPY (optional)

I MOVE (optional)

I LOCK

Response

I PROPFIND

I PROPPATCH

I LOCK

I Potentially others(multi-status)

Page 39: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 11 / 49

Request / response bodies

I WebDAVI Bodies are significantI Many methods require XML bodies

Request

I PROPFIND

I PROPPATCH

I COPY (optional)

I MOVE (optional)

I LOCK

Response

I PROPFIND

I PROPPATCH

I LOCK

I Potentially others(multi-status)

Page 40: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 11 / 49

Request / response bodies

I WebDAVI Bodies are significantI Many methods require XML bodies

Request

I PROPFIND

I PROPPATCH

I COPY (optional)

I MOVE (optional)

I LOCK

Response

I PROPFIND

I PROPPATCH

I LOCK

I Potentially others(multi-status)

Page 41: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 12 / 49

Properties

I Concept introduced by WebDAV

I Store meta information about content

I Usually not directly visible to the user

I Live propertiesI creationdateI displaynameI get*I lockdiscoveryI . . .

I Dead propertiesI Arbitrary dataI Custom namespaceI XML favored

Page 42: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 12 / 49

Properties

I Concept introduced by WebDAV

I Store meta information about content

I Usually not directly visible to the user

I Live propertiesI creationdateI displaynameI get*I lockdiscoveryI . . .

I Dead propertiesI Arbitrary dataI Custom namespaceI XML favored

Page 43: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 12 / 49

Properties

I Concept introduced by WebDAV

I Store meta information about content

I Usually not directly visible to the user

I Live propertiesI creationdateI displaynameI get*I lockdiscoveryI . . .

I Dead propertiesI Arbitrary dataI Custom namespaceI XML favored

Page 44: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 13 / 49

Outline

Introduction

HTTP & WebDAV

Development challenges

Zeta Webdav component

Page 45: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 14 / 49

Development challenges

I Server development in generalI WebDAV RFCs are a BBOM

I UnstructuredI AmbiguousI Design fails

I Misbehaving clientsI Ignore the specificationI Different interpretations of RFCsI Proprietary BS

I Exchangeable back ends

Page 46: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 15 / 49

Outline

Development challengesRFC problemsClient problemsBack end flexibility

Page 47: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 16 / 49

COPY / MOVE methods

I Errors on COPY“[...] if an error occurs while copying an internal collection,the server MUST NOT copy any resources identified bymembers of this collection (i.e., the server must skip thissubtree) [...]” [?]

I MOVE“[...] is the logical equivalent of a copy (COPY), followed byconsistency maintenance processing, followed by a delete ofthe source,[...]” [?]

I MOVE errors“[...] after detecting the error, the move operation SHOULDtry to finish as much of the original move as possible [...]” [?]

Page 48: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 16 / 49

COPY / MOVE methods

I Errors on COPY“[...] if an error occurs while copying an internal collection,the server MUST NOT copy any resources identified bymembers of this collection (i.e., the server must skip thissubtree) [...]” [?]

I MOVE“[...] is the logical equivalent of a copy (COPY), followed byconsistency maintenance processing, followed by a delete ofthe source,[...]” [?]

I MOVE errors“[...] after detecting the error, the move operation SHOULDtry to finish as much of the original move as possible [...]” [?]

Page 49: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 16 / 49

COPY / MOVE methods

I Errors on COPY“[...] if an error occurs while copying an internal collection,the server MUST NOT copy any resources identified bymembers of this collection (i.e., the server must skip thissubtree) [...]” [?]

I MOVE“[...] is the logical equivalent of a copy (COPY), followed byconsistency maintenance processing, followed by a delete ofthe source,[...]” [?]

I MOVE errors“[...] after detecting the error, the move operation SHOULDtry to finish as much of the original move as possible [...]” [?]

Page 50: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 17 / 49

The If header

I Makes operations conditional.I Apply operation only if

I all conditions are metI no condition is met

1 No−tag− l i s t = L i s t2 Tagged− l i s t = R e s o u r c e 1∗ L i s t3 R e s o u r c e = Coded−URL4 L i s t = ” ( ”5 1∗ ( [ ”Not” ] ( State−token | ” [ ” e n t i t y−tag ” ] ” ) )6 ” ) ”7 State−token = Coded−URL8 Coded−URL = ”<” a b s o l u t e U R I ”>”

Page 51: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 18 / 49

The If header

I Can containI lock tokensI entity tags

1 I f : (< l o c k t o k e n : a−w r i t e−l o c k−token>2 [ ” I am an ETag” ] ) ( [ ” I am a n o t h e r ETag” ] )

Page 52: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 19 / 49

The If header

I Conditions can apply toI single resourcesI sets of resourcesI all affected resources

1 <h t t p : // example . com/ r e s o u r c e 1 >2 (< l o c k t o k e n : a−w r i t e−l o c k−token> [W/”A weak ETag” ] )3 ( Not [ ” s t r o n g ETag” ] )

I Required own parser implementation

I Parser is about 150 LOC

Page 53: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 20 / 49

Locking

I 2 different types of locksI ExclusiveI Shared

I Lock conditions must be validated before anything else

I Timeout refresh on every lock use (successful or not)(Fixed in RCF 4918)

I Not specified how to associate principles with lock tokens

I Lock-Null-Resources(Partly fixed in RFC 4918)

I Do not behave like real resourcesI Must vanish when the lock is releasedI A collection can be created on them

Page 54: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 20 / 49

Locking

I 2 different types of locksI ExclusiveI Shared

I Lock conditions must be validated before anything else

I Timeout refresh on every lock use (successful or not)(Fixed in RCF 4918)

I Not specified how to associate principles with lock tokens

I Lock-Null-Resources(Partly fixed in RFC 4918)

I Do not behave like real resourcesI Must vanish when the lock is releasedI A collection can be created on them

Page 55: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 20 / 49

Locking

I 2 different types of locksI ExclusiveI Shared

I Lock conditions must be validated before anything else

I Timeout refresh on every lock use (successful or not)(Fixed in RCF 4918)

I Not specified how to associate principles with lock tokens

I Lock-Null-Resources(Partly fixed in RFC 4918)

I Do not behave like real resourcesI Must vanish when the lock is releasedI A collection can be created on them

Page 56: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 20 / 49

Locking

I 2 different types of locksI ExclusiveI Shared

I Lock conditions must be validated before anything else

I Timeout refresh on every lock use (successful or not)(Fixed in RCF 4918)

I Not specified how to associate principles with lock tokens

I Lock-Null-Resources(Partly fixed in RFC 4918)

I Do not behave like real resourcesI Must vanish when the lock is releasedI A collection can be created on them

Page 57: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 20 / 49

Locking

I 2 different types of locksI ExclusiveI Shared

I Lock conditions must be validated before anything else

I Timeout refresh on every lock use (successful or not)(Fixed in RCF 4918)

I Not specified how to associate principles with lock tokens

I Lock-Null-Resources(Partly fixed in RFC 4918)

I Do not behave like real resourcesI Must vanish when the lock is releasedI A collection can be created on them

Page 58: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 21 / 49

Outline

Development challengesRFC problemsClient problemsBack end flexibility

Page 59: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 22 / 49

Konqueror / Nautilus

I Konqueror (KDE)I Does not decode URLs properlyI Requires Apache like error messages for 404

I Nautilus (Gnome)I Cannot cope with charset="..." info in MIME types

Page 60: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 22 / 49

Konqueror / Nautilus

I Konqueror (KDE)I Does not decode URLs properlyI Requires Apache like error messages for 404

I Nautilus (Gnome)I Cannot cope with charset="..." info in MIME types

Page 61: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 23 / 49

Windows / InternetExplorer

I At least 3 different WebDAV user agents in WindowsI Loaded depending on how you initialize connectionI Transparently switched occasionally

I Requires custom header MS-Author-Via on every responseI Requires custom namespaces set on live properties

I Requires special namespace shortcut to be used (sic!)I Requires different shortcuts for DAV: namespace

Page 62: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 23 / 49

Windows / InternetExplorer

I At least 3 different WebDAV user agents in WindowsI Loaded depending on how you initialize connectionI Transparently switched occasionally

I Requires custom header MS-Author-Via on every responseI Requires custom namespaces set on live properties

I Requires special namespace shortcut to be used (sic!)I Requires different shortcuts for DAV: namespace

Page 63: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 23 / 49

Windows / InternetExplorer

I At least 3 different WebDAV user agents in WindowsI Loaded depending on how you initialize connectionI Transparently switched occasionally

I Requires custom header MS-Author-Via on every responseI Requires custom namespaces set on live properties

I Requires special namespace shortcut to be used (sic!)I Requires different shortcuts for DAV: namespace

Page 64: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 24 / 49

Windows / InternetExplorer II

I Cannot cope with non-significant white spaces in XML bodies

I Requires newline at the end of every XML body

I Occasionally sends invalid PROPFIND requests

Page 65: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 24 / 49

Windows / InternetExplorer II

I Cannot cope with non-significant white spaces in XML bodies

I Requires newline at the end of every XML body

I Occasionally sends invalid PROPFIND requests

Page 66: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 24 / 49

Windows / InternetExplorer II

I Cannot cope with non-significant white spaces in XML bodies

I Requires newline at the end of every XML body

I Occasionally sends invalid PROPFIND requests

Page 67: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 25 / 49

Outline

Development challengesRFC problemsClient problemsBack end flexibility

Page 68: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 26 / 49

Back end flexibility

I Exchangeable back endI File systemI Memory (testing)I SQL Database?I Subversion?

I Independent of client issues

I Protocol enhancements back end independent

I Easy implementation

Page 69: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 26 / 49

Back end flexibility

I Exchangeable back endI File systemI Memory (testing)I SQL Database?I Subversion?

I Independent of client issues

I Protocol enhancements back end independent

I Easy implementation

Page 70: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 26 / 49

Back end flexibility

I Exchangeable back endI File systemI Memory (testing)I SQL Database?I Subversion?

I Independent of client issues

I Protocol enhancements back end independent

I Easy implementation

Page 71: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 26 / 49

Back end flexibility

I Exchangeable back endI File systemI Memory (testing)I SQL Database?I Subversion?

I Independent of client issues

I Protocol enhancements back end independent

I Easy implementation

Page 72: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 27 / 49

Outline

Introduction

HTTP & WebDAV

Development challenges

Zeta Webdav component

Page 73: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 28 / 49

Outline

Zeta Webdav componentBackgroundUsageCustomizationEnd note

Page 74: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 29 / 49

eZ Components

Page 75: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 29 / 49

Apache Zeta Components

ZetaComponents

apache

Page 76: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 30 / 49

History: eZ Components

I Developed since 2004 by eZ Systems ASI Makers of enterprise OSS CMS eZ PublishI http://ez.no

I Initial goalI Refactor and cleanup core libs of eZ PublishI Pull out standalone, general purpose library

I ObjectivesI High quality codeI Well thought out APII Backwards compatibilityI Extensive documentation

Page 77: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 31 / 49

History: The break

March 2010

I All eZ Components developers left eZ SystemsI Still, we wanted to . . .

I put voluntary efforts into the projectI push it furtherI ensure it is not broken

I Discussion with eZ SystemsI Spin off the project to become independentI Look for or create a foundation

I Result: Propose code to Apache Software Foundation

Page 78: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 32 / 49

Apache Software Foundation

I http://apache.org

I Well knwon OSS foundationI Home of OSS projects like

I Apache HTTP serverI SubversionI CouchDB

I http://zeta-components.org

Page 79: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 33 / 49

The Webdav component

I General purpose WebDAV server

I Easy integration and customization

I Work around client issues

Page 80: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 34 / 49

Zeta Webdav architecture

Back end layer

Simple backend (base class)

File systemback end

eZ Publishback end

Your customback end

Server layer

Plugin APIYour

authentication /authorization

RFC conformtransport

Microsoftcompatibletransport

Nautiluscompatibletransport

Transport layer Plugins

Lock plugin

Your custom plugin

Page 81: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 35 / 49

Outline

Zeta Webdav componentBackgroundUsageCustomizationEnd note

Page 82: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 36 / 49

Setup a simple WebDAV server

1 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;2 $backend = new ezcWebdavFi leBackend (3 dirname ( F I L E ) . ’ / backend ’4 ) ;56 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 83: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 36 / 49

Setup a simple WebDAV server

1 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;2 $backend = new ezcWebdavFi leBackend (3 dirname ( F I L E ) . ’ / backend ’4 ) ;56 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 84: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 36 / 49

Setup a simple WebDAV server

1 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;2 $backend = new ezcWebdavFi leBackend (3 dirname ( F I L E ) . ’ / backend ’4 ) ;56 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 85: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 36 / 49

Setup a simple WebDAV server

1 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;2 $backend = new ezcWebdavFi leBackend (3 dirname ( F I L E ) . ’ / backend ’4 ) ;56 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 86: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 37 / 49

WebDAV server with locking

1 r e q u i r e o n c e ’ c u s t o m l o c k a u t h . php ’ ;23 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;45 $ s e r v e r−>auth = new myCustomLockAuth (6 // Some c o n f i g u r a t i o n d i r e c t o r y h e r e7 dirname ( F I L E ) . ’ / t o k e n s . php ’8 ) ;9

10 $ s e r v e r−>p l u g i n R e g i s t r y−>r e g i s t e r P l u g i n (11 new e z c W e b d a v L o c k P l u g i n C o n f i g u r a t i o n ( )12 ) ;1314 $backend = new ezcWebdavFi leBackend (15 // Your WebDAV d i r e c t o r y h e r e16 dirname ( F I L E ) . ’ / backend ’17 ) ;1819 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 87: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 37 / 49

WebDAV server with locking

1 r e q u i r e o n c e ’ c u s t o m l o c k a u t h . php ’ ;23 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;45 $ s e r v e r−>auth = new myCustomLockAuth (6 // Some c o n f i g u r a t i o n d i r e c t o r y h e r e7 dirname ( F I L E ) . ’ / t o k e n s . php ’8 ) ;9

10 $ s e r v e r−>p l u g i n R e g i s t r y−>r e g i s t e r P l u g i n (11 new e z c W e b d a v L o c k P l u g i n C o n f i g u r a t i o n ( )12 ) ;1314 $backend = new ezcWebdavFi leBackend (15 // Your WebDAV d i r e c t o r y h e r e16 dirname ( F I L E ) . ’ / backend ’17 ) ;1819 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 88: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 37 / 49

WebDAV server with locking

1 r e q u i r e o n c e ’ c u s t o m l o c k a u t h . php ’ ;23 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;45 $ s e r v e r−>auth = new myCustomLockAuth (6 // Some c o n f i g u r a t i o n d i r e c t o r y h e r e7 dirname ( F I L E ) . ’ / t o k e n s . php ’8 ) ;9

10 $ s e r v e r−>p l u g i n R e g i s t r y−>r e g i s t e r P l u g i n (11 new e z c W e b d a v L o c k P l u g i n C o n f i g u r a t i o n ( )12 ) ;1314 $backend = new ezcWebdavFi leBackend (15 // Your WebDAV d i r e c t o r y h e r e16 dirname ( F I L E ) . ’ / backend ’17 ) ;1819 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 89: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 37 / 49

WebDAV server with locking

1 r e q u i r e o n c e ’ c u s t o m l o c k a u t h . php ’ ;23 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;45 $ s e r v e r−>auth = new myCustomLockAuth (6 // Some c o n f i g u r a t i o n d i r e c t o r y h e r e7 dirname ( F I L E ) . ’ / t o k e n s . php ’8 ) ;9

10 $ s e r v e r−>p l u g i n R e g i s t r y−>r e g i s t e r P l u g i n (11 new e z c W e b d a v L o c k P l u g i n C o n f i g u r a t i o n ( )12 ) ;1314 $backend = new ezcWebdavFi leBackend (15 // Your WebDAV d i r e c t o r y h e r e16 dirname ( F I L E ) . ’ / backend ’17 ) ;1819 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 90: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 38 / 49

Authentication

1 i n t e r f a c e ezcWebdavAnonymousAuthent icator2 {3 p u b l i c f u n c t i o n authent i cateAnonymous ( ezcWebdavAnonymousAuth $data ) ;4 }

1 i n t e r f a c e e z c W e b d a v B a s i c A u t h e n t i c a t o r e x t e n d s ezcWebdavAnonymousAuthent icator2 {3 p u b l i c f u n c t i o n a u t h e n t i c a t e B a s i c ( ezcWebdavBasicAuth $data ) ;4 }

1 i n t e r f a c e e z c W e b d a v D i g e s t A u t h e n t i c a t o r e x t e n d s e z c W e b d a v B a s i c A u t h e n t i c a t o r2 {3 p u b l i c f u n c t i o n a u t h e n t i c a t e D i g e s t ( ezcWebdavDigestAuth $data ) ;4 }

Page 91: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 38 / 49

Authentication

1 i n t e r f a c e ezcWebdavAnonymousAuthent icator2 {3 p u b l i c f u n c t i o n authent i cateAnonymous ( ezcWebdavAnonymousAuth $data ) ;4 }

1 i n t e r f a c e e z c W e b d a v B a s i c A u t h e n t i c a t o r e x t e n d s ezcWebdavAnonymousAuthent icator2 {3 p u b l i c f u n c t i o n a u t h e n t i c a t e B a s i c ( ezcWebdavBasicAuth $data ) ;4 }

1 i n t e r f a c e e z c W e b d a v D i g e s t A u t h e n t i c a t o r e x t e n d s e z c W e b d a v B a s i c A u t h e n t i c a t o r2 {3 p u b l i c f u n c t i o n a u t h e n t i c a t e D i g e s t ( ezcWebdavDigestAuth $data ) ;4 }

Page 92: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 38 / 49

Authentication

1 i n t e r f a c e ezcWebdavAnonymousAuthent icator2 {3 p u b l i c f u n c t i o n authent i cateAnonymous ( ezcWebdavAnonymousAuth $data ) ;4 }

1 i n t e r f a c e e z c W e b d a v B a s i c A u t h e n t i c a t o r e x t e n d s ezcWebdavAnonymousAuthent icator2 {3 p u b l i c f u n c t i o n a u t h e n t i c a t e B a s i c ( ezcWebdavBasicAuth $data ) ;4 }

1 i n t e r f a c e e z c W e b d a v D i g e s t A u t h e n t i c a t o r e x t e n d s e z c W e b d a v B a s i c A u t h e n t i c a t o r2 {3 p u b l i c f u n c t i o n a u t h e n t i c a t e D i g e s t ( ezcWebdavDigestAuth $data ) ;4 }

Page 93: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 38 / 49

Authentication

1 i n t e r f a c e ezcWebdavAnonymousAuthent icator2 {3 p u b l i c f u n c t i o n authent i cateAnonymous ( ezcWebdavAnonymousAuth $data ) ;4 }

1 i n t e r f a c e e z c W e b d a v B a s i c A u t h e n t i c a t o r e x t e n d s ezcWebdavAnonymousAuthent icator2 {3 p u b l i c f u n c t i o n a u t h e n t i c a t e B a s i c ( ezcWebdavBasicAuth $data ) ;4 }

1 i n t e r f a c e e z c W e b d a v D i g e s t A u t h e n t i c a t o r e x t e n d s e z c W e b d a v B a s i c A u t h e n t i c a t o r2 {3 p u b l i c f u n c t i o n a u t h e n t i c a t e D i g e s t ( ezcWebdavDigestAuth $data ) ;4 }

Page 94: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 39 / 49

Authorization

1 i n t e r f a c e ezcWebdavAuthor i ze r2 {3 c o n s t ACCESS READ = 1 ;4 c o n s t ACCESS WRITE = 2 ;56 p u b l i c f u n c t i o n a u t h o r i z e ( $user , $path , $ a c c e s s = s e l f : : ACCESS READ ) ;7 }

1 i n t e r f a c e ezcWebdavLockAuthor i ze r e x t e n d s ezcWebdavAuthor i ze r2 {3 p u b l i c f u n c t i o n a s s i g n L o c k ( $user , $ lockToken ) ;45 p u b l i c f u n c t i o n ownsLock ( $user , $ lockToken ) ;67 p u b l i c f u n c t i o n r e l e a s e L o c k ( $user , $ lockToken ) ;8 }

Page 95: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 39 / 49

Authorization

1 i n t e r f a c e ezcWebdavAuthor i ze r2 {3 c o n s t ACCESS READ = 1 ;4 c o n s t ACCESS WRITE = 2 ;56 p u b l i c f u n c t i o n a u t h o r i z e ( $user , $path , $ a c c e s s = s e l f : : ACCESS READ ) ;7 }

1 i n t e r f a c e ezcWebdavLockAuthor i ze r e x t e n d s ezcWebdavAuthor i ze r2 {3 p u b l i c f u n c t i o n a s s i g n L o c k ( $user , $ lockToken ) ;45 p u b l i c f u n c t i o n ownsLock ( $user , $ lockToken ) ;67 p u b l i c f u n c t i o n r e l e a s e L o c k ( $user , $ lockToken ) ;8 }

Page 96: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 39 / 49

Authorization

1 i n t e r f a c e ezcWebdavAuthor i ze r2 {3 c o n s t ACCESS READ = 1 ;4 c o n s t ACCESS WRITE = 2 ;56 p u b l i c f u n c t i o n a u t h o r i z e ( $user , $path , $ a c c e s s = s e l f : : ACCESS READ ) ;7 }

1 i n t e r f a c e ezcWebdavLockAuthor i ze r e x t e n d s ezcWebdavAuthor i ze r2 {3 p u b l i c f u n c t i o n a s s i g n L o c k ( $user , $ lockToken ) ;45 p u b l i c f u n c t i o n ownsLock ( $user , $ lockToken ) ;67 p u b l i c f u n c t i o n r e l e a s e L o c k ( $user , $ lockToken ) ;8 }

Page 97: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 39 / 49

Authorization

1 i n t e r f a c e ezcWebdavAuthor i ze r2 {3 c o n s t ACCESS READ = 1 ;4 c o n s t ACCESS WRITE = 2 ;56 p u b l i c f u n c t i o n a u t h o r i z e ( $user , $path , $ a c c e s s = s e l f : : ACCESS READ ) ;7 }

1 i n t e r f a c e ezcWebdavLockAuthor i ze r e x t e n d s ezcWebdavAuthor i ze r2 {3 p u b l i c f u n c t i o n a s s i g n L o c k ( $user , $ lockToken ) ;45 p u b l i c f u n c t i o n ownsLock ( $user , $ lockToken ) ;67 p u b l i c f u n c t i o n r e l e a s e L o c k ( $user , $ lockToken ) ;8 }

Page 98: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 39 / 49

Authorization

1 i n t e r f a c e ezcWebdavAuthor i ze r2 {3 c o n s t ACCESS READ = 1 ;4 c o n s t ACCESS WRITE = 2 ;56 p u b l i c f u n c t i o n a u t h o r i z e ( $user , $path , $ a c c e s s = s e l f : : ACCESS READ ) ;7 }

1 i n t e r f a c e ezcWebdavLockAuthor i ze r e x t e n d s ezcWebdavAuthor i ze r2 {3 p u b l i c f u n c t i o n a s s i g n L o c k ( $user , $ lockToken ) ;45 p u b l i c f u n c t i o n ownsLock ( $user , $ lockToken ) ;67 p u b l i c f u n c t i o n r e l e a s e L o c k ( $user , $ lockToken ) ;8 }

Page 99: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 39 / 49

Authorization

1 i n t e r f a c e ezcWebdavAuthor i ze r2 {3 c o n s t ACCESS READ = 1 ;4 c o n s t ACCESS WRITE = 2 ;56 p u b l i c f u n c t i o n a u t h o r i z e ( $user , $path , $ a c c e s s = s e l f : : ACCESS READ ) ;7 }

1 i n t e r f a c e ezcWebdavLockAuthor i ze r e x t e n d s ezcWebdavAuthor i ze r2 {3 p u b l i c f u n c t i o n a s s i g n L o c k ( $user , $ lockToken ) ;45 p u b l i c f u n c t i o n ownsLock ( $user , $ lockToken ) ;67 p u b l i c f u n c t i o n r e l e a s e L o c k ( $user , $ lockToken ) ;8 }

Page 100: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 40 / 49

Outline

Zeta Webdav componentBackgroundUsageCustomizationEnd note

Page 101: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 41 / 49

Path handling

1 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;23 $ p a t h F a c t o r y = new ezcWebdavBas icPathFactory (4 ’ h t t p : / / example . com/ webdav / i n d e x . php ’5 ) ;67 f o r each ( $ s e r v e r−>c o n f i g u r a t i o n s as $ c o n f )8 {9 $conf−>p a t h F a c t o r y = $ p a t h F a c t o r y ;

10 }1112 $backend = new ezcWebdavFi leBackend (13 dirname ( F I L E ) . ’ / backend ’14 ) ;1516 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 102: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 41 / 49

Path handling

1 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;23 $ p a t h F a c t o r y = new ezcWebdavBas icPathFactory (4 ’ h t t p : / / example . com/ webdav / i n d e x . php ’5 ) ;67 f o r each ( $ s e r v e r−>c o n f i g u r a t i o n s as $ c o n f )8 {9 $conf−>p a t h F a c t o r y = $ p a t h F a c t o r y ;

10 }1112 $backend = new ezcWebdavFi leBackend (13 dirname ( F I L E ) . ’ / backend ’14 ) ;1516 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 103: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 41 / 49

Path handling

1 $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e ( ) ;23 $ p a t h F a c t o r y = new ezcWebdavBas icPathFactory (4 ’ h t t p : / / example . com/ webdav / i n d e x . php ’5 ) ;67 f o r each ( $ s e r v e r−>c o n f i g u r a t i o n s as $ c o n f )8 {9 $conf−>p a t h F a c t o r y = $ p a t h F a c t o r y ;

10 }1112 $backend = new ezcWebdavFi leBackend (13 dirname ( F I L E ) . ’ / backend ’14 ) ;1516 $ s e r v e r−>h a n d l e ( $backend ) ;

Page 104: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 42 / 49

The back end

I ezcWebdavFileBackend

I ezcWebdavMemoryBackend

I Write your ownI ezcWebdavSimpleBackendI ezcWebdavBackend

I ezcWebdavBackendPutI ezcWebdavBackendChangeI ezcWebdavBackendMakeCollectionI ezcWebdavLockBackend

Page 105: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 42 / 49

The back end

I ezcWebdavFileBackend

I ezcWebdavMemoryBackend

I Write your ownI ezcWebdavSimpleBackendI ezcWebdavBackend

I ezcWebdavBackendPutI ezcWebdavBackendChangeI ezcWebdavBackendMakeCollectionI ezcWebdavLockBackend

Page 106: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 42 / 49

The back end

I ezcWebdavFileBackend

I ezcWebdavMemoryBackend

I Write your ownI ezcWebdavSimpleBackendI ezcWebdavBackend

I ezcWebdavBackendPutI ezcWebdavBackendChangeI ezcWebdavBackendMakeCollectionI ezcWebdavLockBackend

Page 107: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 42 / 49

The back end

I ezcWebdavFileBackend

I ezcWebdavMemoryBackend

I Write your ownI ezcWebdavSimpleBackendI ezcWebdavBackend

I ezcWebdavBackendPutI ezcWebdavBackendChangeI ezcWebdavBackendMakeCollectionI ezcWebdavLockBackend

Page 108: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 43 / 49

ezcWebdavSimpleBackend

I Proper method handling

I Authorization

I Handling of If[-*] headers

I about 1600 LOC

I No deeper knowledge on WebDAV required

Page 109: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 44 / 49

New clients

I Adjust transport layerI Needs some patience

I Use Wireshark!

I Extend one or more ofI ezcWebdavTransportI ezcWebdavHeaderHandlerI ezcWebdavPropertyHandler

Page 110: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 44 / 49

New clients

I Adjust transport layerI Needs some patience

I Use Wireshark!

I Extend one or more ofI ezcWebdavTransportI ezcWebdavHeaderHandlerI ezcWebdavPropertyHandler

1 $ n e w C l i e n t C o n f = new e z c W e b d a v S e r v e r C o n f i g u r a t i o n (2 ’ (My.∗Webdav\s+C l i e n g t ) i ’ ,3 ’ myCustomTransportTransport ’4 // . . .5 ) ;67 $ s e r v e r−>c o n f i g u r a t i o n s−>i n s e r t B e f o r e ( $newCl ientConf , 0 ) ;

Page 111: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 44 / 49

New clients

I Adjust transport layerI Needs some patience

I Use Wireshark!

I Extend one or more ofI ezcWebdavTransportI ezcWebdavHeaderHandlerI ezcWebdavPropertyHandler

1 $ n e w C l i e n t C o n f = new e z c W e b d a v S e r v e r C o n f i g u r a t i o n (2 ’ (My.∗Webdav\s+C l i e n g t ) i ’ ,3 ’ myCustomTransportTransport ’4 // . . .5 ) ;67 $ s e r v e r−>c o n f i g u r a t i o n s−>i n s e r t B e f o r e ( $newCl ientConf , 0 ) ;

Page 112: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 45 / 49

Plugins

I Hook into requests / responses

I Handle unknown requests

I Issue unknown responses

I Send requests to the back end

Page 113: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 46 / 49

Outline

Zeta Webdav componentBackgroundUsageCustomizationEnd note

Page 114: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 47 / 49

Join the team!

I Come and contribute!

I Highly technical discussions

I Open minded people

I Apache Software Foundation

I http://zeta-components.org

Page 115: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 48 / 49

Q / A

Are there any questions left?

Page 116: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 49 / 49

Thanks for listening

Please rate this talk athttp://joind.in/2808

and / or give me some feedback right now!

Page 117: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 49 / 49

Thanks for listening

Please rate this talk athttp://joind.in/2808

and / or give me some feedback right now!

This is very important for . . .

I Speakers

I Organizers

I You!

Page 118: Connecting web Applications with Desktop, confoo 2011

Connecting web and desktop: WebDAV 49 / 49

Thanks for listening

Please rate this talk athttp://joind.in/2808

and / or give me some feedback right now!

Stay in touch

I Tobias Schlitt

I [email protected]

I @tobySen / @qafoo

Rent a PHP quality expert:http://qafoo.com