diff --git a/examples/demo/demo.ecf b/examples/demo/demo.ecf index 57224f4..312a0fd 100644 --- a/examples/demo/demo.ecf +++ b/examples/demo/demo.ecf @@ -51,9 +51,6 @@ - - - diff --git a/library/persistence/sqlite3/src/cms_storage_sqlite3.e b/library/persistence/sqlite3/src/cms_storage_sqlite3.e index 2ddbc53..e33b96f 100644 --- a/library/persistence/sqlite3/src/cms_storage_sqlite3.e +++ b/library/persistence/sqlite3/src/cms_storage_sqlite3.e @@ -73,14 +73,25 @@ feature -- Execution sql_begin_transaction -- Start a database transtaction. + local + retried: BOOLEAN do - if transaction_depth = 0 then - sqlite.begin_transaction (False) - end - transaction_depth := transaction_depth + 1 - debug ("roc_storage") - print ("# sql_begin_transaction (depth="+ transaction_depth.out +").%N") + if retried then + -- Issue .. db locked? + sql_rollback_transaction + error_handler.add_custom_error (-1, "db error", "Unable to begin transaction..") + else + if transaction_depth = 0 then + sqlite.begin_transaction (False) + end + transaction_depth := transaction_depth + 1 + debug ("roc_storage") + print ("# sql_begin_transaction (depth="+ transaction_depth.out +").%N") + end end + rescue + retried := True + retry end sql_rollback_transaction diff --git a/modules/blog/cms_blog_module.e b/modules/blog/cms_blog_module.e index 6aa3b52..9fb986c 100644 --- a/modules/blog/cms_blog_module.e +++ b/modules/blog/cms_blog_module.e @@ -17,6 +17,8 @@ inherit blog_api end + CMS_WITH_MODULE_ADMINISTRATION + CMS_HOOK_MENU_SYSTEM_ALTER CMS_HOOK_RESPONSE_ALTER @@ -81,13 +83,21 @@ feature {CMS_API} -- Module management end end -feature {CMS_API} -- Access: API +feature {CMS_API, CMS_MODULE} -- Access: API blog_api: detachable CMS_BLOG_API -- node_api: detachable CMS_NODE_API +feature {NONE} -- Administration + + administration: CMS_SELF_MODULE_ADMINISTRATION [CMS_BLOG_MODULE] + -- Administration module. + do + create Result.make (Current) + end + feature -- Access: router setup_router (a_router: WSF_ROUTER; a_api: CMS_API) diff --git a/modules/node/submodules/page/cms_page_module.e b/modules/node/submodules/page/cms_page_module.e index eb89b74..553943a 100644 --- a/modules/node/submodules/page/cms_page_module.e +++ b/modules/node/submodules/page/cms_page_module.e @@ -21,6 +21,8 @@ inherit CMS_HOOK_IMPORT + CMS_WITH_MODULE_ADMINISTRATION + CMS_EXPORT_NODE_UTILITIES CMS_IMPORT_NODE_UTILITIES @@ -114,6 +116,14 @@ feature {CMS_API} -- Module management end end +feature {NONE} -- Administration + + administration: CMS_SELF_MODULE_ADMINISTRATION [CMS_PAGE_MODULE] + -- Administration module. + do + create Result.make (Current) + end + feature {CMS_API} -- Access: API page_api: detachable CMS_PAGE_API diff --git a/modules/session_auth/cms_session_auth_module.e b/modules/session_auth/cms_session_auth_module.e index 9abc865..c33ba1c 100644 --- a/modules/session_auth/cms_session_auth_module.e +++ b/modules/session_auth/cms_session_auth_module.e @@ -187,43 +187,75 @@ feature {NONE} -- Implementation: routes handle_login_with_session (api: CMS_API; a_session_api: CMS_SESSION_API; req: WSF_REQUEST; res: WSF_RESPONSE) local r: CMS_RESPONSE + l_username, l_username_or_email, l_password: detachable READABLE_STRING_GENERAL + l_user: detachable CMS_USER + l_tmp_user: detachable CMS_TEMP_USER do if - attached {WSF_STRING} req.form_parameter ("username") as l_username and then - attached {WSF_STRING} req.form_parameter ("password") as l_password + attached {WSF_STRING} req.form_parameter ("username") as p_username and then + attached {WSF_STRING} req.form_parameter ("password") as p_password then - if - api.user_api.is_valid_credential (l_username.value, l_password.value) and then - attached api.user_api.user_by_name (l_username.value) as l_user - then - a_session_api.process_user_login (l_user, req, res) - - create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api) + l_username_or_email := p_username.value + l_password := p_password.value + l_user := api.user_api.user_by_name (l_username_or_email) + if l_user = Void then + l_user := api.user_api.user_by_email (l_username_or_email) + end + if l_user = Void then + l_tmp_user := api.user_api.temp_user_by_name (l_username_or_email) + if l_tmp_user = Void then + l_tmp_user := api.user_api.temp_user_by_email (l_username_or_email) + end if - attached {WSF_STRING} req.item ("destination") as p_destination and then - attached p_destination.value as v and then - v.is_valid_as_string_8 + l_tmp_user /= Void and then + api.user_api.is_valid_temp_user_credential (l_tmp_user.name, l_password) then - r.set_redirection (v.to_string_8) + create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api) + if attached smarty_template_login_block (req, Current, "login", api) as l_tpl_block then + l_tpl_block.set_value (l_username_or_email, "username") + l_tpl_block.set_value ("Error: Inactive account (or not yet validated)!", "error") + r.add_block (l_tpl_block, "content") + end else - r.set_redirection ("") + create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api) + if attached smarty_template_login_block (req, Current, "login", api) as l_tpl_block then + l_tpl_block.set_value (l_username_or_email, "username") + l_tpl_block.set_value ("Wrong username or password ", "error") + r.add_block (l_tpl_block, "content") + end end else - create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api) - if attached smarty_template_login_block (req, Current, "login", api) as l_tpl_block then - l_tpl_block.set_value (l_username.value, "username") - l_tpl_block.set_value ("Wrong: Username or password ", "error") - r.add_block (l_tpl_block, "content") + l_username := l_user.name + if api.user_api.is_valid_credential (l_username, l_password) then + a_session_api.process_user_login (l_user, req, res) + + create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api) + if + attached {WSF_STRING} req.item ("destination") as p_destination and then + attached p_destination.value as v and then + v.is_valid_as_string_8 + then + r.set_redirection (v.to_string_8) + else + r.set_redirection ("") + end + else + create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api) + if attached smarty_template_login_block (req, Current, "login", api) as l_tpl_block then + l_tpl_block.set_value (l_username_or_email, "username") + l_tpl_block.set_value ("Wrong username or password ", "error") + r.add_block (l_tpl_block, "content") + end end end r.execute else create {BAD_REQUEST_ERROR_CMS_RESPONSE} r.make (req, res, api) if attached smarty_template_login_block (req, Current, "login", api) as l_tpl_block then - if attached {WSF_STRING} req.form_parameter ("username") as l_username then - l_tpl_block.set_value (l_username.value, "username") + if attached {WSF_STRING} req.form_parameter ("username") as p_username then + l_tpl_block.set_value (p_username.value, "username") end - l_tpl_block.set_value ("Wrong: Username or password ", "error") + l_tpl_block.set_value ("Wrong username or password ", "error") r.add_block (l_tpl_block, "content") end r.execute diff --git a/modules/session_auth/persistence/cms_session_auth_storage_sql.e b/modules/session_auth/persistence/cms_session_auth_storage_sql.e index 23473e0..d9036c3 100644 --- a/modules/session_auth/persistence/cms_session_auth_storage_sql.e +++ b/modules/session_auth/persistence/cms_session_auth_storage_sql.e @@ -41,7 +41,7 @@ feature -- Access User l_uid := 0 end end - sql_finalize + sql_finalize_query (Select_user_id_by_token) if l_uid > 0 and attached api as l_cms_api then Result := l_cms_api.user_api.user_by_id (l_uid) end @@ -64,7 +64,7 @@ feature -- Access User Result := False end end - sql_finalize + sql_finalize_query (Select_user_token) end feature -- Change User token @@ -82,8 +82,8 @@ feature -- Change User token l_parameters.put (create {DATE_TIME}.make_now_utc, "utc_date") sql_begin_transaction sql_insert (sql_insert_session_auth, l_parameters) + sql_finalize_insert (sql_insert_session_auth) sql_commit_transaction - sql_finalize end update_user_session_auth (a_token: READABLE_STRING_GENERAL; a_user: CMS_USER) @@ -99,8 +99,8 @@ feature -- Change User token l_parameters.put (create {DATE_TIME}.make_now_utc, "utc_date") sql_begin_transaction sql_modify (sql_update_session_auth, l_parameters) + sql_finalize_modify (sql_update_session_auth) sql_commit_transaction - sql_finalize end feature {NONE} -- SQL statements diff --git a/src/kernel/form/cms_form.e b/src/kernel/form/cms_form.e index 5da5498..df97b8e 100644 --- a/src/kernel/form/cms_form.e +++ b/src/kernel/form/cms_form.e @@ -108,13 +108,6 @@ feature -- CMS response end end -feature -- Webapi processing - - process_webapi_response () - do - - end - feature -- Helpers extend_text_field (a_name: READABLE_STRING_8; a_text: detachable READABLE_STRING_GENERAL) diff --git a/src/modules/core/cms_user_api.e b/src/modules/core/cms_user_api.e index f1f000e..990354d 100644 --- a/src/modules/core/cms_user_api.e +++ b/src/modules/core/cms_user_api.e @@ -235,7 +235,7 @@ feature -- Change User feature -- Status report - is_valid_credential (a_auth_login, a_auth_password: READABLE_STRING_32): BOOLEAN + is_valid_credential (a_auth_login, a_auth_password: READABLE_STRING_GENERAL): BOOLEAN -- Is the credentials `a_auth_login' and `a_auth_password' valid? do Result := user_storage.is_valid_credential (a_auth_login, a_auth_password) @@ -501,6 +501,12 @@ feature -- User status feature -- Access - Temp User + is_valid_temp_user_credential (a_auth_login, a_auth_password: READABLE_STRING_GENERAL): BOOLEAN + -- Is the credentials `a_auth_login' and `a_auth_password' valid? + do + Result := user_storage.is_valid_temp_user_credential (a_auth_login, a_auth_password) + end + temp_users_count: INTEGER -- Number of pending users. --! to be accepted or rehected @@ -508,19 +514,19 @@ feature -- Access - Temp User Result := user_storage.temp_users_count end - temp_user_by_name (a_username: READABLE_STRING_GENERAL): detachable CMS_USER + temp_user_by_name (a_username: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- User by name `a_user_name', if any. do - Result := user_storage.temp_user_by_name (a_username.as_string_32) + Result := user_storage.temp_user_by_name (a_username) end - temp_user_by_email (a_email: READABLE_STRING_8): detachable CMS_USER + temp_user_by_email (a_email: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- User by email `a_email', if any. do Result := user_storage.temp_user_by_email (a_email) end - temp_user_by_activation_token (a_token: READABLE_STRING_32): detachable CMS_USER + temp_user_by_activation_token (a_token: READABLE_STRING_32): detachable CMS_TEMP_USER -- User by activation token `a_token'. do Result := user_storage.temp_user_by_activation_token (a_token) diff --git a/src/modules/core/persistence/core/cms_core_storage_i.e b/src/modules/core/persistence/core/cms_core_storage_i.e index ba2006a..b94ffc4 100644 --- a/src/modules/core/persistence/core/cms_core_storage_i.e +++ b/src/modules/core/persistence/core/cms_core_storage_i.e @@ -68,13 +68,13 @@ feature -- Logs feature -- Misc - set_custom_value (a_name: READABLE_STRING_8; a_value: attached like custom_value; a_type: detachable READABLE_STRING_8) - -- Save data `a_name:a_value' for type `a_type' (or default if none). + set_custom_value (a_name: READABLE_STRING_8; a_value: attached like custom_value; a_type: READABLE_STRING_8) + -- Save data `a_name:a_value' for type `a_type'. deferred end - unset_custom_value (a_name: READABLE_STRING_8; a_type: detachable READABLE_STRING_8) - -- Delete data `a_name' for type `a_type' (or default if none). + unset_custom_value (a_name: READABLE_STRING_8; a_type: READABLE_STRING_8) + -- Delete data `a_name' for type `a_type'. deferred end diff --git a/src/modules/core/persistence/core/cms_core_storage_sql_i.e b/src/modules/core/persistence/core/cms_core_storage_sql_i.e index 87474c8..9e75b36 100644 --- a/src/modules/core/persistence/core/cms_core_storage_sql_i.e +++ b/src/modules/core/persistence/core/cms_core_storage_sql_i.e @@ -53,7 +53,7 @@ feature -- URL aliases end if l_continue then sql_insert (sql_insert_path_alias, l_parameters) - sql_finalize + sql_finalize_insert (sql_insert_path_alias) end end @@ -80,7 +80,7 @@ feature -- URL aliases l_parameters.put (a_alias, "alias") sql_modify (sql_update_path_alias, l_parameters) - sql_finalize + sql_finalize_modify (sql_update_path_alias) end end @@ -97,7 +97,7 @@ feature -- URL aliases create l_parameters.make (1) l_parameters.put (a_alias, "alias") sql_modify (sql_delete_path_alias, l_parameters) - sql_finalize + sql_finalize_modify (sql_delete_path_alias) else error_handler.add_custom_error (0, "alias mismatch", "Path alias %"" + a_alias + "%" is not related to source %"" + a_source + "%"!") end @@ -120,7 +120,7 @@ feature -- URL aliases sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (sql_select_path_source) end source_of_path_alias (a_alias: READABLE_STRING_GENERAL): detachable READABLE_STRING_8 @@ -139,7 +139,7 @@ feature -- URL aliases check one_row: sql_after end end end - sql_finalize + sql_finalize_query (sql_select_path_alias) end path_aliases: STRING_TABLE [READABLE_STRING_8] @@ -165,7 +165,7 @@ feature -- URL aliases sql_forth end end - sql_finalize + sql_finalize_query (sql_select_all_path_alias) end sql_select_all_path_alias: STRING = "SELECT source, alias, lang FROM path_aliases ORDER BY pid DESC;" @@ -218,7 +218,7 @@ feature -- Logs end l_parameters.put (now, "date") sql_insert (sql_insert_log, l_parameters) - sql_finalize + sql_finalize_insert (sql_insert_log) end logs (a_category: detachable READABLE_STRING_GENERAL; a_lower: INTEGER; a_count: INTEGER): ARRAYED_LIST [CMS_LOG] @@ -262,7 +262,7 @@ feature -- Logs end sql_forth end - sql_finalize + sql_finalize_query (l_sql) end fetch_log: detachable CMS_LOG @@ -311,7 +311,7 @@ feature -- Logs feature -- Misc - set_custom_value (a_name: READABLE_STRING_8; a_value: attached like custom_value; a_type: detachable READABLE_STRING_8) + set_custom_value (a_name: READABLE_STRING_8; a_value: attached like custom_value; a_type: READABLE_STRING_8) -- local l_parameters: STRING_TABLE [detachable ANY] @@ -319,45 +319,29 @@ feature -- Misc error_handler.reset create l_parameters.make (3) - if a_type /= Void then - l_parameters.put (a_type, "type") - else - l_parameters.put (a_type, "default") - end + l_parameters.put (a_type, "type") l_parameters.put (a_name, "name") l_parameters.put (a_value, "value") + sql_begin_transaction if attached custom_value (a_name, a_type) as l_value then if a_value.same_string (l_value) then -- already up to date else sql_modify (sql_update_custom_value, l_parameters) - sql_finalize + sql_finalize_modify (sql_update_custom_value) end else sql_insert (sql_insert_custom_value, l_parameters) - sql_finalize + sql_finalize_insert (sql_insert_custom_value) end - end - - unset_custom_value (a_name: READABLE_STRING_8; a_type: detachable READABLE_STRING_8) - -- - local - l_parameters: STRING_TABLE [detachable ANY] - do - error_handler.reset - - create l_parameters.make (3) - if a_type /= Void then - l_parameters.put (a_type, "type") + if has_error then + sql_rollback_transaction else - l_parameters.put (a_type, "default") + sql_commit_transaction end - l_parameters.put (a_name, "name") - sql_modify (sql_delete_custom_value, l_parameters) - sql_finalize end - custom_value (a_name: READABLE_STRING_GENERAL; a_type: detachable READABLE_STRING_8): detachable READABLE_STRING_32 + unset_custom_value (a_name: READABLE_STRING_8; a_type: READABLE_STRING_8) -- local l_parameters: STRING_TABLE [detachable ANY] @@ -365,11 +349,21 @@ feature -- Misc error_handler.reset create l_parameters.make (2) - if a_type /= Void then - l_parameters.put (a_type, "type") - else - l_parameters.put (a_type, "default") - end + l_parameters.put (a_type, "type") + l_parameters.put (a_name, "name") + sql_delete (sql_delete_custom_value, l_parameters) + sql_finalize_delete (sql_delete_custom_value) + end + + custom_value (a_name: READABLE_STRING_GENERAL; a_type: READABLE_STRING_8): detachable READABLE_STRING_32 + -- + local + l_parameters: STRING_TABLE [detachable ANY] + do + error_handler.reset + + create l_parameters.make (2) + l_parameters.put (a_type, "type") l_parameters.put (a_name, "name") sql_query (sql_select_custom_value, l_parameters) if not has_error and not sql_after then @@ -377,16 +371,16 @@ feature -- Misc sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (sql_select_custom_value) end - custom_values: detachable LIST [TUPLE [name: READABLE_STRING_GENERAL; type: detachable READABLE_STRING_8; value: detachable READABLE_STRING_32]] + custom_values: detachable LIST [TUPLE [name: READABLE_STRING_GENERAL; type: READABLE_STRING_8; value: detachable READABLE_STRING_32]] -- Values as list of [name, type, value]. local l_type, l_name: READABLE_STRING_8 do error_handler.reset - create {ARRAYED_LIST [TUPLE [name: READABLE_STRING_GENERAL; type: detachable READABLE_STRING_8; value: detachable READABLE_STRING_32]]} Result.make (5) + create {ARRAYED_LIST [TUPLE [name: READABLE_STRING_GENERAL; type: READABLE_STRING_8; value: detachable READABLE_STRING_32]]} Result.make (5) sql_query (sql_select_all_custom_values, Void) if not has_error then from @@ -406,7 +400,7 @@ feature -- Misc sql_forth end end - sql_finalize + sql_finalize_query (sql_select_all_custom_values) end sql_select_all_custom_values: STRING = "SELECT type, name, value FROM custom_values;" diff --git a/src/modules/core/persistence/user/cms_user_storage_i.e b/src/modules/core/persistence/user/cms_user_storage_i.e index ce38b2f..c13b5bd 100644 --- a/src/modules/core/persistence/user/cms_user_storage_i.e +++ b/src/modules/core/persistence/user/cms_user_storage_i.e @@ -70,7 +70,7 @@ feature -- Access password: Result /= Void implies (Result.hashed_password /= Void and Result.password = Void) end - is_valid_credential (a_u, a_p: READABLE_STRING_32): BOOLEAN + is_valid_credential (a_u, a_p: READABLE_STRING_GENERAL): BOOLEAN -- Does account with username `a_username' and password `a_password' exist? deferred end @@ -212,18 +212,23 @@ feature -- Change: User password recovery feature -- Access: Temp Users + is_valid_temp_user_credential (a_u, a_p: READABLE_STRING_GENERAL): BOOLEAN + -- Does temp account with username `a_username' and password `a_password' exist? + deferred + end + temp_users_count: INTEGER -- Number of pending users --! to be accepted or rejected deferred end - temp_user_by_id (a_uid: like {CMS_USER}.id; a_consumer_table: READABLE_STRING_GENERAL): detachable CMS_USER + temp_user_by_id (a_uid: like {CMS_USER}.id; a_consumer_table: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- Retrieve a temporal user by id `a_uid' for the consumer `a_consumer', if aby. deferred end - temp_user_by_name (a_name: like {CMS_USER}.name): detachable CMS_USER + temp_user_by_name (a_name: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- User with name `a_name', if any. require a_name /= Void and then not a_name.is_empty @@ -233,7 +238,7 @@ feature -- Access: Temp Users password: Result /= Void implies (Result.hashed_password /= Void and Result.password = Void) end - temp_user_by_email (a_email: like {CMS_USER}.email): detachable CMS_USER + temp_user_by_email (a_email: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- User with name `a_email', if any. deferred ensure @@ -241,7 +246,7 @@ feature -- Access: Temp Users password: Result /= Void implies (Result.hashed_password /= Void and Result.password = Void) end - temp_user_by_activation_token (a_token: READABLE_STRING_32): detachable CMS_USER + temp_user_by_activation_token (a_token: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- User with activation token `a_token', if any. deferred ensure diff --git a/src/modules/core/persistence/user/cms_user_storage_null.e b/src/modules/core/persistence/user/cms_user_storage_null.e index 56a9bc9..0ff2f52 100644 --- a/src/modules/core/persistence/user/cms_user_storage_null.e +++ b/src/modules/core/persistence/user/cms_user_storage_null.e @@ -41,7 +41,7 @@ feature -- Access: user do end - is_valid_credential (l_auth_login, l_auth_password: READABLE_STRING_32): BOOLEAN + is_valid_credential (l_auth_login, l_auth_password: READABLE_STRING_GENERAL): BOOLEAN do end @@ -147,27 +147,31 @@ feature -- Change: User password recovery feature -- Access: Users + is_valid_temp_user_credential (l_auth_login, l_auth_password: READABLE_STRING_GENERAL): BOOLEAN + do + end + temp_users_count: INTEGER -- do end - temp_user_by_id (a_uid: like {CMS_USER}.id; a_consumer_table: READABLE_STRING_GENERAL): detachable CMS_USER + temp_user_by_id (a_uid: like {CMS_USER}.id; a_consumer_table: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- do end - temp_user_by_name (a_name: like {CMS_USER}.name): detachable CMS_USER + temp_user_by_name (a_name: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- do end - temp_user_by_email (a_email: like {CMS_USER}.email): detachable CMS_USER + temp_user_by_email (a_email: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- do end - temp_user_by_activation_token (a_token: READABLE_STRING_32): detachable CMS_USER + temp_user_by_activation_token (a_token: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- do end @@ -190,7 +194,6 @@ feature -- Temp Users do end - remove_activation (a_token: READABLE_STRING_GENERAL) -- . do diff --git a/src/modules/core/persistence/user/cms_user_storage_sql_i.e b/src/modules/core/persistence/user/cms_user_storage_sql_i.e index fd18c86..330b5f0 100644 --- a/src/modules/core/persistence/user/cms_user_storage_sql_i.e +++ b/src/modules/core/persistence/user/cms_user_storage_sql_i.e @@ -35,7 +35,7 @@ feature -- Access: user sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_users_count) end users: LIST [CMS_USER] @@ -45,8 +45,8 @@ feature -- Access: user error_handler.reset write_information_log (generator + ".all_users") + sql_query (select_users, Void) from - sql_query (select_users, Void) sql_start until sql_after or has_error @@ -56,7 +56,7 @@ feature -- Access: user end sql_forth end - sql_finalize + sql_finalize_query (select_users) end user_by_id (a_id: like {CMS_USER}.id): detachable CMS_USER @@ -74,7 +74,7 @@ feature -- Access: user sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_user_by_id) end user_by_name (a_name: READABLE_STRING_GENERAL): detachable CMS_USER @@ -92,7 +92,7 @@ feature -- Access: user sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_user_by_name) end user_by_email (a_email: READABLE_STRING_GENERAL): detachable CMS_USER @@ -110,7 +110,7 @@ feature -- Access: user sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_user_by_email) end user_by_activation_token (a_token: READABLE_STRING_32): detachable CMS_USER @@ -128,7 +128,7 @@ feature -- Access: user sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_user_by_activation_token) end user_by_password_token (a_token: READABLE_STRING_32): detachable CMS_USER @@ -146,26 +146,26 @@ feature -- Access: user sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_user_by_password_token) end - is_valid_credential (l_auth_login, l_auth_password: READABLE_STRING_32): BOOLEAN + is_valid_credential (a_auth_login, a_auth_password: READABLE_STRING_GENERAL): BOOLEAN local l_security: SECURITY_PROVIDER do - if attached user_salt (l_auth_login) as l_hash then - if attached user_by_name (l_auth_login) as l_user then + if attached user_salt (a_auth_login) as l_hash then + if attached user_by_name (a_auth_login) as l_user then create l_security if attached l_user.hashed_password as l_hashed_password and then - l_security.password_hash (l_auth_password, l_hash).is_case_insensitive_equal (l_hashed_password) + l_security.password_hash (a_auth_password, l_hash).is_case_insensitive_equal (l_hashed_password) then Result := True else write_information_log (generator + ".is_valid_credential User: wrong username or password" ) end else - write_information_log (generator + ".is_valid_credential User:" + l_auth_login + "does not exist" ) + write_information_log (generator + ".is_valid_credential User:" + a_auth_login + "does not exist" ) end end end @@ -180,11 +180,11 @@ feature -- Access: user error_handler.reset write_information_log (generator + ".recent_users") + create l_parameters.make (2) + l_parameters.put (a_count, "rows") + l_parameters.put (a_lower, "offset") + sql_query (sql_select_recent_users, l_parameters) from - create l_parameters.make (2) - l_parameters.put (a_count, "rows") - l_parameters.put (a_lower, "offset") - sql_query (sql_select_recent_users, l_parameters) sql_start until sql_after @@ -194,7 +194,7 @@ feature -- Access: user end sql_forth end - sql_finalize + sql_finalize_query (sql_select_recent_users) end feature -- Change: user @@ -231,12 +231,12 @@ feature -- Change: user a_user.set_id (last_inserted_user_id) update_user_roles (a_user) end + sql_finalize_insert (sql_insert_user) if not error_handler.has_error then sql_commit_transaction else sql_rollback_transaction end - sql_finalize else -- set error error_handler.add_custom_error (-1, "bad request" , "Missing password or email") @@ -274,7 +274,7 @@ feature -- Change: user l_parameters.put (l_password_salt, "salt") sql_modify (sql_update_user_name, l_parameters) - sql_finalize + sql_finalize_modify (sql_update_user_name) if not error_handler.has_error then a_user.set_name (a_new_username) update_user_roles (a_user) @@ -284,7 +284,6 @@ feature -- Change: user else sql_rollback_transaction end - sql_finalize else -- set error error_handler.add_custom_error (-1, "bad request" , "Missing password or email") @@ -327,7 +326,7 @@ feature -- Change: user l_parameters.put (a_user.profile_name, "profile_name") sql_modify (sql_update_user, l_parameters) - sql_finalize + sql_finalize_modify (sql_update_user) if not error_handler.has_error then update_user_roles (a_user) end @@ -336,7 +335,6 @@ feature -- Change: user else sql_rollback_transaction end - sql_finalize else -- set error error_handler.add_custom_error (-1, "bad request" , "Missing password or email") @@ -353,9 +351,9 @@ feature -- Change: user write_information_log (generator + ".delete_user") create l_parameters.make (1) l_parameters.put (a_user.id, "uid") - sql_modify (sql_delete_user, l_parameters) + sql_delete (sql_delete_user, l_parameters) + sql_finalize_delete (sql_delete_user) sql_commit_transaction - sql_finalize end feature -- Change: roles @@ -413,7 +411,6 @@ feature -- Change: roles else sql_rollback_transaction end - sql_finalize end assign_role_to_user (a_role: CMS_USER_ROLE; a_user: CMS_USER) @@ -424,7 +421,7 @@ feature -- Change: roles l_parameters.put (a_user.id, "uid") l_parameters.put (a_role.id, "rid") sql_insert (sql_insert_role_to_user, l_parameters) - sql_finalize + sql_finalize_insert (sql_insert_role_to_user) end unassign_role_from_user (a_role: CMS_USER_ROLE; a_user: CMS_USER) @@ -434,8 +431,8 @@ feature -- Change: roles create l_parameters.make (2) l_parameters.put (a_user.id, "uid") l_parameters.put (a_role.id, "rid") - sql_modify (sql_delete_role_from_user, l_parameters) - sql_finalize + sql_delete (sql_delete_role_from_user, l_parameters) + sql_finalize_delete (sql_delete_role_from_user) end feature -- Access: roles and permissions @@ -453,12 +450,11 @@ feature -- Access: roles and permissions Result := fetch_user_role sql_forth check one_row: sql_after end - sql_finalize - if Result /= Void and not has_error then - fill_user_role (Result) - end end - sql_finalize + sql_finalize_query (select_user_role_by_id) + if Result /= Void and not has_error then + fill_user_role (Result) + end end user_role_by_name (a_name: READABLE_STRING_GENERAL): detachable CMS_USER_ROLE @@ -475,12 +471,11 @@ feature -- Access: roles and permissions Result := fetch_user_role sql_forth check one_row: sql_after end - sql_finalize - if Result /= Void and not has_error then - fill_user_role (Result) - end end - sql_finalize + sql_finalize_query (select_user_role_by_name) + if Result /= Void and not has_error then + fill_user_role (Result) + end end user_roles_for (a_user: CMS_USER): LIST [CMS_USER_ROLE] @@ -491,10 +486,10 @@ feature -- Access: roles and permissions write_information_log (generator + ".user_roles_for") create {ARRAYED_LIST [CMS_USER_ROLE]} Result.make (0) + create l_parameters.make (1) + l_parameters.put (a_user.id, "uid") + sql_query (select_user_roles_by_user_id, l_parameters) from - create l_parameters.make (1) - l_parameters.put (a_user.id, "uid") - sql_query (select_user_roles_by_user_id, l_parameters) sql_start until sql_after @@ -504,7 +499,7 @@ feature -- Access: roles and permissions end sql_forth end - sql_finalize + sql_finalize_query (select_user_roles_by_user_id) if not has_error then across Result as ic loop fill_user_role (ic.item) @@ -520,8 +515,8 @@ feature -- Access: roles and permissions write_information_log (generator + ".user_roles") create {ARRAYED_LIST [CMS_USER_ROLE]} Result.make (0) + sql_query (select_user_roles, Void) from - sql_query (select_user_roles, Void) sql_start until sql_after @@ -532,7 +527,7 @@ feature -- Access: roles and permissions end sql_forth end - sql_finalize + sql_finalize_query (select_user_roles) if not has_error then across Result as ic loop fill_user_role (ic.item) @@ -561,10 +556,10 @@ feature -- Access: roles and permissions write_information_log (generator + ".role_permissions_by_id") create {ARRAYED_LIST [READABLE_STRING_8]} Result.make (0) + create l_parameters.make (1) + l_parameters.put (a_role_id, "rid") + sql_query (select_role_permissions_by_role_id, l_parameters) from - create l_parameters.make (1) - l_parameters.put (a_role_id, "rid") - sql_query (select_role_permissions_by_role_id, l_parameters) sql_start until sql_after or has_error @@ -576,7 +571,7 @@ feature -- Access: roles and permissions -- end sql_forth end - sql_finalize + sql_finalize_query (select_role_permissions_by_role_id) end role_permissions: LIST [READABLE_STRING_8] @@ -587,8 +582,8 @@ feature -- Access: roles and permissions create {ARRAYED_LIST [READABLE_STRING_8]} Result.make (0) Result.compare_objects + sql_query (select_role_permissions, Void) from - sql_query (select_role_permissions, Void) sql_start until sql_after or has_error @@ -598,7 +593,7 @@ feature -- Access: roles and permissions end sql_forth end - sql_finalize + sql_finalize_query (select_role_permissions) end feature -- Change: roles and permissions @@ -628,7 +623,7 @@ feature -- Change: roles and permissions l_parameters.put (a_user_role.id, "rid") l_parameters.put (a_user_role.name, "name") sql_modify (sql_update_user_role, l_parameters) - sql_finalize + sql_finalize_modify (sql_update_user_role) end if not a_user_role.permissions.is_empty then -- FIXME: check if this is non set permissions,or none ... @@ -675,7 +670,7 @@ feature -- Change: roles and permissions create l_parameters.make (1) l_parameters.put (a_user_role.name, "name") sql_insert (sql_insert_user_role, l_parameters) - sql_finalize + sql_finalize_insert (sql_insert_user_role) if not error_handler.has_error then a_user_role.set_id (last_inserted_user_role_id) across @@ -699,7 +694,7 @@ feature -- Change: roles and permissions l_parameters.put (a_permission, "permission") l_parameters.put (Void, "module") -- FIXME: unsupported for now! sql_insert (sql_insert_user_role_permission, l_parameters) - sql_finalize + sql_finalize_insert (sql_insert_user_role_permission) end unset_permission_for_role_id (a_permission: READABLE_STRING_8; a_role_id: INTEGER) @@ -713,8 +708,8 @@ feature -- Change: roles and permissions create l_parameters.make (2) l_parameters.put (a_role_id, "rid") l_parameters.put (a_permission, "permission") - sql_modify (sql_delete_user_role_permission, l_parameters) - sql_finalize + sql_delete (sql_delete_user_role_permission, l_parameters) + sql_finalize_delete (sql_delete_user_role_permission) end last_inserted_user_role_id: INTEGER_32 @@ -728,7 +723,7 @@ feature -- Change: roles and permissions sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (sql_last_insert_user_role_id) end @@ -742,11 +737,11 @@ feature -- Change: roles and permissions write_information_log (generator + ".delete_role") create l_parameters.make (1) l_parameters.put (a_role.id, "rid") - sql_modify (sql_delete_role_permissions_by_role_id, l_parameters) - sql_finalize - sql_modify (sql_delete_role_by_id, l_parameters) + sql_delete (sql_delete_role_permissions_by_role_id, l_parameters) + sql_finalize_delete (sql_delete_role_permissions_by_role_id) + sql_delete (sql_delete_role_by_id, l_parameters) + sql_finalize_delete (sql_delete_role_by_id) sql_commit_transaction - sql_finalize end @@ -767,7 +762,7 @@ feature -- Access: User activation sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (sql_select_activation_expiration) end user_id_by_activation (a_token: READABLE_STRING_32): INTEGER_64 @@ -785,7 +780,7 @@ feature -- Access: User activation sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (sql_select_userid_activation) end feature -- Change: User activation @@ -805,8 +800,8 @@ feature -- Change: User activation l_parameters.put (a_id, "uid") l_parameters.put (l_utc_date, "utc_date") sql_insert (sql_insert_activation, l_parameters) + sql_finalize_insert (sql_insert_activation) sql_commit_transaction - sql_finalize end feature -- Change: User password recovery @@ -826,8 +821,8 @@ feature -- Change: User password recovery l_parameters.put (a_id, "uid") l_parameters.put (l_utc_date, "utc_date") sql_insert (sql_insert_password, l_parameters) + sql_finalize_insert (sql_insert_password) sql_commit_transaction - sql_finalize end remove_password (a_token: READABLE_STRING_32) @@ -841,13 +836,13 @@ feature -- Change: User password recovery create l_parameters.make (1) l_parameters.put (a_token, "token") sql_modify (sql_remove_password, l_parameters) + sql_finalize_modify (sql_remove_password) sql_commit_transaction - sql_finalize end feature {NONE} -- Implementation: User - user_salt (a_username: READABLE_STRING_32): detachable READABLE_STRING_8 + user_salt (a_username: READABLE_STRING_GENERAL): detachable READABLE_STRING_8 -- User salt for the given user `a_username', if any. local l_parameters: STRING_TABLE [detachable ANY] @@ -864,7 +859,27 @@ feature {NONE} -- Implementation: User sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_salt_by_username) + end + + temp_user_salt (a_username: READABLE_STRING_GENERAL): detachable READABLE_STRING_8 + -- User salt for the given user `a_username', if any. + local + l_parameters: STRING_TABLE [detachable ANY] + do + error_handler.reset + write_information_log (generator + ".temp_user_salt") + create l_parameters.make (1) + l_parameters.put (a_username, "name") + sql_query (select_temp_user_salt_by_username, l_parameters) + if not sql_after then + if attached sql_read_string (1) as l_salt then + Result := l_salt + end + sql_forth + check one_row: sql_after end + end + sql_finalize_query (select_temp_user_salt_by_username) end fetch_user: detachable CMS_USER @@ -1049,6 +1064,27 @@ feature {NONE} -- User Password Recovery feature -- Acess: Temp users + is_valid_temp_user_credential (a_auth_login, a_auth_password: READABLE_STRING_GENERAL): BOOLEAN + local + l_security: SECURITY_PROVIDER + do + if attached temp_user_salt (a_auth_login) as l_hash then + if attached temp_user_by_name (a_auth_login) as l_user then + create l_security + if + attached l_user.hashed_password as l_hashed_password and then + l_security.password_hash (a_auth_password, l_hash).is_case_insensitive_equal (l_hashed_password) + then + Result := True + else + write_information_log (generator + ".is_valid_temp_user_credential User: wrong username or password" ) + end + else + write_information_log (generator + ".is_valid_temp_user_credential User:" + a_auth_login + "does not exist" ) + end + end + end + temp_users_count: INTEGER -- Number of items users. do @@ -1061,10 +1097,10 @@ feature -- Acess: Temp users sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_temp_users_count) end - temp_user_by_id (a_uid: like {CMS_USER}.id; a_consumer: READABLE_STRING_GENERAL): detachable CMS_USER + temp_user_by_id (a_uid: like {CMS_USER}.id; a_consumer: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- local l_parameters: STRING_TABLE [detachable ANY] @@ -1084,10 +1120,10 @@ feature -- Acess: Temp users Result := Void end end - sql_finalize + sql_finalize_query (l_string) end - temp_user_by_name (a_name: like {CMS_USER}.name): detachable CMS_USER + temp_user_by_name (a_name: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- User for the given name `a_name', if any. local l_parameters: STRING_TABLE [detachable ANY] @@ -1102,10 +1138,10 @@ feature -- Acess: Temp users sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_temp_user_by_name) end - temp_user_by_email (a_email: like {CMS_USER}.email): detachable CMS_USER + temp_user_by_email (a_email: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- User for the given email `a_email', if any. local l_parameters: STRING_TABLE [detachable ANY] @@ -1120,10 +1156,10 @@ feature -- Acess: Temp users sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_temp_user_by_email) end - temp_user_by_activation_token (a_token: READABLE_STRING_32): detachable CMS_USER + temp_user_by_activation_token (a_token: READABLE_STRING_GENERAL): detachable CMS_TEMP_USER -- User for the given activation token `a_token', if any. local l_parameters: STRING_TABLE [detachable ANY] @@ -1138,7 +1174,7 @@ feature -- Acess: Temp users sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_temp_user_by_activation_token) end temp_recent_users (a_lower: INTEGER; a_count: INTEGER): LIST [CMS_TEMP_USER] @@ -1151,11 +1187,11 @@ feature -- Acess: Temp users error_handler.reset write_information_log (generator + ".temp_recent_users") + create l_parameters.make (2) + l_parameters.put (a_count, "rows") + l_parameters.put (a_lower, "offset") + sql_query (sql_select_temp_recent_users, l_parameters) from - create l_parameters.make (2) - l_parameters.put (a_count, "rows") - l_parameters.put (a_lower, "offset") - sql_query (sql_select_temp_recent_users, l_parameters) sql_start until sql_after or has_error @@ -1165,7 +1201,7 @@ feature -- Acess: Temp users end sql_forth end - sql_finalize + sql_finalize_query (sql_select_temp_recent_users) end token_by_temp_user_id (a_id: like {CMS_USER}.id): detachable STRING @@ -1185,7 +1221,7 @@ feature -- Acess: Temp users sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (select_token_activation_by_user_id) end feature {NONE} -- Implementation: User @@ -1257,12 +1293,12 @@ feature -- New Temp User l_parameters.put (a_temp_user.profile_name, "profile_name") sql_insert (sql_insert_user, l_parameters) + sql_finalize_insert (sql_insert_user) if not error_handler.has_error then sql_commit_transaction else sql_rollback_transaction end - sql_finalize else -- set error error_handler.add_custom_error (-1, "bad request" , "Missing password or email") @@ -1297,13 +1333,13 @@ feature -- New Temp User sql_begin_transaction sql_insert (sql_insert_temp_user, l_parameters) + sql_finalize_insert (sql_insert_temp_user) if not error_handler.has_error then a_temp_user.set_id (last_inserted_temp_user_id) sql_commit_transaction else sql_rollback_transaction end - sql_finalize else -- set error error_handler.add_custom_error (-1, "bad request" , "Missing password or email or personal information") @@ -1323,8 +1359,8 @@ feature -- Remove Activation create l_parameters.make (1) l_parameters.put (a_token, "token") sql_modify (sql_remove_activation, l_parameters) + sql_finalize_modify (sql_remove_activation) sql_commit_transaction - sql_finalize end delete_temp_user (a_temp_user: CMS_TEMP_USER) @@ -1337,9 +1373,9 @@ feature -- Remove Activation write_information_log (generator + ".delete_temp_user") create l_parameters.make (1) l_parameters.put (a_temp_user.id, "uid") - sql_modify (sql_delete_temp_user, l_parameters) + sql_delete (sql_delete_temp_user, l_parameters) + sql_finalize_delete (sql_delete_temp_user) sql_commit_transaction - sql_finalize end feature {NONE} -- Implementation @@ -1355,7 +1391,7 @@ feature {NONE} -- Implementation sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (sql_last_insert_temp_user_id) end last_inserted_user_id: INTEGER_64 @@ -1369,7 +1405,7 @@ feature {NONE} -- Implementation sql_forth check one_row: sql_after end end - sql_finalize + sql_finalize_query (sql_last_insert_user_id) end feature {NONE} -- SQL select @@ -1392,6 +1428,9 @@ feature {NONE} -- SQL select select_temp_user_by_activation_token: STRING = "SELECT u.uid, u.name, u.password, u.salt, u.email, u.application FROM auth_temp_users as u JOIN users_activations as ua ON ua.uid = u.uid and ua.token = :token;" -- Retrieve user by activation token if exist. + select_temp_user_salt_by_username: STRING = "SELECT salt FROM auth_temp_users WHERE name =:name;" + -- Retrieve temp user salt by username if exists. + sql_delete_temp_user: STRING = "DELETE FROM auth_temp_users WHERE uid=:uid;" select_temp_users_count: STRING = "SELECT count(*) FROM auth_temp_users;" diff --git a/src/modules/core/persistence/user_profile/cms_user_profile_storage_sql.e b/src/modules/core/persistence/user_profile/cms_user_profile_storage_sql.e index d4ea036..1a89633 100644 --- a/src/modules/core/persistence/user_profile/cms_user_profile_storage_sql.e +++ b/src/modules/core/persistence/user_profile/cms_user_profile_storage_sql.e @@ -35,7 +35,7 @@ feature -- Access if not has_error then Result := sql_read_string_32 (2) end - sql_finalize + sql_finalize_query (sql_select_user_profile_item) end user_profile (a_user: CMS_USER): detachable CMS_USER_PROFILE @@ -63,7 +63,7 @@ feature -- Access sql_forth end end - sql_finalize + sql_finalize_query (sql_select_user_profile_items) end users_with_profile_item (a_item_name: READABLE_STRING_GENERAL; a_value: detachable READABLE_STRING_GENERAL): detachable LIST [CMS_USER] @@ -98,7 +98,7 @@ feature -- Access sql_forth end end - sql_finalize + sql_finalize_query (sql_select_users_with_profile_item) if not has_error and l_uids /= Void and @@ -132,10 +132,11 @@ feature -- Change reset_error if user_profile_item (a_user, a_item_name) = Void then sql_insert (sql_insert_user_profile_item, l_parameters) + sql_finalize_insert (sql_insert_user_profile_item) else sql_modify (sql_update_user_profile_item, l_parameters) + sql_finalize_modify (sql_update_user_profile_item) end - sql_finalize end save_user_profile (a_user: CMS_USER; a_profile: CMS_USER_PROFILE) @@ -164,7 +165,8 @@ feature -- Change l_is_new := True elseif p.has_key (ic.key) then l_is_new := False - l_has_diff := attached p.item (ic.key) as l_prev_item and then not l_prev_item.same_string (l_item) + l_has_diff := attached p.item (ic.key) as l_prev_item and then + not l_prev_item.same_string (l_item) else l_is_new := True end @@ -175,13 +177,14 @@ feature -- Change if l_is_new then sql_insert (sql_insert_user_profile_item, l_parameters) + sql_finalize_insert (sql_insert_user_profile_item) else sql_modify (sql_update_user_profile_item, l_parameters) + sql_finalize_modify (sql_update_user_profile_item) end l_parameters.wipe_out end end - sql_finalize end feature {NONE} -- Queries diff --git a/src/modules/core/webapi/cms_root_webapi_handler.e b/src/modules/core/webapi/cms_root_webapi_handler.e index ca8e810..68a7596 100644 --- a/src/modules/core/webapi/cms_root_webapi_handler.e +++ b/src/modules/core/webapi/cms_root_webapi_handler.e @@ -41,13 +41,10 @@ feature -- Execution elseif api.has_permission ("account register") then rep.add_link ("register", Void, api.webapi_path ("/account/register")) end - - -- If query has "router=yes", display basic information about router mapping. - -- Note: this may change in the future if - attached router as l_router and then attached req.query_parameter ("router") as p_router and then - p_router.same_string ("yes") + p_router.same_string ("yes") and then + attached router as l_router then create j.make_empty create vis @@ -78,6 +75,9 @@ feature -- Execution end(?, j)) vis.process_router (l_router) rep.add_string_field ("routing", j.representation) +-- vis.on_mapping_actions.extend (agent (i_mapping: WSF_ROUTER_MAPPING; i_json: JSON_OBJECT) +-- do +-- end(?, j)) end rep.add_self (req.percent_encoded_path_info) rep.execute diff --git a/src/persistence/cms_storage_null.e b/src/persistence/cms_storage_null.e index 31ec294..79ba9cd 100644 --- a/src/persistence/cms_storage_null.e +++ b/src/persistence/cms_storage_null.e @@ -103,18 +103,18 @@ feature -- Logs feature -- Custom - set_custom_value (a_name: READABLE_STRING_8; a_value: attached like custom_value; a_type: detachable READABLE_STRING_8) - -- Save data `a_name:a_value' for type `a_type' (or default if none). + set_custom_value (a_name: READABLE_STRING_8; a_value: attached like custom_value; a_type: READABLE_STRING_8) + -- Save data `a_name:a_value' for type `a_type'. do end - unset_custom_value (a_name: READABLE_STRING_8; a_type: detachable READABLE_STRING_8) - -- Delete data `a_name' for type `a_type' (or default if none). + unset_custom_value (a_name: READABLE_STRING_8; a_type: READABLE_STRING_8) + -- Delete data `a_name' for type `a_type'. do end - custom_value (a_name: READABLE_STRING_GENERAL; a_type: detachable READABLE_STRING_8): detachable READABLE_STRING_32 - -- Data for name `a_name' and type `a_type' (or default if none). + custom_value (a_name: READABLE_STRING_GENERAL; a_type: READABLE_STRING_8): detachable READABLE_STRING_32 + -- Data for name `a_name' and type `a_type'. local s: STRING_32 do @@ -130,7 +130,7 @@ feature -- Custom end end - custom_values: detachable LIST [TUPLE [name: READABLE_STRING_GENERAL; type: detachable READABLE_STRING_8; value: detachable READABLE_STRING_32]] + custom_values: detachable LIST [TUPLE [name: READABLE_STRING_GENERAL; type: READABLE_STRING_8; value: detachable READABLE_STRING_32]] -- Values as list of [name, type, value]. do end diff --git a/src/persistence/sql/cms_proxy_storage_sql.e b/src/persistence/sql/cms_proxy_storage_sql.e index a81d68c..75e997a 100644 --- a/src/persistence/sql/cms_proxy_storage_sql.e +++ b/src/persistence/sql/cms_proxy_storage_sql.e @@ -41,6 +41,7 @@ feature -- Execution sql_begin_transaction do + -- FIXME: may raise exception due to locked database... sql_storage.sql_begin_transaction end diff --git a/src/persistence/sql/cms_storage_sql_i.e b/src/persistence/sql/cms_storage_sql_i.e index 3231cc5..633b842 100644 --- a/src/persistence/sql/cms_storage_sql_i.e +++ b/src/persistence/sql/cms_storage_sql_i.e @@ -143,6 +143,31 @@ feature -- Operation deferred end + sql_finalize_query (a_sql_statement: STRING) + do + sql_finalize_statement (a_sql_statement) + end + + sql_finalize_insert (a_sql_statement: STRING) + do + sql_finalize_statement (a_sql_statement) + end + + sql_finalize_modify (a_sql_statement: STRING) + do + sql_finalize_statement (a_sql_statement) + end + + sql_finalize_delete (a_sql_statement: STRING) + do + sql_finalize_statement (a_sql_statement) + end + + sql_finalize_statement (a_sql_statement: STRING) + do + sql_finalize + end + feature -- Helper sql_script_content (a_path: PATH): detachable STRING @@ -181,6 +206,7 @@ feature -- Helper i: INTEGER err: BOOLEAN cl: CELL [INTEGER] + l_sql: STRING do reset_error sql_begin_transaction @@ -194,10 +220,13 @@ feature -- Helper loop if attached next_sql_statement (a_sql_script, i, cl) as s then if not s.is_whitespace then + l_sql := sql_statement (s) if s.starts_with ("INSERT") then - sql_insert (sql_statement (s), a_params) + sql_insert (l_sql, a_params) + sql_finalize_insert (l_sql) else - sql_modify (sql_statement (s), a_params) + sql_modify (l_sql, a_params) + sql_finalize_modify (l_sql) end err := err or has_error reset_error @@ -212,29 +241,34 @@ feature -- Helper else sql_commit_transaction end - sql_finalize end sql_table_exists (a_table_name: READABLE_STRING_8): BOOLEAN -- Does table `a_table_name' exists? + local + l_sql: STRING do reset_error - sql_query ("SELECT count(*) FROM " + a_table_name + " ;", Void) + l_sql := "SELECT count(*) FROM " + a_table_name + " ;" + sql_query (l_sql, Void) Result := not has_error -- FIXME: find better solution - sql_finalize + sql_finalize_query (l_sql) reset_error end sql_table_items_count (a_table_name: READABLE_STRING_8): INTEGER_64 -- Number of items in table `a_table_name'? + local + l_sql: STRING do reset_error - sql_query ("SELECT count(*) FROM " + a_table_name + " ;", Void) + l_sql := "SELECT count(*) FROM " + a_table_name + " ;" + sql_query (l_sql, Void) if not has_error then Result := sql_read_integer_64 (1) end - sql_finalize + sql_finalize_query (l_sql) end feature -- Access diff --git a/src/service/cms_self_module_administration.e b/src/service/cms_self_module_administration.e new file mode 100644 index 0000000..fa657ed --- /dev/null +++ b/src/service/cms_self_module_administration.e @@ -0,0 +1,45 @@ +note + description: "Summary description for {CMS_SELF_MODULE_ADMINISTRATION}." + date: "$Date$" + revision: "$Revision$" + +class + CMS_SELF_MODULE_ADMINISTRATION [G -> CMS_MODULE] + +inherit + CMS_MODULE_ADMINISTRATION [G] + redefine + setup_hooks, + filters + end + +create + make + +feature -- Router + + setup_administration_router (a_router: WSF_ROUTER; a_api: CMS_API) + do + end + +feature -- Filter + + filters (a_api: CMS_API): detachable LIST [WSF_FILTER] + -- Optional list of filter for Current module. + -- (from CMS_MODULE) + do + Result := module.filters (a_api) + end + +feature -- Hooks configuration + + setup_hooks (a_hooks: CMS_HOOK_CORE_MANAGER) + -- Module hooks configuration. + do + module.setup_hooks (a_hooks) + end + +note + copyright: "2011-2017, Jocelyn Fiat, Javier Velilla, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" +end diff --git a/tests/all-safe.ecf b/tests/all-safe.ecf deleted file mode 100644 index 53fc8c4..0000000 --- a/tests/all-safe.ecf +++ /dev/null @@ -1,3 +0,0 @@ - - -