[Twisted-web] Basic authentication in twisted.web

Grosch Franz-Josef (MPA/DF) twisted-web@twistedmatrix.com
Tue, 2 Mar 2004 18:02:44 +0100


This is a multi-part message in MIME format.

------_=_NextPart_001_01C40078.2E47D0E8
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

I need basic authentication in twisted.web for an XMLRPC server.

After reading the mailing list, the documentation and the code,=20
I came up with the following solution.

Since I'm rather new to twisted web, it would be nice if someone could =
comment on this code.=20
Perhaps it is helpful as an example for others solving the same problem =
or trying to understand twisted.web and twisted.cred.

Short usage instruction:

Save the code to basicauth.py
Start the server: twistd -noy basicauth.py
http://localhost:8080/ will show the file "basicauth.py" after =
authenticating with user "bob" and password "123"

By the way, twisted is fantastic.

Franz-Josef Grosch
--
Tenovis Comergo - Applications


------_=_NextPart_001_01C40078.2E47D0E8
Content-Type: application/octet-stream;
	name="basicauth.py"
Content-Transfer-Encoding: base64
Content-Description: basicauth.py
Content-Disposition: attachment;
	filename="basicauth.py"

ZnJvbSB0d2lzdGVkLmNyZWQgaW1wb3J0IHBvcnRhbCwgY2hlY2tlcnMsIGNyZWRlbnRpYWxzDQpm
cm9tIHR3aXN0ZWQucHJvdG9jb2xzIGltcG9ydCBodHRwDQpmcm9tIHR3aXN0ZWQud2ViIGltcG9y
dCByZXNvdXJjZSwgdXRpbCwgZXJyb3INCg0KZnJvbSB0d2lzdGVkLndlYi53b3ZlbiBpbXBvcnQg
c2ltcGxlZ3VhcmQNCg0KDQpjbGFzcyBCYXNpY0F1dGhXcmFwcGVyKHJlc291cmNlLlJlc291cmNl
KToNCg0KICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0YWwsIGJhc2ljUmVhbG09ImRlZmF1bHQi
KToNCiAgICAgICAgcmVzb3VyY2UuUmVzb3VyY2UuX19pbml0X18oc2VsZikNCiAgICAgICAgc2Vs
Zi5wb3J0YWwgPSBwb3J0YWwNCiAgICAgICAgc2VsZi5iYXNpY1JlYWxtID0gYmFzaWNSZWFsbQ0K
DQogICAgZGVmIGdldENoaWxkKHNlbGYsIHBhdGgsIHJlcXVlc3QpOg0KICAgICAgICBkZWYgbG9n
aW5TdWNjZXNzKHJlc3VsdCk6DQogICAgICAgICAgICBpbnRlcmZhY2UsIGF2YXRhciwgbG9nb3V0
ID0gcmVzdWx0DQogICAgICAgICAgICByZXR1cm4gYXZhdGFyDQogICAgICAgIGRlZiBsb2dpbkZh
aWx1cmUoZXJyb3IpOg0KICAgICAgICAgICAgcmV0dXJuIEJhc2ljQXV0aEVycm9yKGh0dHAuVU5B
VVRIT1JJWkVELA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmF1dGhvcml6
ZWQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0MDEgQXV0aGVudGljYXRp
b24gcmVxdWlyZWQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmFz
aWNSZWFsbSkNCiAgICAgICAgdXNlcm5hbWUgPSByZXF1ZXN0LmdldFVzZXIoKQ0KICAgICAgICBw
YXNzd29yZCA9IHJlcXVlc3QuZ2V0UGFzc3dvcmQoKQ0KICAgICAgICBkID0gc2VsZi5wb3J0YWwu
bG9naW4oY3JlZGVudGlhbHMuVXNlcm5hbWVQYXNzd29yZCh1c2VybmFtZSwgcGFzc3dvcmQpLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc291cmNlLklSZXNvdXJjZSkNCiAgICAgICAgZC5hZGRDYWxsYmFja3MobG9n
aW5TdWNjZXNzLCBsb2dpbkZhaWx1cmUpDQogICAgICAgIHJldHVybiB1dGlsLkRlZmVycmVkUmVz
b3VyY2UoZCkNCiAgICAgICAgDQpjbGFzcyBCYXNpY0F1dGhFcnJvcihlcnJvci5FcnJvclBhZ2Up
Og0KDQogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXR1cywgYnJpZWYsIGRldGFpbCwgYmFzaWNS
ZWFsbT0iZGVmYXVsdCIpOg0KICAgICAgICBlcnJvci5FcnJvclBhZ2UuX19pbml0X18oc2VsZiwg
c3RhdHVzLCBicmllZiwgZGV0YWlsKQ0KICAgICAgICBzZWxmLmJhc2ljUmVhbG0gPSBiYXNpY1Jl
YWxtDQoNCiAgICBkZWYgcmVuZGVyKHNlbGYsIHJlcXVlc3QpOg0KICAgICAgICByZXF1ZXN0LnNl
dEhlYWRlcignV1dXLWF1dGhlbnRpY2F0ZScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICdC
YXNpYyByZWFsbT0iJXMiJyAlIHNlbGYuYmFzaWNSZWFsbSkNCiAgICAgICAgcmV0dXJuIGVycm9y
LkVycm9yUGFnZS5yZW5kZXIoc2VsZiwgcmVxdWVzdCkNCg0KDQpkZWYgZ3VhcmRSZXNvdXJjZVdp
dGhCYXNpY0F1dGgocmVzb3VyY2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hl
Y2tlcnMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNSZWFsbT0iZGVmYXVs
dCIpOg0KICAgIG15UG9ydGFsID0gcG9ydGFsLlBvcnRhbChzaW1wbGVndWFyZC5NYXJraW5nUmVh
bG0ocmVzb3VyY2UpKQ0KICAgIGZvciBjaGVja2VyIGluIGNoZWNrZXJzOg0KICAgICAgICBteVBv
cnRhbC5yZWdpc3RlckNoZWNrZXIoY2hlY2tlcikNCiAgICByZXR1cm4gQmFzaWNBdXRoV3JhcHBl
cihteVBvcnRhbCwgYmFzaWNSZWFsbSkNCg0KDQpmcm9tIHR3aXN0ZWQuYXBwbGljYXRpb24gaW1w
b3J0IGludGVybmV0LCBzZXJ2aWNlDQpmcm9tIHR3aXN0ZWQuY3JlZCBpbXBvcnQgY2hlY2tlcnMN
CmZyb20gdHdpc3RlZC53ZWIgaW1wb3J0IHNlcnZlciwgc3RhdGljDQoNCmFwcGxpY2F0aW9uID0g
c2VydmljZS5BcHBsaWNhdGlvbignQmFzaWNBdXRoVGVzdCcpDQpzaXRlID0gc2VydmVyLlNpdGUo
DQogICAgZ3VhcmRSZXNvdXJjZVdpdGhCYXNpY0F1dGgoDQogICAgICBzdGF0aWMuRmlsZSgnYmFz
aWNhdXRoLnB5JyksDQogICAgICBbY2hlY2tlcnMuSW5NZW1vcnlVc2VybmFtZVBhc3N3b3JkRGF0
YWJhc2VEb250VXNlKGJvYj0iMTIzIildLA0KICAgICAgYmFzaWNSZWFsbT0iVGhlIEd1YXJkZWQg
UmVhbG0iDQogICAgKSkNCndlYnNlcnZlciA9IGludGVybmV0LlRDUFNlcnZlcig4MDgwLCBzaXRl
KQ0Kd2Vic2VydmVyLnNldFNlcnZpY2VQYXJlbnQoc2VydmljZS5JU2VydmljZUNvbGxlY3Rpb24o
YXBwbGljYXRpb24pKQ0K

------_=_NextPart_001_01C40078.2E47D0E8--