-
Notifications
You must be signed in to change notification settings - Fork 0
/
CardDAV.py
107 lines (75 loc) · 2.87 KB
/
CardDAV.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# -*- coding: utf-8 -*-
import logging
from wsgidav.wsgidav_app import WsgiDAVApp, DEFAULT_CONFIG
import wsgidav.util
from carddav.Provider import CardDAVProvider, WellKnownProvider
from carddav.DomainController import PsinqueDomainController
from DataModels import Contact, Group, CardDAVLogin
from DataManipulation import reallyGenerateVCard
#-----------------------------------------------------------------------------
def groupList(userProfile):
"""Returns the list of all groups created by the logged in user.
:returns: list -- the list of groups
"""
groupNames = []
for group in Group.all().ancestor(userProfile):
if group.sync:
groupNames.append(group.name)
return groupNames
def friendList(userProfile, groupName):
friendList = []
group = Group.all(). \
ancestor(userProfile). \
filter("name =", groupName). \
get()
contacts = Contact.all(). \
ancestor(userProfile). \
filter("group =", group)
for contact in contacts:
friendList.append(str(contact.key()) + ".vcf")
return friendList
def getVCard(contactID):
# This is 3 Datastore fetches: Contact, Psinque, Persona
logging.info("Getting vCard for Contact " + contactID)
contact = Contact.get(contactID)
persona = contact.incoming.persona
if persona.vcardNeedsUpdating:
reallyGenerateVCard(persona)
return [persona.vcard, persona.vcardMTime, persona.vcardMD5]
def getCardDAVLogin(username):
carddavLogin = CardDAVLogin.all(). \
filter("generatedUsername =", username). \
get()
if carddavLogin is None:
return None
if not carddavLogin.parent().userSettings.cardDAVenabled:
return None
carddavLogin.put() # to update the 'lastUsed' field
return carddavLogin
def getUserProfile(username):
carddavLogin = getCardDAVLogin(username.replace(" ", ""))
return carddavLogin.parent()
#-----------------------------------------------------------------------------
logging.info("Creating CardDAV objects")
provider = CardDAVProvider()
wellknowns = WellKnownProvider()
domainController = PsinqueDomainController()
config = DEFAULT_CONFIG.copy()
config.update({
"provider_mapping": {"/carddav/": provider, # RFC 6352
"/.well-known/": wellknowns, # RFC 5785
},
"verbose": 1,
"enable_loggers": [],
"propsmanager": False,
"locksmanager": False,
"acceptbasic": True,
"acceptdigest": False,
"defaultdigest": False,
"domaincontroller": domainController,
"dir_browser": {
"enable": False,
},
"enable_loggers": ["property_manager"],
})
app = WsgiDAVApp(config)