Add functionality that allow changing user's name accepted/tizen/unified/20191111.152608 submit/tizen/20191111.122616
authorsaerome.kim <saerome.kim@samsung.com>
Mon, 11 Nov 2019 10:34:35 +0000 (19:34 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 11 Nov 2019 12:05:38 +0000 (21:05 +0900)
- Problem: Users want to change their name.
- Cause: it is not supported to change the user name once user information
  added to ua-manager DB.
- Solution: Make the user can change his name even user-information added.

Change-Id: I54901e5c24da13239e8cce7d35063d15ed6ca975
Signed-off-by: saerome.kim <saerome.kim@samsung.com>
include/ua-api.h
include/ua-internal.h
packaging/ua-manager.spec
ua-api/src/ua-api.c
ua-daemon/include/ua-manager-core.h
ua-daemon/include/ua-manager-database.h
ua-daemon/src/ua-manager-core.c
ua-daemon/src/ua-manager-request-handler.c
ua-daemon/src/ua-manager-user-db.c

index 0fa951b..c804679 100644 (file)
@@ -721,6 +721,23 @@ int _uam_add_user(uam_user_info_s *user);
 int _uam_remove_user(char *account);
 
 /**
+ * @brief Updates user info.
+ * @since_tizen 5.5
+ *
+ * @param[in] user User information.
+ *
+ * @return 0 on success, otherwise a negative error value
+ * @retval #UAM_ERROR_NONE Successful
+ * @retval #UAM_ERROR_INVALID_PARAMETER Invalid parameters
+ * @retval #UAM_ERROR_INTERNAL Internal error
+ *
+ * @exception
+ * @pre
+ * @post
+ */
+int _uam_update_user(uam_user_info_s *user);
+
+/**
  * @brief Brings user information that meet the user account.
  * @since_tizen 5.5
  *
index 6f57de6..47cedd8 100644 (file)
@@ -38,6 +38,7 @@ extern "C" {
        REQUEST(UAM_REQUEST_GET_DEFAULT_USER) \
        REQUEST(UAM_REQUEST_ADD_USER) \
        REQUEST(UAM_REQUEST_DELETE_USER) \
+       REQUEST(UAM_REQUEST_UPDATE_USER) \
        REQUEST(UAM_REQUEST_GET_USER_BY_ACCOUNT) \
        REQUEST(UAM_REQUEST_GET_USER_BY_DEVICE_ID) \
        REQUEST(UAM_REQUEST_GET_USER_BY_MAC) \
index 7df60d5..c50c6ab 100644 (file)
@@ -1,6 +1,6 @@
 Name:       ua-manager
 Summary:    User awareness manager
-Version:    0.12.16
+Version:    0.12.17
 Release:    1
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
@@ -67,7 +67,7 @@ cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} \
        -DLIB_PATH=%{_lib} \
        -DFULLVER=%{version} \
        -DMAJORVER=${MAJORVER} \
-       -DDBPATH=%{database_full_pathi \
+       -DDBPATH=%{database_full_path} \
        -DBUILD_GCOV=%{?gcov:1}%{!?gcov:0}} \
        -DBUILD_GTESTS=%{?gtests:1}%{!?gtests:0}}
 
index f2fce48..3fd2756 100644 (file)
@@ -225,6 +225,26 @@ UAM_EXPORT_API int _uam_remove_user(char *account)
        return ret;
 }
 
+UAM_EXPORT_API int _uam_update_user(uam_user_info_s *user)
+{
+       FUNC_ENTRY;
+       int ret;
+
+       UAM_VALIDATE_INPUT_PARAMETER(user);
+
+       UAM_INIT_PARAMS();
+       UAM_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+       g_array_append_vals(in_param1, user, sizeof(uam_user_info_s));
+       ret = _uam_sync_request(UAM_REQUEST_UPDATE_USER,
+                       in_param1, in_param2, in_param3, in_param4, &out_param);
+
+       UAM_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
+
+       FUNC_EXIT;
+       return ret;
+}
+
 UAM_EXPORT_API int _uam_request_get_user_by_account(char *account,
        uam_user_info_s *user)
 {
index dae035f..1742e67 100644 (file)
@@ -115,6 +115,8 @@ int _uam_core_add_user(int *user_id, const char *account, const char *name);
 
 int _uam_core_remove_user(const char *account);
 
+int _uam_core_update_user(uam_user_info_s *user);
+
 int _uam_core_add_device(const char *account, const uam_device_info_s *dev_info);
 
 int _uam_core_remove_device(const char *account, const uam_device_info_s *dev_info);
index 5c4f947..d8c1805 100644 (file)
@@ -101,6 +101,9 @@ int _uam_user_db_clear(void);
 /* insert */
 int _uam_db_insert_user_info(int* user_id, const char *name, const char *account);
 
+/* update */
+int _uam_db_update_user_info(uam_db_user_info_t *user);
+
 /* DEVICE QUERIES */
 typedef struct {
        int user_id;
index 6eb75b7..643d92c 100644 (file)
@@ -828,6 +828,31 @@ int _uam_core_remove_user(const char *account)
        return UAM_ERROR_NONE;
 }
 
+int _uam_core_update_user(uam_user_info_s *user)
+{
+       FUNC_ENTRY;
+       GSList *l;
+       uam_db_user_info_t *user_info;
+
+       retv_if(NULL == user, UAM_ERROR_INVALID_PARAMETER);
+
+       /* Retrieve user from list */
+       l = g_slist_find_custom(users, user->account, __compare_user_account);
+       retv_if((NULL == l) || (l->data == NULL), UAM_ERROR_NOT_REGISTERED);
+
+       user_info = l->data;
+       g_strlcpy(user_info->name, user->name, UAM_USER_NAME_MAX_STRING_LEN);
+
+       /* Update user to database */
+       if (UAM_ERROR_NONE != _uam_db_update_user_info(user_info)) {
+               UAM_ERR("_uam_db_update_user_info failed");
+               return UAM_ERROR_DB_FAILED;
+       }
+
+       FUNC_EXIT;
+       return UAM_ERROR_NONE;
+}
+
 int _uam_core_add_device(const char *account, const uam_device_info_s *dev_info)
 {
        FUNC_ENTRY;
index c485a1e..cedb318 100644 (file)
@@ -127,6 +127,17 @@ static int __uam_manager_sync_request_handler(
                result = _uam_core_remove_user(account);
                break;
        }
+       case UAM_REQUEST_UPDATE_USER: {
+               uam_user_info_s user;
+
+               __uam_manager_copy_params(in_param1,
+                               &user, sizeof(uam_user_info_s));
+               UAM_DBG("Account: [%s] Name: [%s]", user.account, user.name);
+
+               result = _uam_core_update_user(&user);
+               break;
+
+       }
        case UAM_REQUEST_GET_USER_BY_ACCOUNT: {
                const char *account;
                uam_user_info_s user;
@@ -785,6 +796,7 @@ static gboolean __uam_manager_is_sync_function(int function)
        case UAM_REQUEST_GET_DEFAULT_USER:
        case UAM_REQUEST_ADD_USER:
        case UAM_REQUEST_DELETE_USER:
+       case UAM_REQUEST_UPDATE_USER:
        case UAM_REQUEST_GET_USER_BY_ACCOUNT:
        case UAM_REQUEST_GET_USER_BY_DEVICE_ID:
        case UAM_REQUEST_GET_USER_BY_MAC:
index 4b15776..1773113 100644 (file)
 #include "ua-manager-common.h"
 #include "ua-manager-database.h"
 
-#define SELECT_ALL_USERS_DATA "SELECT user_id, " \
-       "name, account FROM userdata"
+#define SELECT_ALL_USERS_DATA "SELECT user_id, name, account FROM userdata"
 
-#define SELECT_USER_DATA "SELECT user_id, " \
-       "name, account FROM userdata WHERE user_id = ?"
+#define SELECT_USER_DATA "SELECT user_id, name, account FROM userdata WHERE user_id = ?"
 
 #define SELECT_MAX_USER_ID "SELECT MAX(user_id) FROM userdata"
 
-#define INSERT_USER_INFO "insert into userdata " \
-       "(name, account)" \
-       "values (?, ?)"
+#define INSERT_USER_INFO "insert into userdata (name, account) values (?, ?)"
 
 #define DELETE_ALL_USERS_DATA "delete from userdata "
 
-#define DELETE_USER_INFO "delete from userdata " \
-       "WHERE user_id = ? "
+#define DELETE_USER_INFO "delete from userdata WHERE user_id = ? "
+
+#define UPDATE_USER_INFO "UPDATE userdata SET name = ? WHERE account = ?"
 
 /* DELETE statements */
 static sqlite3_stmt *delete_all_users_data;
@@ -55,6 +52,9 @@ static sqlite3_stmt *select_max_user_id;
 /* INSERT statements */
 static sqlite3_stmt *insert_user_info;
 
+/* UPDATE statements */
+static sqlite3_stmt *update_user_info;
+
 extern sqlite3 *database_handle;
 static int max_user_id;
 
@@ -88,6 +88,15 @@ static void __uam_finalize_insert(void)
        FUNC_EXIT;
 }
 
+static void __uam_finalize_update(void)
+{
+       FUNC_ENTRY;
+
+       FINALIZE(update_user_info);
+
+       FUNC_EXIT;
+}
+
 static int __uam_prepare_delete(sqlite3 *db)
 {
        FUNC_ENTRY;
@@ -132,15 +141,26 @@ static int __uam_prepare_select(sqlite3 *db)
        return rc;
 }
 
-static int __uam_prepare_update(sqlite3 *db)
+static int __uam_prepare_insert(sqlite3 *db)
 {
        FUNC_ENTRY;
-       //TODO
+       int rc;
+       static int initialized;
+
+       if (initialized) {
+               FUNC_EXIT;
+               return SQLITE_OK;
+       }
+
+       PREPARE_QUERY(rc, db, insert_user_info,
+               INSERT_USER_INFO, __uam_finalize_insert);
+
+       initialized = 1;
        FUNC_EXIT;
-       return 0;
+       return rc;
 }
 
-static int __uam_prepare_insert(sqlite3 *db)
+static int __uam_prepare_update(sqlite3 *db)
 {
        FUNC_ENTRY;
        int rc;
@@ -151,8 +171,8 @@ static int __uam_prepare_insert(sqlite3 *db)
                return SQLITE_OK;
        }
 
-       PREPARE_QUERY(rc, db, insert_user_info,
-               INSERT_USER_INFO, __uam_finalize_insert);
+       PREPARE_QUERY(rc, db, update_user_info,
+               UPDATE_USER_INFO, __uam_finalize_update);
 
        initialized = 1;
        FUNC_EXIT;
@@ -408,3 +428,36 @@ handle_error:
        sqlite3_reset(stmt);
        return error_code;
 }
+
+int _uam_db_update_user_info(uam_db_user_info_t *user)
+{
+       FUNC_ENTRY;
+       int error_code = UAM_ERROR_NONE;
+       sqlite3_stmt *stmt = update_user_info;
+       int sql_ret = SQLITE_OK;
+
+       retv_if(NULL == user, UAM_ERROR_INVALID_PARAMETER);
+
+       UAM_INFO("%s-%s", user->account, user->name);
+
+       DB_ACTION(sqlite3_bind_text(stmt, 1, user->name, -1, SQLITE_TRANSIENT),
+               error_code, handle_error);
+       DB_ACTION(sqlite3_bind_text(stmt, 2, user->account, -1, SQLITE_TRANSIENT),
+               error_code, handle_error);
+
+       sql_ret = sqlite3_step(stmt);
+       if (sql_ret != SQLITE_DONE) {
+               UAM_ERR("Failed to update user info [%d:%s]",
+                       sql_ret, sqlite3_errmsg(database_handle));
+               error_code = UAM_ERROR_DB_FAILED;
+               goto handle_error;
+       }
+
+       UAM_DBG("User info updated");
+
+handle_error:
+       sqlite3_reset(stmt);
+       FUNC_EXIT;
+       return error_code;
+}
+