Add webauthn-image-viewer 27/312027/4 accepted/tizen/7.0/unified/20240605.045128 accepted/tizen/8.0/unified/20240604.163225 accepted/tizen/8.0/unified/20240604.163336 accepted/tizen/unified/20240604.160835 accepted/tizen/unified/dev/20240620.000208 accepted/tizen/unified/x/20240605.012728
authorDongsun Lee <ds73.lee@samsung.com>
Mon, 3 Jun 2024 03:54:06 +0000 (12:54 +0900)
committerDongsun Lee <ds73.lee@samsung.com>
Mon, 3 Jun 2024 06:08:11 +0000 (15:08 +0900)
The image-viewer application is not supported in VD products

Change-Id: I0027b45ca15c431813cbc1689ddcd186818acc22

CMakeLists.txt
packaging/webauthn-image-viewer.manifest.in [new file with mode: 0644]
packaging/webauthn.spec
tests/CMakeLists.txt
tests/manual/man_tests.cpp
tests/manual/webauthn_image_viewer.cpp [new file with mode: 0644]

index 4d6ca7c5b11a9769475db1c4d201fdcd2800ab53..1554d7a7135b85ae2d996796a8d110d5c7dc1d03 100644 (file)
@@ -87,6 +87,7 @@ SET(TARGET_WEBAUTHN_CLIENT "${SERVICE_NAME}-client")
 SET(TARGET_WEBAUTHN_COMMON "${SERVICE_NAME}-common")
 SET(TARGET_WEBAUTHN_UNIT_TESTS "${SERVICE_NAME}-unittests")
 SET(TARGET_WEBAUTHN_MANUAL_TESTS "${SERVICE_NAME}-manual-tests")
+SET(TARGET_WEBAUTHN_IMAGE_VIEWER "${SERVICE_NAME}-image-viewer")
 
 ############################ Configure manifest files ######################
 CONFIGURE_FILE(packaging/${TARGET_WEBAUTHN_SERVER}.manifest.in ${TARGET_WEBAUTHN_SERVER}.manifest @ONLY)
@@ -94,6 +95,7 @@ CONFIGURE_FILE(packaging/${TARGET_WEBAUTHN_CLIENT}.manifest.in ${TARGET_WEBAUTHN
 CONFIGURE_FILE(packaging/${TARGET_WEBAUTHN_COMMON}.manifest.in ${TARGET_WEBAUTHN_COMMON}.manifest @ONLY)
 CONFIGURE_FILE(packaging/${TARGET_WEBAUTHN_UNIT_TESTS}.manifest.in ${TARGET_WEBAUTHN_UNIT_TESTS}.manifest @ONLY)
 CONFIGURE_FILE(packaging/${TARGET_WEBAUTHN_MANUAL_TESTS}.manifest.in ${TARGET_WEBAUTHN_MANUAL_TESTS}.manifest @ONLY)
+CONFIGURE_FILE(packaging/${TARGET_WEBAUTHN_IMAGE_VIEWER}.manifest.in ${TARGET_WEBAUTHN_IMAGE_VIEWER}.manifest @ONLY)
 
 ############################ Add Sub Directories  ################################
 ADD_SUBDIRECTORY(include)
diff --git a/packaging/webauthn-image-viewer.manifest.in b/packaging/webauthn-image-viewer.manifest.in
new file mode 100644 (file)
index 0000000..86dbb26
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+    <request>
+        <domain name="_" />
+    </request>
+</manifest>
index 0bc2675d418da144e9baca37caa64e4ee5134b2e..7759763f04ba495a8fd2fffcae4cb7591591c09a 100644 (file)
@@ -82,6 +82,8 @@ License:    Apache-2.0
 Group:      Security/Development
 BuildRequires: pkgconfig(capi-network-bluetooth)
 BuildRequires: pkgconfig(capi-media-vision)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(appcore-efl)
 Requires:      %{name} = %{version}-%{release}
 
 %description manual-tests
@@ -260,3 +262,4 @@ fi
 %manifest %{name}-manual-tests.manifest
 %license LICENSE
 %{bin_dir}/%{name}-manual-tests
+%{bin_dir}/%{name}-image-viewer
index 5aad5af4d2cacc5dcf8c38337d3b8b2dcadf04fc..aac330f58446f8b0e6aed0a0118d44972b5b3b67 100644 (file)
@@ -106,3 +106,37 @@ TARGET_LINK_LIBRARIES(${TARGET_WEBAUTHN_MANUAL_TESTS}
 )
 
 INSTALL(TARGETS ${TARGET_WEBAUTHN_MANUAL_TESTS} DESTINATION ${BIN_DIR})
+
+
+# image-viewer for manual test
+PKG_CHECK_MODULES(IMAGE_VIEWER_DEPS
+    REQUIRED
+    dlog
+    appcore-efl
+    elementary
+    )
+
+INCLUDE_DIRECTORIES(SYSTEM
+    ${IMAGE_VIEWER_DEPS_INCLUDE_DIRS}
+    )
+
+LINK_DIRECTORIES(${IMAGE_VIEWER_DEPS_LIBRARY_DIRS})
+
+SET(IMAGE_VIEWER_SOURCES
+    ${CMAKE_CURRENT_SOURCE_DIR}/manual/webauthn_image_viewer.cpp
+)
+
+SET_SOURCE_FILES_PROPERTIES(
+    ${IMAGE_VIEWER_SOURCES}
+    PROPERTIES
+        COMPILE_FLAGS "-D_GNU_SOURCE -fvisibility=hidden")
+
+ADD_EXECUTABLE(${TARGET_WEBAUTHN_IMAGE_VIEWER} ${IMAGE_VIEWER_SOURCES})
+
+TARGET_LINK_LIBRARIES(${TARGET_WEBAUTHN_IMAGE_VIEWER}
+    ${CMAKE_THREAD_LIBS_INIT}
+    ${PROJECT_DEPS_LIBRARIES}
+    ${IMAGE_VIEWER_DEPS_LIBRARIES}
+)
+
+INSTALL(TARGETS ${TARGET_WEBAUTHN_IMAGE_VIEWER} DESTINATION ${BIN_DIR})
index 59d36fc21906ed3710ef88fce41a02a360e752db..fdbcfc9e4060fd0d853034b5b247dac732d2dc09 100644 (file)
@@ -123,17 +123,25 @@ void DisplayQR(struct TestContents &contents)
         return;
     }
 
-    command = "launch_app org.tizen.image-viewer Path ";
+    command = "/usr/bin/webauthn-image-viewer ";
     command += contents.path.c_str();
+    command += " &"; // run background
 
     ret = system(command.c_str());
     if (ret) {
-        std::cout << "launch_app command failed\n"
+        std::cout << "launching webauthn-image-viewer command failed\n"
                   << "System() returned: " << ret << std::endl;
         contents.succeeded = false;
     }
 }
 
