tizen 2.3.1 release
[apps/home/settings.git] / setting-security / src / setting-security-blocked-list.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 #include <setting-common-data-type.h>
22 #include <setting-common-data-slp-setting.h>
23 #include <setting-common-draw-widget.h>
24 #include <setting-common-view.h>
25 #include <setting-security-firewall-data.h>
26 #include <setting-security-blocked-list.h>
27 #include <setting-debug.h>
28 #include <security-server.h>
29
30 static int setting_security_blocked_list_create(void *cb);
31 static int setting_security_blocked_list_destroy(void *cb);
32 static int setting_security_blocked_list_update(void *cb);
33 static int setting_security_blocked_list_cleanup(void *cb);
34
35 setting_view setting_view_security_blocked_list = {
36         .create = setting_security_blocked_list_create,
37         .destroy = setting_security_blocked_list_destroy,
38         .update = setting_security_blocked_list_update,
39         .cleanup = setting_security_blocked_list_cleanup,
40 };
41
42 #define FIREWALL_DIR "/home/app/.firewall/"
43 #define FIREWALL_LIST_IP_PATH FIREWALL_DIR"List-IP"
44 #define FIREWALL_LIST_URL_PATH FIREWALL_DIR"List-url"
45 #define FIREWALL_LIST_PORT_PATH FIREWALL_DIR"List-port"
46
47 /* ***************************************************
48  **
49  **basic func
50  **
51  ****************************************************/
52 static Evas_Object *__setting_security_create_nocontents(Evas_Object *parent, const char *text)
53 {
54         SETTING_TRACE_BEGIN;
55         Evas_Object *layout, *noc;
56
57         /*NoContent */
58         noc = elm_layout_add(parent);
59         elm_object_part_text_set(noc, "elm.text", text);
60         elm_layout_theme_set(noc, "layout", "nocontents", "full");
61
62         /*Layout */
63         layout = elm_layout_add(parent);
64         elm_layout_file_set(layout, SETTING_THEME_EDJ_NAME, "nocontents");
65         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
66         evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
67         elm_object_part_content_set(layout, "contents", noc);
68
69         return layout;
70 }
71 void __setting_security_IP_blocklist_add_genlist_items(void *data)
72 {
73         SETTING_TRACE_BEGIN;
74         if (data == NULL)
75                 return;
76         SettingSecurityUG *ad = (SettingSecurityUG *)data;
77         ad->scroller = elm_genlist_add(ad->win_main_layout);
78         setting_retm_if(ad->scroller == NULL, "Cannot set scroller object as contento of layout");
79         elm_genlist_realization_mode_set(ad->scroller, EINA_TRUE);
80         elm_object_style_set(ad->scroller , "dialogue");
81         elm_genlist_clear(ad->scroller);
82
83         char temp[SETTING_STR_SLP_LEN] = {0,};
84         char *filePath = "/home/app/.firewall/";
85         char *fileName = "List-IP";
86         setting_security_firewall_data_init_list();
87         setting_security_firewall_data_get_data(g_ipHead, g_ipTail, filePath, fileName);
88         COMMAND *start = g_ipHead;
89         COMMAND *end = g_ipTail;
90         start = start->next ; /* <== HEAD is empty. */
91
92         int chk_idx = 0;
93         int chk_cnt = 0;
94         while (start != end) {
95                 if (start->command != NULL) {
96                         SETTING_TRACE_DEBUG("block list name : [%d] %s", chk_idx, start->command);
97
98                         /*filtering for same IP list*/
99                         if (!safeStrCmp(temp, start->command)) {
100                                 SETTING_TRACE_DEBUG("same list skip : [%d] temp : %s, command : %s", chk_idx , temp , start->command);
101                         } else {
102                                 setting_create_Gendial_field_def(ad->scroller, &(itc_1text),
103                                                                  NULL, ad,
104                                                                  SWALLOW_Type_INVALID,
105                                                                  NULL, NULL, 0, start->command, NULL,
106                                                                  NULL);
107                                 chk_cnt++;
108                         }
109                 }
110                 snprintf(temp, SETTING_STR_SLP_LEN, "%s", start->command);
111
112                 chk_idx++;
113                 start = start->next; /* go */
114         }
115
116         ad->list_cnt = chk_cnt;
117         if (!ad->list_cnt) {
118                 ad->content = __setting_security_create_nocontents(ad->navi_bar, "No IP list");
119                 ad->genlist = ad->content;
120         } else {
121                 ad->genlist = ad->scroller;
122         }
123 }
124
125 void __setting_security_URL_blocklist_add_genlist_items(void *data)
126 {
127         SETTING_TRACE_BEGIN;
128         if (data == NULL)
129                 return;
130
131         SettingSecurityUG *ad = (SettingSecurityUG *)data;
132         ad->scroller = elm_genlist_add(ad->win_main_layout);
133         setting_retm_if(ad->scroller == NULL, "Cannot set scroller object as contento of layout");
134         elm_genlist_realization_mode_set(ad->scroller, EINA_TRUE);
135         elm_object_style_set(ad->scroller , "dialogue");
136         elm_genlist_clear(ad->scroller);
137
138         char temp[SETTING_STR_SLP_LEN] = {0,};
139         char *filePath = "/home/app/.firewall/";
140         char *fileName = "List-url";
141         setting_security_firewall_data_init_list();
142         setting_security_firewall_data_get_data(g_urlHead, g_urlTail, filePath, fileName);
143         COMMAND *start = g_urlHead ;
144         COMMAND *end = g_urlTail ;
145
146         start = start->next ; /* <== HEAD is empty. */
147
148         int chk_idx = 0;
149         int chk_cnt = 0;
150
151         while (start != end) {
152                 if (start->command != NULL) {
153                         SETTING_TRACE_DEBUG("block list name : [%d] %s", chk_idx, start->command);
154
155                         /*filtering for same IP list*/
156                         if (!safeStrCmp(temp, start->command)) {
157                                 SETTING_TRACE_DEBUG("same list skip : [%d] temp : %s, command : %s", chk_idx , temp , start->command);
158                         } else {
159                                 setting_create_Gendial_field_def(ad->scroller, &(itc_1text),
160                                                                  NULL, ad,
161                                                                  SWALLOW_Type_INVALID,
162                                                                  NULL, NULL, 0, start->command, NULL,
163                                                                  NULL);
164                                 chk_cnt++;
165                         }
166                 }
167                 snprintf(temp, SETTING_STR_SLP_LEN, "%s", start->command);
168
169                 chk_idx++;
170                 start = start->next; /* go */
171         }
172
173         ad->list_cnt = chk_cnt;
174         if (!ad->list_cnt) {
175                 ad->content = __setting_security_create_nocontents(ad->navi_bar, "No IP list");
176                 ad->genlist = ad->content;
177         } else {
178                 ad->genlist = ad->scroller;
179         }
180 }
181
182
183 void __setting_security_Port_blocklist_add_genlist_items(void *data)
184 {
185         SETTING_TRACE_BEGIN;
186         if (data == NULL)
187                 return;
188
189         SettingSecurityUG *ad = (SettingSecurityUG *)data;
190         ad->scroller = elm_genlist_add(ad->win_main_layout);
191         setting_retm_if(ad->scroller == NULL, "Cannot set scroller object as contento of layout");
192         elm_genlist_realization_mode_set(ad->scroller, EINA_TRUE);
193         elm_object_style_set(ad->scroller , "dialogue");
194         elm_genlist_clear(ad->scroller);
195
196         char temp[SETTING_STR_SLP_LEN] = {0,};
197         char *filePath = "/home/app/.firewall/";
198         char *fileName = "List-port";
199         setting_security_firewall_data_init_list();
200         setting_security_firewall_data_get_data(g_portHead, g_portTail, filePath, fileName);
201
202         COMMAND *start = g_portHead ;
203         COMMAND *end = g_portTail ;
204         start = start->next ; /* <== HEAD is empty. */
205
206         int chk_idx = 0;
207         int chk_cnt = 0;
208         while (start != end) {
209                 if (start->command != NULL) {
210                         SETTING_TRACE_DEBUG("block list name : [%d] %s", chk_idx, start->command);
211
212                         /*filtering for same IP list*/
213                         if (!safeStrCmp(temp, start->command)) {
214                                 SETTING_TRACE_DEBUG("same list skip : [%d] temp : %s, command : %s", chk_idx , temp , start->command);
215                         } else {
216                                 setting_create_Gendial_field_def(ad->scroller, &(itc_1text),
217                                                                  NULL, ad,
218                                                                  SWALLOW_Type_INVALID,
219                                                                  NULL, NULL, 0, start->command, NULL,
220                                                                  NULL);
221                                 chk_cnt++;
222                         }
223                 }
224                 snprintf(temp, SETTING_STR_SLP_LEN, "%s", start->command);
225
226                 chk_idx++;
227                 start = start->next; /* go */
228         }
229
230         ad->list_cnt = chk_cnt;
231         if (ad->list_cnt == 0) {
232                 ad->content = __setting_security_create_nocontents(ad->navi_bar, "No IP list");
233                 ad->genlist = ad->content;
234         } else {
235                 ad->genlist = ad->scroller;
236         }
237 }
238
239 static int setting_security_blocked_list_create(void *cb)
240 {
241         SETTING_TRACE_BEGIN;
242         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
243
244         SettingSecurityUG *ad = (SettingSecurityUG *) cb;
245         Elm_Object_Item *item = NULL;
246         Evas_Object *scroller = NULL;
247
248         Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
249         elm_layout_file_set(view_layout, SETTING_THEME_EDJ_NAME, "selinfo_bottom");
250         evas_object_size_hint_weight_set(view_layout, EVAS_HINT_EXPAND, 0.0);
251
252         /* add basic layout */
253         if (ad->firewall_block_type == SETTING_SEC_FIREWALL_BLOCK_IP) {
254                 /*IP normal list*/
255                 ad->navi_it = setting_push_layout_navi_bar(_(Keystr_BlockedIPList),
256                                                            _("IDS_COM_BODY_BACK"),
257                                                            _("IDS_COM_SK_DELETE"),
258                                                            _("IDS_COM_SK_ADD"),
259                                                            setting_security_blocked_list_click_softkey_back_cb,
260                                                            setting_security_blocked_list_click_softkey_delete_cb,
261                                                            setting_security_blocked_list_click_softkey_add_cb,
262                                                            ad, view_layout , ad->navi_bar, NULL);
263                 ad->view_layout = view_layout;
264                 __setting_security_IP_blocklist_add_genlist_items(ad);
265         } else if (ad->firewall_block_type == SETTING_SEC_FIREWALL_BLOCK_URL) {
266                 /*Url normal list*/
267                 ad->navi_it = setting_push_layout_navi_bar(_(Keystr_BlockedURLList),
268                                                            _("IDS_COM_BODY_BACK"),
269                                                            _("IDS_COM_SK_DELETE"),
270                                                            _("IDS_COM_SK_ADD"),
271                                                            setting_security_blocked_list_click_softkey_back_cb,
272                                                            setting_security_blocked_list_click_softkey_delete_cb,
273                                                            setting_security_blocked_list_click_softkey_add_cb,
274                                                            ad, view_layout , ad->navi_bar, NULL);
275                 ad->view_layout = view_layout;
276                 __setting_security_URL_blocklist_add_genlist_items(ad);
277         } else if (ad->firewall_block_type == SETTING_SEC_FIREWALL_BLOCK_PORT) {
278                 /*Port normal list*/
279                 ad->navi_it = setting_push_layout_navi_bar(_(Keystr_BlockedPortList),
280                                                            _("IDS_COM_BODY_BACK"),
281                                                            _("IDS_COM_SK_DELETE"),
282                                                            _("IDS_COM_SK_ADD"),
283                                                            setting_security_blocked_list_click_softkey_back_cb,
284                                                            setting_security_blocked_list_click_softkey_delete_cb,
285                                                            setting_security_blocked_list_click_softkey_add_cb,
286                                                            ad, view_layout , ad->navi_bar, NULL);
287                 ad->view_layout = view_layout;
288                 __setting_security_Port_blocklist_add_genlist_items(ad);
289         }
290         scroller = ad->genlist;
291         elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
292         evas_object_smart_callback_add(ad->scroller, "realized", __gl_realized_cb, NULL);
293         /* separator */
294         item = elm_genlist_item_append(ad->scroller , &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
295         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
296
297         if (ad->list_cnt == 0) {
298                 /* disable "Delete" button */
299                 if (ad->navi_it) {
300                         Evas_Object *toolbar = elm_object_item_part_content_get(ad->navi_it, "toolbar");
301                         elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
302                 }
303         }
304
305         /* update info */
306         setting_view_security_blocked_list.is_create = 1;
307         return SETTING_RETURN_SUCCESS;
308 }
309
310 static int setting_security_blocked_list_destroy(void *cb)
311 {
312         SETTING_TRACE_BEGIN;
313         /* error check */
314         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
315         SettingSecurityUG *ad = (SettingSecurityUG *) cb;
316         elm_naviframe_item_pop(ad->navi_bar);
317         setting_security_firewall_data_end_list();
318         setting_view_security_blocked_list.is_create = 0;
319         return SETTING_RETURN_SUCCESS;
320 }
321
322 static int setting_security_blocked_list_update(void *cb)
323 {
324         SETTING_TRACE_BEGIN;
325         /* error check */
326         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
327         SettingSecurityUG *ad = (SettingSecurityUG *) cb;
328         /*elm_naviframe_item_pop(ad->navi_bar); */
329
330         Evas_Object *view_layout = ad->view_layout;
331
332         Evas_Object *scroller = NULL;
333         scroller = elm_object_part_content_get(view_layout, "elm.swallow.contents");
334         retm_if(NULL == scroller, "scroller is NULL");
335
336         /* checking layout or genlist type to clear */
337         char *objtype = NULL;
338         objtype = evas_object_type_get(view_layout);
339         if (!safeStrCmp(objtype, "elm_genlist")) {
340                 elm_genlist_clear(scroller);
341                 elm_object_part_content_unset(view_layout, "elm.swallow.contents");
342                 evas_object_del(scroller);
343                 scroller = NULL;
344         }
345
346         /* */
347         setting_security_firewall_data_end_list();
348         if (ad->firewall_block_type == SETTING_SEC_FIREWALL_BLOCK_IP) {
349                 /*IP normal list*/
350                 __setting_security_IP_blocklist_add_genlist_items(ad);
351         } else if (ad->firewall_block_type == SETTING_SEC_FIREWALL_BLOCK_URL) {
352                 /*Url normal list*/
353                 __setting_security_URL_blocklist_add_genlist_items(ad);
354         } else if (ad->firewall_block_type == SETTING_SEC_FIREWALL_BLOCK_PORT) {
355                 /*Port normal list*/
356                 __setting_security_Port_blocklist_add_genlist_items(ad);
357         }
358         /* */
359         scroller = ad->genlist;
360         elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
361
362         Elm_Object_Item *navi_it = NULL;
363         navi_it = elm_naviframe_top_item_get(ad->navi_bar);
364         ad->navi_it = navi_it;
365         if (ad->list_cnt <= 0) {
366                 SETTING_TRACE_DEBUG("ad->list_cnt : %d", ad->list_cnt);
367                 /* disable "Delete" button */
368                 if (ad->navi_it) {
369                         SETTING_TRACE_DEBUG("ad->navi_it NOTNULL");
370                         Evas_Object *toolbar = elm_object_item_part_content_get(ad->navi_it, "toolbar");
371                         elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
372                 }
373         } else {
374                 SETTING_TRACE_DEBUG("ad->list_cnt : %d", ad->list_cnt);
375                 /* enable "Delete" button */
376                 if (ad->navi_it) {
377                         SETTING_TRACE_DEBUG("ad->navi_it NOTNULL");
378                         Evas_Object *toolbar = elm_object_item_part_content_get(ad->navi_it, "toolbar");
379                         elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_FALSE);
380                 }
381         }
382
383         return SETTING_RETURN_SUCCESS;
384 }
385
386 static int setting_security_blocked_list_cleanup(void *cb)
387 {
388         SETTING_TRACE_BEGIN;
389         /* error check */
390         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
391
392         SettingSecurityUG *ad = (SettingSecurityUG *) cb;
393         return setting_security_blocked_list_destroy(ad);
394 }
395
396 /* ***************************************************
397  **
398  **call back func
399  **
400  ****************************************************/
401 static Eina_Bool
402 setting_security_blocked_list_click_softkey_back_cb(void *data, Evas_Object *obj,
403                                                     void *event_info)
404 {
405         /* error check */
406         retm_if(data == NULL, "[Setting > Security] Data parameter is NULL");
407         SettingSecurityUG *ad = (SettingSecurityUG *) data;
408         setting_view_change(&setting_view_security_blocked_list, &setting_view_security_firewall, ad);
409         return EINA_TRUE;
410 }
411
412 static void
413 setting_security_blocked_list_click_softkey_add_cb(void *data, Evas_Object *obj,
414                                                    void *event_info)
415 {
416         SETTING_TRACE_BEGIN;
417         /* error check */
418         setting_retm_if(data == NULL, "Data parameter is NULL");
419         SettingSecurityUG *ad = (SettingSecurityUG *) data;
420         setting_view_change(&setting_view_security_blocked_list, &setting_view_security_firewall_keypad, ad);
421 }
422
423 static void
424 setting_security_blocked_list_click_softkey_delete_cb(void *data, Evas_Object *obj,
425                                                       void *event_info)
426 {
427         SETTING_TRACE_BEGIN;
428         /* error check */
429         retm_if(data == NULL, "[Setting > Security] Data parameter is NULL");
430
431         SettingSecurityUG *ad = (SettingSecurityUG *) data;
432
433         /* to do */
434         /* change to select list */
435         setting_view_change(&setting_view_security_blocked_list, &setting_view_security_delete_block_list, ad);
436         SETTING_TRACE_END;
437 }
438