Fix FSF address (Tobias Mueller, #470445)
[platform/upstream/evolution-data-server.git] / servers / groupwise / e-gw-proxy.c
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /* 
3  * Authors : 
4  *  Sankar P <psankar@novell.com>
5  *  Shreyas Srinivasan <sshreyas@novell.com>
6  *
7  * Copyright 2003, Novell, Inc.
8  *
9  * This program is free software; you can redistribute it and/or 
10  * modify it under the terms of version 2 of the GNU Lesser General Public 
11  * License as published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
21  * USA
22  */
23
24 #ifdef HAVE_CONFIG_H
25 #include <config.h>
26 #endif
27 #include <string.h>
28 #include "e-gw-proxy.h"
29 #include "e-gw-message.h"
30
31 void 
32 e_gw_proxy_construct_proxy_access_list (SoupSoapParameter *param, GList **proxy_list)
33 {
34         /* parse the response and create the individual proxy accounts */
35         SoupSoapParameter *subparam;
36         SoupSoapParameter *type_param;
37         SoupSoapParameter *individual_rights;
38         char *value;
39
40         *proxy_list = NULL;
41         for (subparam = soup_soap_parameter_get_first_child_by_name (param, "entry");
42                         subparam != NULL;
43                         subparam = soup_soap_parameter_get_next_child_by_name (subparam, "entry")) {
44
45                 proxyHandler *aclInstance;
46                 aclInstance = (proxyHandler *) g_malloc0 (sizeof(proxyHandler));
47                 aclInstance->permissions = 0;
48                 aclInstance->flags = 0;
49                 type_param = soup_soap_parameter_get_first_child_by_name (subparam, "email");
50                 value = NULL;
51                 if (type_param) {
52                         value = soup_soap_parameter_get_string_value (type_param);
53                         aclInstance->proxy_email = g_strdup_printf("%s", value);
54                 }
55
56                 type_param = soup_soap_parameter_get_first_child_by_name (subparam, "displayName");
57                 value = NULL;
58                 if (type_param) {
59                         value = soup_soap_parameter_get_string_value (type_param);
60                         aclInstance->proxy_name = g_strdup_printf ("%s", value);
61                 }
62                 type_param = soup_soap_parameter_get_first_child_by_name (subparam, "id");
63                 value = NULL;
64                 if (type_param) {
65                         value = soup_soap_parameter_get_string_value (type_param);
66                         aclInstance->uniqueid = g_strdup_printf ("%s", value);
67                 } else 
68                         aclInstance->uniqueid = NULL;
69
70                 type_param = soup_soap_parameter_get_first_child_by_name (subparam, "mail");
71                 value = NULL;
72                 if (type_param) {
73                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"read");                              
74                         if (individual_rights) {
75                                 value = soup_soap_parameter_get_string_value (individual_rights);
76                                 aclInstance->permissions |= E_GW_PROXY_MAIL_READ;
77                         }
78                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"write");                             
79                         if (individual_rights) {
80                                 value = soup_soap_parameter_get_string_value (individual_rights);
81                                 aclInstance->permissions |= E_GW_PROXY_MAIL_WRITE;
82                         }
83                 }
84
85                 if (value)
86                         g_free (value);
87
88                 value = NULL;
89                 type_param = soup_soap_parameter_get_first_child_by_name (subparam, "appointment");
90                 if (type_param) {
91                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"read");                              
92                         if (individual_rights) {
93                                 value = soup_soap_parameter_get_string_value (individual_rights);
94                                 aclInstance->permissions |= E_GW_PROXY_APPOINTMENT_READ;
95                         }
96                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"write");                             
97                         if (individual_rights) {
98                                 value = soup_soap_parameter_get_string_value (individual_rights);
99                                 aclInstance->permissions |= E_GW_PROXY_APPOINTMENT_WRITE;
100                         }
101                 }
102                 if (value)
103                         g_free (value);
104
105                 value = NULL;
106                 type_param = soup_soap_parameter_get_first_child_by_name (subparam, "task");
107                 if (type_param) {
108                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"read");                              
109                         if (individual_rights) {
110                                 value = soup_soap_parameter_get_string_value (individual_rights);
111                                 aclInstance->permissions |= E_GW_PROXY_TASK_READ;
112                         }
113                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"write");                             
114                         if (individual_rights) {
115                                 value = soup_soap_parameter_get_string_value (individual_rights);
116                                 aclInstance->permissions |= E_GW_PROXY_TASK_WRITE;
117                         }
118                 }
119                 if (value)
120                         g_free (value);
121
122                 value = NULL;
123                 type_param = soup_soap_parameter_get_first_child_by_name (subparam, "note");
124                 if (type_param) {
125                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"read");                              
126                         if (individual_rights) {
127                                 value = soup_soap_parameter_get_string_value (individual_rights);
128                                 aclInstance->permissions |= E_GW_PROXY_NOTES_READ;
129                         }
130                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"write");                             
131                         if (individual_rights) {
132                                 value = soup_soap_parameter_get_string_value (individual_rights);
133                                 aclInstance->permissions |= E_GW_PROXY_NOTES_WRITE;
134                         }
135                 }
136                 if (value)
137                         g_free (value);
138
139
140                 type_param = soup_soap_parameter_get_first_child_by_name (subparam, "misc");
141                 value = NULL;
142                 if (type_param) {
143                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"alarms");
144                         if (individual_rights) {
145                                 value = soup_soap_parameter_get_string_value (individual_rights);
146                                 aclInstance->permissions |= E_GW_PROXY_GET_ALARMS;
147                         }
148                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"notify");
149                         if (individual_rights) {
150                                 value = soup_soap_parameter_get_string_value (individual_rights);
151                                 aclInstance->permissions |= E_GW_PROXY_GET_NOTIFICATIONS;
152                         }
153                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"setup"); 
154                         if (individual_rights) {
155                                 value = soup_soap_parameter_get_string_value (individual_rights);
156                                 aclInstance->permissions |= E_GW_PROXY_MODIFY_FOLDERS;
157                         }
158                         individual_rights= soup_soap_parameter_get_first_child_by_name (type_param,"readHidden"); 
159                         if (individual_rights) {
160                                 value = soup_soap_parameter_get_string_value (individual_rights);
161                                 aclInstance->permissions |= E_GW_PROXY_READ_PRIVATE;
162                         }
163                 }
164                 if (value)
165                         g_free(value);
166
167                 *proxy_list = g_list_append(*proxy_list, aclInstance);
168         }
169 }
170
171 void 
172 e_gw_proxy_construct_proxy_list (SoupSoapParameter *param, GList **proxy_info)
173 {
174         SoupSoapParameter *subparam; 
175         SoupSoapParameter *type_param;
176         char *value;
177
178         for (subparam = soup_soap_parameter_get_first_child_by_name (param, "proxy");
179                         subparam != NULL;
180                         subparam = soup_soap_parameter_get_next_child_by_name (subparam, "proxy")) 
181         {
182
183                 type_param = soup_soap_parameter_get_first_child_by_name (subparam, "displayName");
184                 value = NULL;
185                 if (type_param) {
186                         value = soup_soap_parameter_get_string_value (type_param);
187                         *proxy_info = g_list_append(*proxy_info, value);
188                 }
189                 type_param = soup_soap_parameter_get_first_child_by_name (subparam, "email");
190                 value = NULL;
191                 if (type_param) {
192                         value = soup_soap_parameter_get_string_value (type_param);
193                         *proxy_info = g_list_append(*proxy_info, value);
194                 }
195         }
196 }
197
198 static void
199 e_gw_proxy_form_soap_request_from_proxyHandler (SoupSoapMessage *msg, proxyHandler *new_proxy)
200 {
201         gboolean added = FALSE;
202         e_gw_message_write_string_parameter (msg, "email", NULL, new_proxy->proxy_email);
203         e_gw_message_write_string_parameter (msg, "displayName", NULL, new_proxy->proxy_name);  
204
205         if (new_proxy->permissions & E_GW_PROXY_MAIL_READ){
206                 added = TRUE;
207                 soup_soap_message_start_element (msg, "mail", NULL, NULL);
208                 e_gw_message_write_int_parameter (msg, "read", NULL, 1);
209         }
210         if (new_proxy->permissions & E_GW_PROXY_MAIL_WRITE){
211                 if (added == FALSE){
212                         added=TRUE;
213                         soup_soap_message_start_element (msg, "mail", NULL, NULL);
214                 }
215                 e_gw_message_write_int_parameter (msg, "write", NULL, 1);
216         }
217         if (added == TRUE)
218                 soup_soap_message_end_element(msg);
219
220         added = FALSE;
221         if (new_proxy->permissions & E_GW_PROXY_APPOINTMENT_READ){
222                 added=TRUE;
223                 soup_soap_message_start_element (msg, "appointment", NULL, NULL);
224                 e_gw_message_write_int_parameter (msg, "read", NULL, 1);
225         }
226         if (new_proxy->permissions & E_GW_PROXY_APPOINTMENT_WRITE){
227                 if(added == FALSE)
228                 {
229                         added=TRUE;
230                         soup_soap_message_start_element (msg, "appointment", NULL, NULL);
231                 }
232                 e_gw_message_write_int_parameter (msg, "write", NULL, 1);
233         }
234         if (added == TRUE)
235                 soup_soap_message_end_element  (msg);
236
237         added = FALSE;
238         if (new_proxy->permissions & E_GW_PROXY_TASK_READ){
239                 added=TRUE;
240                 soup_soap_message_start_element (msg, "task", NULL, NULL);
241                 e_gw_message_write_int_parameter (msg, "read", NULL, 1);
242         }
243         if (new_proxy->permissions & E_GW_PROXY_TASK_WRITE){
244                 if (added == FALSE)
245                 {
246                         added=TRUE;
247                         soup_soap_message_start_element (msg, "task", NULL, NULL);
248                 }
249                 e_gw_message_write_int_parameter (msg, "write", NULL, 1);
250         }
251         if (added == TRUE)
252                 soup_soap_message_end_element(msg);
253
254         added = FALSE;
255         if (new_proxy->permissions & E_GW_PROXY_NOTES_READ){
256                 added=TRUE;
257                 soup_soap_message_start_element (msg, "note", NULL, NULL);
258                 e_gw_message_write_int_parameter (msg, "read", NULL, 1);
259         }
260         if (new_proxy->permissions & E_GW_PROXY_NOTES_WRITE){
261                 if(added==FALSE)
262                 {
263                         added=TRUE;
264                         soup_soap_message_start_element (msg, "note", NULL, NULL);
265                 }
266                 e_gw_message_write_int_parameter (msg, "write", NULL, 1);
267         }
268         if (added == TRUE)
269                 soup_soap_message_end_element(msg);
270
271         added = FALSE;
272         if (new_proxy->permissions & E_GW_PROXY_GET_ALARMS){
273                 added=TRUE;
274                 soup_soap_message_start_element(msg,"misc",NULL,NULL);
275                 e_gw_message_write_int_parameter (msg, "alarms", NULL, 1);
276         }
277         if (new_proxy->permissions & E_GW_PROXY_GET_NOTIFICATIONS){
278                 if (added!=TRUE)
279                 {
280                         added=TRUE;
281                         soup_soap_message_start_element(msg,"misc",NULL,NULL);
282                 }
283                 e_gw_message_write_int_parameter (msg, "notify", NULL, 1);
284         }
285
286         if (new_proxy->permissions & E_GW_PROXY_MODIFY_FOLDERS){
287                 if (added!=TRUE)
288                 {
289                         added=TRUE;
290                         soup_soap_message_start_element(msg,"misc",NULL,NULL);
291                 }
292                 e_gw_message_write_int_parameter (msg, "setup", NULL, 1);
293         }
294         if (new_proxy->permissions & E_GW_PROXY_READ_PRIVATE){
295                 if (added!=TRUE)
296                 {
297                         added=TRUE;
298                         soup_soap_message_start_element(msg,"misc",NULL,NULL);
299                 }
300                 e_gw_message_write_int_parameter (msg, "readHidden", NULL, 1);
301         }
302         if (added==TRUE)
303                 soup_soap_message_end_element(msg);     
304
305 }
306
307 void 
308 e_gw_proxy_form_proxy_add_msg (SoupSoapMessage *msg, proxyHandler *new_proxy)
309 {
310         soup_soap_message_start_element (msg, "entry", NULL, NULL);
311         
312         e_gw_proxy_form_soap_request_from_proxyHandler (msg, new_proxy);
313 }
314         
315 void 
316 e_gw_proxy_form_proxy_remove_msg (SoupSoapMessage *msg, proxyHandler *removeProxy)
317 {
318         e_gw_message_write_string_parameter (msg, "id", NULL, removeProxy->uniqueid);
319 }
320
321 void 
322 e_gw_proxy_form_modify_proxy_msg (SoupSoapMessage *msg, proxyHandler *new_proxy)
323 {
324         soup_soap_message_start_element (msg, "updates", NULL, NULL);
325         
326         soup_soap_message_start_element (msg, "delete", NULL, NULL);
327         soup_soap_message_end_element (msg);
328         
329         soup_soap_message_start_element (msg, "add", NULL, NULL);
330         e_gw_proxy_form_soap_request_from_proxyHandler (msg, new_proxy);
331         soup_soap_message_end_element (msg);
332         
333         soup_soap_message_end_element (msg);
334 }
335
336 void
337 e_gw_proxy_parse_proxy_login_response (SoupSoapParameter *param, int *permissions)
338 {
339         SoupSoapParameter *subparam;
340         char *value;
341         SoupSoapParameter *individual_rights;
342
343         *permissions = 0;
344         subparam = soup_soap_parameter_get_first_child_by_name (param, "mail");
345         value = NULL;
346         if (subparam) {
347                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"read");                                
348                 if (individual_rights) {
349                         value = soup_soap_parameter_get_string_value (individual_rights);
350                         *permissions |= E_GW_PROXY_MAIL_READ;
351                 }
352                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"write");                               
353                 if (individual_rights) {
354                         value = soup_soap_parameter_get_string_value (individual_rights);
355                         *permissions |= E_GW_PROXY_MAIL_WRITE;
356                 }
357         }
358
359         if (value)
360                 g_free (value);
361
362         value = NULL;
363         subparam = soup_soap_parameter_get_first_child_by_name (param, "appointment");
364         if (subparam) {
365                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"read");                                
366                 if (individual_rights) {
367                         value = soup_soap_parameter_get_string_value (individual_rights);
368                         *permissions |= E_GW_PROXY_APPOINTMENT_READ;
369                 }
370                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"write");                               
371                 if (individual_rights) {
372                         value = soup_soap_parameter_get_string_value (individual_rights);
373                         *permissions |= E_GW_PROXY_APPOINTMENT_WRITE;
374                 }
375         }
376         if (value)
377                 g_free (value);
378
379         value = NULL;
380         subparam = soup_soap_parameter_get_first_child_by_name (param, "task");
381         if (subparam)   {
382                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"read");                                
383                 if (individual_rights) {
384                         value = soup_soap_parameter_get_string_value (individual_rights);
385                         *permissions |= E_GW_PROXY_TASK_READ;
386                 }
387                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"write");                               
388                 if (individual_rights) {
389                         value = soup_soap_parameter_get_string_value (individual_rights);
390                         *permissions |= E_GW_PROXY_TASK_WRITE;
391                 }
392         }
393         if (value)
394                 g_free (value);
395
396         value = NULL;
397         subparam = soup_soap_parameter_get_first_child_by_name (param, "note");
398         if (subparam)   {
399                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"read");                                
400                 if (individual_rights) {
401                         value = soup_soap_parameter_get_string_value (individual_rights);
402                         *permissions |= E_GW_PROXY_NOTES_READ;
403                 }
404                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"write");                               
405                 if (individual_rights) {
406                         value = soup_soap_parameter_get_string_value (individual_rights);
407                         *permissions |= E_GW_PROXY_NOTES_WRITE;
408                 }
409         }
410         if (value)
411                 g_free (value);
412
413
414         subparam = soup_soap_parameter_get_first_child_by_name (param, "misc");
415         value = NULL;
416         if (subparam)   {
417                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"alarms");
418                 if (individual_rights) {
419                         value = soup_soap_parameter_get_string_value (individual_rights);
420                         *permissions |= E_GW_PROXY_GET_ALARMS;
421                 }
422                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"notify");
423                 if (individual_rights) {
424                         value = soup_soap_parameter_get_string_value (individual_rights);
425                         *permissions |= E_GW_PROXY_GET_NOTIFICATIONS;
426                 }
427                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"setup"); 
428                 if (individual_rights) {
429                         value = soup_soap_parameter_get_string_value (individual_rights);
430                         *permissions |= E_GW_PROXY_MODIFY_FOLDERS;
431                 }
432                 individual_rights= soup_soap_parameter_get_first_child_by_name (subparam,"readHidden"); 
433                 if (individual_rights) {
434                         value = soup_soap_parameter_get_string_value (individual_rights);
435                         *permissions |= E_GW_PROXY_READ_PRIVATE;
436                 }
437         }
438         if (value)
439                 g_free(value);
440 }