+void CloseQR()
+{
+    // Ignore output
+    int ret __attribute__((__unused__));
+    ret = system("/usr/bin/killall /usr/bin/webauthn-image-viewer &> /dev/null");
+}
+
 void GenerateAndDisplayQR(const std::string &encoded, struct TestContents &contents)
 {
     int ret;
@@ -367,6 +375,8 @@ bool Test(struct TestContents &testContents)
         return false;
     }
 
+    CloseQR();
+
     std::cout << "START: Get Assertion" << std::endl;
     auto lock = std::unique_lock{testContents.mutex};
 
@@ -446,6 +456,8 @@ bool Test(struct TestContents &testContents)
         testContents.succeeded = false;
     }
 
+    CloseQR();
+
     timeCount = 120;
     std::cout << "Waiting UpdateLinkedData CBs for 120 seconds.." << std::endl;
     while (((testContents.statusMC == 1 && testContents.updateMCRet != WAUTHN_ERROR_NONE)
@@ -509,15 +521,5 @@ int main(int argc, char *argv[])
         ret = true;
     }
 
-    if (system("/usr/bin/killall /usr/apps/org.tizen.image-viewer_common/bin/image-viewer")) {
-        std::cout << "Cannot close /usr/apps/org.tizen.image-viewer_common/bin/image-viewer"
-            << std::endl;
-        if(system("/usr/bin/killall /opt/usr/apps/org.tizen.image-viewer_common/bin/image-viewer")) {
-            std::cout << "Cannot close /opt/usr/apps/org.tizen.image-viewer_common/bin/image-viewer"
-                << std::endl;
-            ret = true;
-        }
-    }
-
     return ret;
 }
\ No newline at end of file
diff --git a/tests/manual/webauthn_image_viewer.cpp b/tests/manual/webauthn_image_viewer.cpp
new file mode 100644 (file)
index 0000000..236e86e
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+ *  Copyright (c) 2023 Samsung Electronics Co., Ltd. All rights reserved
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License
+ */
+
+#include <Elementary.h>
+#include <appcore-efl.h>
+#include <Efl_Ui.h>
+
+
+typedef struct appdata {
+       const char *qr_path;
+       Evas_Object *win;
+       Evas_Object *bg;
+       Evas_Object *conform;
+       Evas_Object *entry;
+       Evas_Object *basic_content;
+       Evas_Object *button;
+       Evas_Object *qr_image;
+} appdata_s;
+
+static appdata_s appd =
+{
+       .qr_path = 0,
+       .win = 0,
+       .bg = 0,
+       .conform = 0,
+       .entry = 0,
+       .basic_content = 0,
+       .button = 0,
+       .qr_image = 0
+};
+
+static Evas_Object *
+create_panel_basic_content(Evas_Object *parent, appdata_s *ad)
+{
+       Evas_Object *table;
+
+       /* Table */
+       table = elm_table_add(parent);
+       elm_table_padding_set(table, 10, 10);
+
+    // QR Image
+    ad->qr_image = elm_image_add(table);
+       evas_object_size_hint_weight_set(ad->qr_image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(ad->qr_image, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    // elm_image_file_set(ad->qr_image, NULL, NULL);
+    elm_image_file_set(ad->qr_image, ad->qr_path, NULL);
+    evas_object_show(ad->qr_image);
+       elm_table_pack(table, ad->qr_image, 0, 0, 1, 1);
+
+       evas_object_show(table);
+
+       return table;
+}
+
+static Evas_Object *
+create_panel(Evas_Object *parent, appdata_s *ad)
+{
+       Evas_Object *panel, *grid;
+
+       /* Panel */
+       panel = elm_panel_add(parent);
+       elm_panel_orient_set(panel, ELM_PANEL_ORIENT_BOTTOM);
+       evas_object_show(panel);
+
+       /* Grid */
+       grid = elm_grid_add(panel);
+       evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_content_set(panel, grid);
+
+       /* Panel basic content */
+       ad->basic_content = create_panel_basic_content(grid, ad);
+       evas_object_size_hint_weight_set(ad->basic_content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(ad->basic_content, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_grid_pack(grid, ad->basic_content, 3, 3, 94, 94);
+
+       return panel;
+}
+
+static Evas_Object *
+create_bg(Evas_Object *parent)
+{
+       Evas_Object *bg;
+
+       if (parent == NULL) return NULL;
+
+       bg = elm_bg_add(parent);
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, bg);
+       evas_object_show(bg);
+
+       return bg;
+}
+
+static Evas_Object *
+create_conform(Evas_Object *parent)
+{
+       Evas_Object *conform, *bg;
+
+       if (parent == NULL) return NULL;
+
+       conform = elm_conformant_add(parent);
+       evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, conform);
+
+       bg = elm_bg_add(conform);
+       elm_object_style_set(bg, "indicator/headerbg");
+       elm_object_part_content_set(conform, "elm.swallow.indicator_bg", bg);
+       evas_object_show(bg);
+
+       evas_object_show(conform);
+       return conform;
+}
+
+static void create_base_gui(appdata_s *ad)
+{
+       Evas_Object *grid, *panel;
+
+       ad->win = elm_win_util_standard_add("NAME", "TITLE");
+       elm_win_autodel_set(ad->win, EINA_TRUE);
+
+       if (elm_win_wm_rotation_supported_get(ad->win)) {
+               int rots[4] = { 0, 90, 180, 270 };
+               elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
+       }
+
+       ad->bg = create_bg(ad->win);
+       ad->conform = create_conform(ad->win);
+       elm_win_conformant_set(ad->win, EINA_TRUE);
+       elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
+       elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
+
+       // /* Grid */
+       grid = elm_grid_add(ad->conform);
+       evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_content_set(ad->conform, grid);
+
+       // /* Panel */
+       panel = create_panel(grid, ad);
+       elm_grid_pack(grid, panel, 0, 0, 100, 100);
+
+       /* Show window after base gui is set up */
+       evas_object_show(ad->win);
+}
+
+static int app_create(void *user_data)
+{
+       appdata_s *ad = (appdata_s *) user_data;
+       create_base_gui(ad);
+    return 1; // Success
+}
+
+static int app_terminate(void *user_data)
+{
+       if (!user_data)
+               return 1;
+
+       appdata_s *ad = (appdata_s *) user_data;
+
+       if (ad->win)
+               evas_object_del(ad->win);
+
+    return 1; // Success
+}
+
+
+static struct appcore_ops ops =
+{
+    .data = &appd,
+    .create = app_create,
+    .terminate = app_terminate,
+    .pause = NULL,
+    .resume = NULL,
+    .reset = NULL,
+    .reserved = {NULL},
+};
+
+
+int main(int argc, char *argv[])
+{
+       if(argc != 2) {
+               printf("Usage: webauthn-image-viewer  QR_PATH\n");
+               return -1;
+       }
+
+       appd.qr_path = argv[1];
+       return appcore_efl_main("Image Viewer", &argc, (char ***)&argv, &ops);
+}