From ebc5924c01de3f1585c69c0e6e668ceb31c2dafb Mon Sep 17 00:00:00 2001 From: Jocelyn Fiat Date: Mon, 29 Jun 2015 16:24:17 +0200 Subject: [PATCH] Made CMS_MODULE.name deferred, and implemented by constant so that it can be use as static call. Copied site resources on related module source folder. Renamed "login" module as "auth" module, and updated related locations and files. --- examples/demo/modules/blog/cms_blog_module.e | 5 +- examples/demo/modules/demo/cms_demo_module.e | 5 +- .../{login/login.json => auth/auth.json} | 0 .../mail_templates/account_activation.html | 0 .../mail_templates/account_new_password.html | 0 .../mail_templates/account_re_activation.html | 0 .../mail_templates/account_welcome.html | 0 .../modules/{login => auth}/oauth2_gmail.json | 0 .../{login => auth}/templates/block_login.tpl | 0 .../templates/block_new_password.tpl | 0 .../templates/block_post_password.tpl | 0 .../templates/block_post_reactivate.tpl | 0 .../templates/block_post_register.tpl | 0 .../templates/block_post_reset.tpl | 0 .../templates/block_reactivate.tpl | 0 .../templates/block_register.tpl | 0 .../templates/block_reset_password.tpl | 0 license.lic | 3 + modules/auth/auth-safe.ecf | 8 +- ..._authentication_email_service_parameters.e | 4 +- modules/auth/cms_authentication_module.e | 8 +- modules/auth/site/auth.json | 8 + .../mail_templates/account_activation.html | 18 ++ .../mail_templates/account_new_password.html | 17 ++ .../mail_templates/account_re_activation.html | 18 ++ .../site/mail_templates/account_welcome.html | 13 + modules/auth/site/oauth2_gmail.json | 7 + modules/auth/site/templates/block_login.tpl | 34 +++ .../site/templates/block_new_password.tpl | 16 + .../site/templates/block_post_password.tpl | 3 + .../site/templates/block_post_reactivate.tpl | 3 + .../site/templates/block_post_register.tpl | 3 + .../auth/site/templates/block_post_reset.tpl | 3 + .../auth/site/templates/block_reactivate.tpl | 19 ++ .../auth/site/templates/block_register.tpl | 28 ++ .../site/templates/block_reset_password.tpl | 28 ++ modules/basic_auth/basic_auth_module.e | 5 +- modules/node/node_module.e | 5 +- modules/node/site/scripts/node.sql | 22 ++ .../cms_oauth_20_email_service_parameters.e | 8 +- modules/oauth20/cms_oauth_20_module.e | 5 +- modules/oauth20/oauth20-safe.ecf | 3 +- .../oauth20/site/scripts/oauth2_consumers.sql | 18 ++ .../scripts/oauth2_consumers_initialize.sql | 7 + .../oauth20/site/scripts/oauth2_table.sql.tpl | 10 + .../oauth20/site/templates/block_login.tpl | 7 + src/configuration/cms_default_setup.e | 5 + src/configuration/cms_setup.e | 6 + src/modules/cms_debug_module.e | 7 +- src/service/cms_api.e | 48 ++- src/service/cms_module.e | 5 + tools/roc/application.e | 281 ++++------------- tools/roc/license.lic | 3 + tools/roc/roc.ecf | 4 +- tools/roc/roc_command.e | 53 ++++ tools/roc/roc_install_command.e | 285 ++++++++++++++++++ 56 files changed, 789 insertions(+), 249 deletions(-) rename examples/demo/site/modules/{login/login.json => auth/auth.json} (100%) rename examples/demo/site/modules/{login => auth}/mail_templates/account_activation.html (100%) rename examples/demo/site/modules/{login => auth}/mail_templates/account_new_password.html (100%) rename examples/demo/site/modules/{login => auth}/mail_templates/account_re_activation.html (100%) rename examples/demo/site/modules/{login => auth}/mail_templates/account_welcome.html (100%) rename examples/demo/site/modules/{login => auth}/oauth2_gmail.json (100%) rename examples/demo/site/modules/{login => auth}/templates/block_login.tpl (100%) rename examples/demo/site/modules/{login => auth}/templates/block_new_password.tpl (100%) rename examples/demo/site/modules/{login => auth}/templates/block_post_password.tpl (100%) rename examples/demo/site/modules/{login => auth}/templates/block_post_reactivate.tpl (100%) rename examples/demo/site/modules/{login => auth}/templates/block_post_register.tpl (100%) rename examples/demo/site/modules/{login => auth}/templates/block_post_reset.tpl (100%) rename examples/demo/site/modules/{login => auth}/templates/block_reactivate.tpl (100%) rename examples/demo/site/modules/{login => auth}/templates/block_register.tpl (100%) rename examples/demo/site/modules/{login => auth}/templates/block_reset_password.tpl (100%) create mode 100644 license.lic create mode 100644 modules/auth/site/auth.json create mode 100644 modules/auth/site/mail_templates/account_activation.html create mode 100644 modules/auth/site/mail_templates/account_new_password.html create mode 100644 modules/auth/site/mail_templates/account_re_activation.html create mode 100644 modules/auth/site/mail_templates/account_welcome.html create mode 100644 modules/auth/site/oauth2_gmail.json create mode 100644 modules/auth/site/templates/block_login.tpl create mode 100644 modules/auth/site/templates/block_new_password.tpl create mode 100644 modules/auth/site/templates/block_post_password.tpl create mode 100644 modules/auth/site/templates/block_post_reactivate.tpl create mode 100644 modules/auth/site/templates/block_post_register.tpl create mode 100644 modules/auth/site/templates/block_post_reset.tpl create mode 100644 modules/auth/site/templates/block_reactivate.tpl create mode 100644 modules/auth/site/templates/block_register.tpl create mode 100644 modules/auth/site/templates/block_reset_password.tpl create mode 100644 modules/node/site/scripts/node.sql create mode 100644 modules/oauth20/site/scripts/oauth2_consumers.sql create mode 100644 modules/oauth20/site/scripts/oauth2_consumers_initialize.sql create mode 100644 modules/oauth20/site/scripts/oauth2_table.sql.tpl create mode 100644 modules/oauth20/site/templates/block_login.tpl create mode 100644 tools/roc/license.lic create mode 100644 tools/roc/roc_command.e create mode 100644 tools/roc/roc_install_command.e diff --git a/examples/demo/modules/blog/cms_blog_module.e b/examples/demo/modules/blog/cms_blog_module.e index 88db448..c44e93a 100644 --- a/examples/demo/modules/blog/cms_blog_module.e +++ b/examples/demo/modules/blog/cms_blog_module.e @@ -27,12 +27,15 @@ feature {NONE} -- Initialization make do - name := "Blog demo module" version := "1.0" description := "Service to demonstrate new node for blog" package := "demo" end +feature -- Access + + name: STRING = "blog" + feature {CMS_API} -- Module Initialization initialize (api: CMS_API) diff --git a/examples/demo/modules/demo/cms_demo_module.e b/examples/demo/modules/demo/cms_demo_module.e index 25ce7e0..25af681 100644 --- a/examples/demo/modules/demo/cms_demo_module.e +++ b/examples/demo/modules/demo/cms_demo_module.e @@ -27,12 +27,15 @@ feature {NONE} -- Initialization make do - name := "Demo module" version := "1.0" description := "Service to demonstrate and test cms system" package := "demo" end +feature -- Access + + name: STRING = "demo" + feature {CMS_API} -- Module Initialization initialize (api: CMS_API) diff --git a/examples/demo/site/modules/login/login.json b/examples/demo/site/modules/auth/auth.json similarity index 100% rename from examples/demo/site/modules/login/login.json rename to examples/demo/site/modules/auth/auth.json diff --git a/examples/demo/site/modules/login/mail_templates/account_activation.html b/examples/demo/site/modules/auth/mail_templates/account_activation.html similarity index 100% rename from examples/demo/site/modules/login/mail_templates/account_activation.html rename to examples/demo/site/modules/auth/mail_templates/account_activation.html diff --git a/examples/demo/site/modules/login/mail_templates/account_new_password.html b/examples/demo/site/modules/auth/mail_templates/account_new_password.html similarity index 100% rename from examples/demo/site/modules/login/mail_templates/account_new_password.html rename to examples/demo/site/modules/auth/mail_templates/account_new_password.html diff --git a/examples/demo/site/modules/login/mail_templates/account_re_activation.html b/examples/demo/site/modules/auth/mail_templates/account_re_activation.html similarity index 100% rename from examples/demo/site/modules/login/mail_templates/account_re_activation.html rename to examples/demo/site/modules/auth/mail_templates/account_re_activation.html diff --git a/examples/demo/site/modules/login/mail_templates/account_welcome.html b/examples/demo/site/modules/auth/mail_templates/account_welcome.html similarity index 100% rename from examples/demo/site/modules/login/mail_templates/account_welcome.html rename to examples/demo/site/modules/auth/mail_templates/account_welcome.html diff --git a/examples/demo/site/modules/login/oauth2_gmail.json b/examples/demo/site/modules/auth/oauth2_gmail.json similarity index 100% rename from examples/demo/site/modules/login/oauth2_gmail.json rename to examples/demo/site/modules/auth/oauth2_gmail.json diff --git a/examples/demo/site/modules/login/templates/block_login.tpl b/examples/demo/site/modules/auth/templates/block_login.tpl similarity index 100% rename from examples/demo/site/modules/login/templates/block_login.tpl rename to examples/demo/site/modules/auth/templates/block_login.tpl diff --git a/examples/demo/site/modules/login/templates/block_new_password.tpl b/examples/demo/site/modules/auth/templates/block_new_password.tpl similarity index 100% rename from examples/demo/site/modules/login/templates/block_new_password.tpl rename to examples/demo/site/modules/auth/templates/block_new_password.tpl diff --git a/examples/demo/site/modules/login/templates/block_post_password.tpl b/examples/demo/site/modules/auth/templates/block_post_password.tpl similarity index 100% rename from examples/demo/site/modules/login/templates/block_post_password.tpl rename to examples/demo/site/modules/auth/templates/block_post_password.tpl diff --git a/examples/demo/site/modules/login/templates/block_post_reactivate.tpl b/examples/demo/site/modules/auth/templates/block_post_reactivate.tpl similarity index 100% rename from examples/demo/site/modules/login/templates/block_post_reactivate.tpl rename to examples/demo/site/modules/auth/templates/block_post_reactivate.tpl diff --git a/examples/demo/site/modules/login/templates/block_post_register.tpl b/examples/demo/site/modules/auth/templates/block_post_register.tpl similarity index 100% rename from examples/demo/site/modules/login/templates/block_post_register.tpl rename to examples/demo/site/modules/auth/templates/block_post_register.tpl diff --git a/examples/demo/site/modules/login/templates/block_post_reset.tpl b/examples/demo/site/modules/auth/templates/block_post_reset.tpl similarity index 100% rename from examples/demo/site/modules/login/templates/block_post_reset.tpl rename to examples/demo/site/modules/auth/templates/block_post_reset.tpl diff --git a/examples/demo/site/modules/login/templates/block_reactivate.tpl b/examples/demo/site/modules/auth/templates/block_reactivate.tpl similarity index 100% rename from examples/demo/site/modules/login/templates/block_reactivate.tpl rename to examples/demo/site/modules/auth/templates/block_reactivate.tpl diff --git a/examples/demo/site/modules/login/templates/block_register.tpl b/examples/demo/site/modules/auth/templates/block_register.tpl similarity index 100% rename from examples/demo/site/modules/login/templates/block_register.tpl rename to examples/demo/site/modules/auth/templates/block_register.tpl diff --git a/examples/demo/site/modules/login/templates/block_reset_password.tpl b/examples/demo/site/modules/auth/templates/block_reset_password.tpl similarity index 100% rename from examples/demo/site/modules/login/templates/block_reset_password.tpl rename to examples/demo/site/modules/auth/templates/block_reset_password.tpl diff --git a/license.lic b/license.lic new file mode 100644 index 0000000..3e50931 --- /dev/null +++ b/license.lic @@ -0,0 +1,3 @@ +${NOTE_KEYWORD} + copyright: "2011-${YEAR}, Jocelyn Fiat, Javier Velilla, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" diff --git a/modules/auth/auth-safe.ecf b/modules/auth/auth-safe.ecf index ae9dfab..5824089 100644 --- a/modules/auth/auth-safe.ecf +++ b/modules/auth/auth-safe.ecf @@ -10,10 +10,10 @@ - - - - + + + + diff --git a/modules/auth/cms_authentication_email_service_parameters.e b/modules/auth/cms_authentication_email_service_parameters.e index 8e0d4ef..efb7b2a 100644 --- a/modules/auth/cms_authentication_email_service_parameters.e +++ b/modules/auth/cms_authentication_email_service_parameters.e @@ -31,7 +31,7 @@ feature {NONE} -- Initialization admin_email := l_site_name + " <" + admin_email +">" end - if attached {CONFIG_READER} a_cms_api.module_configuration_by_name ("login", Void) as cfg then + if attached {CONFIG_READER} a_cms_api.module_configuration_by_name ({CMS_AUTHENTICATION_MODULE}.name, Void) as cfg then if attached cfg.text_item ("smtp") as l_smtp then -- Overwrite global smtp setting if any. smtp_server := utf.utf_32_string_to_utf_8_string_8 (l_smtp) @@ -138,7 +138,7 @@ feature {NONE} -- Implementation: Template p: PATH do create p.make_from_string (a_name) - Result := cms_api.module_location_by_name ("login").extended ("mail_templates").extended (a_name) + Result := cms_api.module_location_by_name ({CMS_AUTHENTICATION_MODULE}.name).extended ("mail_templates").extended (a_name) end template_string (a_name: READABLE_STRING_GENERAL; a_default: STRING): STRING diff --git a/modules/auth/cms_authentication_module.e b/modules/auth/cms_authentication_module.e index 3dabcd6..dcd0768 100644 --- a/modules/auth/cms_authentication_module.e +++ b/modules/auth/cms_authentication_module.e @@ -8,12 +8,10 @@ class inherit CMS_MODULE - redefine register_hooks end - CMS_HOOK_BLOCK CMS_HOOK_AUTO_REGISTER @@ -33,7 +31,6 @@ inherit CMS_REQUEST_UTIL - create make @@ -42,7 +39,6 @@ feature {NONE} -- Initialization make -- Create current module do - name := "login" version := "1.0" description := "Authentication module" package := "authentication" @@ -51,6 +47,10 @@ feature {NONE} -- Initialization cache_duration := 0 end +feature -- Access + + name: STRING = "auth" + feature -- Access: docs root_dir: PATH diff --git a/modules/auth/site/auth.json b/modules/auth/site/auth.json new file mode 100644 index 0000000..2f3e155 --- /dev/null +++ b/modules/auth/site/auth.json @@ -0,0 +1,8 @@ +{ + "email": "webmaster@example.com", + "subjet_register": "Thank you for regitering with us, activate account", + "subjet_activate": "New account ativation token", + "subjet_password": "Password Recovery!!!", + "subjet_oauth": "Welcome", + "smtp": "127.0.0.1" +} diff --git a/modules/auth/site/mail_templates/account_activation.html b/modules/auth/site/mail_templates/account_activation.html new file mode 100644 index 0000000..0ab4c4f --- /dev/null +++ b/modules/auth/site/mail_templates/account_activation.html @@ -0,0 +1,18 @@ + + + + + Activation + + + + + +

Thank you for registering at ROC CMS

+ +

To complete your registration, please click on this link to activate your account:

+ +

$link

+

Thank you for joining us.

+ + diff --git a/modules/auth/site/mail_templates/account_new_password.html b/modules/auth/site/mail_templates/account_new_password.html new file mode 100644 index 0000000..dfcd355 --- /dev/null +++ b/modules/auth/site/mail_templates/account_new_password.html @@ -0,0 +1,17 @@ + + + + + New Password + + + + + +

You have required a new password at ROC CMS

+ +

To complete your request, please click on this link to genereate a new password:

+ +

$link

+ + \ No newline at end of file diff --git a/modules/auth/site/mail_templates/account_re_activation.html b/modules/auth/site/mail_templates/account_re_activation.html new file mode 100644 index 0000000..95aebb2 --- /dev/null +++ b/modules/auth/site/mail_templates/account_re_activation.html @@ -0,0 +1,18 @@ + + + + + New Activation + + + + + +

You have request a new activation token atROC CMS

+ +

To complete your registration, please click on this link to activate your account:

+ +

$link

+

Thank you for joining us.

+ + \ No newline at end of file diff --git a/modules/auth/site/mail_templates/account_welcome.html b/modules/auth/site/mail_templates/account_welcome.html new file mode 100644 index 0000000..0ea987c --- /dev/null +++ b/modules/auth/site/mail_templates/account_welcome.html @@ -0,0 +1,13 @@ + + + + + Welcome + + + + +

Welcome toROC CMS

+

Thank you for joining us.

+ + \ No newline at end of file diff --git a/modules/auth/site/oauth2_gmail.json b/modules/auth/site/oauth2_gmail.json new file mode 100644 index 0000000..8cd35ef --- /dev/null +++ b/modules/auth/site/oauth2_gmail.json @@ -0,0 +1,7 @@ +{ + "api_secret":"ADD_YOUR_SECRET_KEY", + "api_key":"ADD_YOUR_PUBLIC_KEY", + "scope": "email", + "api_revoke":"https://accounts.google.com/o/oauth2/revoke?token=$ACCESS_TOKEN", + "protected_resource_url":"https://www.googleapis.com/plus/v1/people/me" +} diff --git a/modules/auth/site/templates/block_login.tpl b/modules/auth/site/templates/block_login.tpl new file mode 100644 index 0000000..0549b24 --- /dev/null +++ b/modules/auth/site/templates/block_login.tpl @@ -0,0 +1,34 @@ +
+ {unless isset="$user"} +

Login or Register

+
+
+
+
+ + +
+ +
+ + +
+ + +
+
+
+
+ +
+
+ {foreach item="item" from="$oauth_consumers"} + Login with {$item/}
+ {/foreach} +
+ {/unless} +
diff --git a/modules/auth/site/templates/block_new_password.tpl b/modules/auth/site/templates/block_new_password.tpl new file mode 100644 index 0000000..ef5407f --- /dev/null +++ b/modules/auth/site/templates/block_new_password.tpl @@ -0,0 +1,16 @@ +
+
+
+ Require new password +
+ + + {if isset="$error_email"} + {$error_email/}
+ {/if} +
+
+ +
+
+
diff --git a/modules/auth/site/templates/block_post_password.tpl b/modules/auth/site/templates/block_post_password.tpl new file mode 100644 index 0000000..0ec7a7c --- /dev/null +++ b/modules/auth/site/templates/block_post_password.tpl @@ -0,0 +1,3 @@ +
+

We have send you a new token code, check your email to generate a new password

+
diff --git a/modules/auth/site/templates/block_post_reactivate.tpl b/modules/auth/site/templates/block_post_reactivate.tpl new file mode 100644 index 0000000..09e7206 --- /dev/null +++ b/modules/auth/site/templates/block_post_reactivate.tpl @@ -0,0 +1,3 @@ +
+

We have send you a new activation code, check your email to activate your account.

+
diff --git a/modules/auth/site/templates/block_post_register.tpl b/modules/auth/site/templates/block_post_register.tpl new file mode 100644 index 0000000..d59f75a --- /dev/null +++ b/modules/auth/site/templates/block_post_register.tpl @@ -0,0 +1,3 @@ +
+

Thanks for register, check your email to activate your account.

+
diff --git a/modules/auth/site/templates/block_post_reset.tpl b/modules/auth/site/templates/block_post_reset.tpl new file mode 100644 index 0000000..9ccecfb --- /dev/null +++ b/modules/auth/site/templates/block_post_reset.tpl @@ -0,0 +1,3 @@ +
+

You new password has been saved!

+
diff --git a/modules/auth/site/templates/block_reactivate.tpl b/modules/auth/site/templates/block_reactivate.tpl new file mode 100644 index 0000000..bef65c0 --- /dev/null +++ b/modules/auth/site/templates/block_reactivate.tpl @@ -0,0 +1,19 @@ +
+
+
+ Reactivate Form +
+ + + {if isset="$error_email"} + {$error_email/}
+ {/if} +
+ {if isset="$is_active"} + {$is_active/}
+ {/if} +
+ +
+
+
diff --git a/modules/auth/site/templates/block_register.tpl b/modules/auth/site/templates/block_register.tpl new file mode 100644 index 0000000..58a4872 --- /dev/null +++ b/modules/auth/site/templates/block_register.tpl @@ -0,0 +1,28 @@ +
+
+
+ Register Form +
+ + + {if isset="$error_name"} + {$error_name/}
+ {/if} +
+
+ + +
+
+ + + {if isset="$error_email"} + {$error_email/}
+ {/if} +
+ + + +
+
+
diff --git a/modules/auth/site/templates/block_reset_password.tpl b/modules/auth/site/templates/block_reset_password.tpl new file mode 100644 index 0000000..b99289d --- /dev/null +++ b/modules/auth/site/templates/block_reset_password.tpl @@ -0,0 +1,28 @@ +
+
+
+ Generate New Password Form +
+ + + {if isset="$error_token"} + {$error_token/}
+ {/if} +
+
+ + +
+
+ + +
+ + + {if isset="$error_password"} + {$error_password/}
+ {/if} + +
+
+
diff --git a/modules/basic_auth/basic_auth_module.e b/modules/basic_auth/basic_auth_module.e index 0d9d649..cc1069f 100644 --- a/modules/basic_auth/basic_auth_module.e +++ b/modules/basic_auth/basic_auth_module.e @@ -29,12 +29,15 @@ feature {NONE} -- Initialization make do - name := "basic auth" version := "1.0" description := "Service to manage basic authentication" package := "core" end +feature -- Access + + name: STRING = "basic_auth" + feature -- Access: router setup_router (a_router: WSF_ROUTER; a_api: CMS_API) diff --git a/modules/node/node_module.e b/modules/node/node_module.e index 397ac7b..0f31f86 100644 --- a/modules/node/node_module.e +++ b/modules/node/node_module.e @@ -29,7 +29,6 @@ feature {NONE} -- Initialization make (a_setup: CMS_SETUP) -- Create Current module, disabled by default. do - name := "node" version := "1.0" description := "Service to manage content based on 'node'" package := "core" @@ -39,6 +38,10 @@ feature {NONE} -- Initialization config: CMS_SETUP -- Node configuration. +feature -- Access + + name: STRING = "node" + feature {CMS_API} -- Module Initialization initialize (a_api: CMS_API) diff --git a/modules/node/site/scripts/node.sql b/modules/node/site/scripts/node.sql new file mode 100644 index 0000000..43078f9 --- /dev/null +++ b/modules/node/site/scripts/node.sql @@ -0,0 +1,22 @@ + +CREATE TABLE nodes ( + `nid` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT UNIQUE, + `revision` INTEGER, + `type` TEXT NOT NULL, + `title` VARCHAR(255) NOT NULL, + `summary` TEXT, + `content` TEXT, + `format` VARCHAR(128), + `author` INTEGER, + `publish` DATETIME, + `created` DATETIME NOT NULL, + `changed` DATETIME NOT NULL, + `status` INTEGER +); + +CREATE TABLE page_nodes( + `nid` INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, + `revision` INTEGER, + `parent` INTEGER +); + diff --git a/modules/oauth20/cms_oauth_20_email_service_parameters.e b/modules/oauth20/cms_oauth_20_email_service_parameters.e index c8657f4..824d905 100644 --- a/modules/oauth20/cms_oauth_20_email_service_parameters.e +++ b/modules/oauth20/cms_oauth_20_email_service_parameters.e @@ -21,7 +21,7 @@ feature {NONE} -- Initialization s: detachable READABLE_STRING_32 l_contact_email, l_subject_register, l_subject_activate, l_subject_password, l_subject_oauth: detachable READABLE_STRING_8 do - setup := a_cms_api.setup + cms_api := a_cms_api -- Use global smtp setting if any, otherwise "localhost" smtp_server := utf.escaped_utf_32_string_to_utf_8_string_8 (a_cms_api.setup.text_item_or_default ("smtp", "localhost")) l_site_name := utf.escaped_utf_32_string_to_utf_8_string_8 (a_cms_api.setup.site_name) @@ -31,7 +31,7 @@ feature {NONE} -- Initialization admin_email := l_site_name + " <" + admin_email +">" end - if attached {CONFIG_READER} a_cms_api.module_configuration_by_name ("login", Void) as cfg then + if attached {CONFIG_READER} a_cms_api.module_configuration_by_name ({CMS_AUTHENTICATION_MODULE}.name, Void) as cfg then if attached cfg.text_item ("smtp") as l_smtp then -- Overwrite global smtp setting if any. smtp_server := utf.utf_32_string_to_utf_8_string_8 (l_smtp) @@ -133,7 +133,7 @@ feature {NONE} -- Implementation: Template template_path (a_name: READABLE_STRING_GENERAL): PATH -- Location of template named `a_name'. do - Result := setup.environment.config_path.extended ("modules").extended ("login").extended (a_name) + Result := cms_api.module_location_by_name ({CMS_AUTHENTICATION_MODULE}.name).extended (a_name) end template_string (a_name: READABLE_STRING_GENERAL; a_default: STRING): STRING @@ -151,7 +151,7 @@ feature {NONE} -- Implementation: Template feature {NONE} -- Implementation - setup: CMS_SETUP + cms_api: CMS_API read_template_file (a_path: PATH): detachable STRING -- Read the content of the file at path `a_path'. diff --git a/modules/oauth20/cms_oauth_20_module.e b/modules/oauth20/cms_oauth_20_module.e index c18a4b4..dd3d0d9 100644 --- a/modules/oauth20/cms_oauth_20_module.e +++ b/modules/oauth20/cms_oauth_20_module.e @@ -47,7 +47,6 @@ feature {NONE} -- Initialization make -- Create current module do - name := "oauth20" version := "1.0" description := "OAuth20 module" package := "Oauth20" @@ -56,6 +55,10 @@ feature {NONE} -- Initialization cache_duration := 0 end +feature -- Access + + name: STRING = "oauth20" + feature {CMS_API} -- Module Initialization initialize (a_api: CMS_API) diff --git a/modules/oauth20/oauth20-safe.ecf b/modules/oauth20/oauth20-safe.ecf index 233bdd8..76e5d31 100644 --- a/modules/oauth20/oauth20-safe.ecf +++ b/modules/oauth20/oauth20-safe.ecf @@ -1,5 +1,5 @@ - + @@ -12,6 +12,7 @@ + diff --git a/modules/oauth20/site/scripts/oauth2_consumers.sql b/modules/oauth20/site/scripts/oauth2_consumers.sql new file mode 100644 index 0000000..1c7eea6 --- /dev/null +++ b/modules/oauth20/site/scripts/oauth2_consumers.sql @@ -0,0 +1,18 @@ + +CREATE TABLE oauth2_consumers( + `cid` INTEGER PRIMARY KEY NOT NULL CHECK(`cid`>=0), + `name` VARCHAR(255) NOT NULL, + `api_secret` TEXT NOT NULL, + `api_key` TEXT NOT NULL, + `scope` VARCHAR (100) NOT NULL, + `protected_resource_url` VARCHAR (255) NOT NULL, + `callback_name` VARCHAR(255) NOT NULL, + `extractor` VARCHAR(50) NOT NULL, + `authorize_url` VARCHAR (255) NOT NULL, + `endpoint` VARCHAR (255) NOT NULL, + CONSTRAINT `cid` + UNIQUE(`cid`), + CONSTRAINT `name` + UNIQUE(`name`) + ); + diff --git a/modules/oauth20/site/scripts/oauth2_consumers_initialize.sql b/modules/oauth20/site/scripts/oauth2_consumers_initialize.sql new file mode 100644 index 0000000..a600e71 --- /dev/null +++ b/modules/oauth20/site/scripts/oauth2_consumers_initialize.sql @@ -0,0 +1,7 @@ + -- Change the values TO_COMPLETE based on your API. + -- API SECTET KEY AND API PUBLIC KEY +INSERT INTO oauth2_consumers (name, api_secret, api_key, scope, protected_resource_url, callback_name, extractor, authorize_url, endpoint) +VALUES ('google', 'TO-COMPLETE', 'TO-COMPLETE', 'email', 'https://www.googleapis.com/plus/v1/people/me', 'callback_google', 'json','https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=$CLIENT_ID&redirect_uri=$REDIRECT_URI','https://accounts.google.com/o/oauth2/token'); + +INSERT INTO oauth2_consumers (name, api_secret, api_key, scope, protected_resource_url, callback_name, extractor, authorize_url, endpoint ) +VALUES ('facebook', 'TO-COMPLETE', 'TO-COMPLETE', 'email', 'https://graph.facebook.com/me', 'callback_facebook','text','https://www.facebook.com/dialog/oauth?response_type=code&client_id=$CLIENT_ID&redirect_uri=$REDIRECT_URI','https://graph.facebook.com/oauth/access_token'); diff --git a/modules/oauth20/site/scripts/oauth2_table.sql.tpl b/modules/oauth20/site/scripts/oauth2_table.sql.tpl new file mode 100644 index 0000000..3471b1f --- /dev/null +++ b/modules/oauth20/site/scripts/oauth2_table.sql.tpl @@ -0,0 +1,10 @@ + +CREATE TABLE $table_name ( + `uid` INTEGER PRIMARY KEY NOT NULL CHECK(`uid`>=0), + `access_token` TEXT NOT NULL, + `created` DATETIME NOT NULL, + `details` TEXT NOT NULL, + CONSTRAINT `uid` + UNIQUE(`uid`) + ); + diff --git a/modules/oauth20/site/templates/block_login.tpl b/modules/oauth20/site/templates/block_login.tpl new file mode 100644 index 0000000..44c7bd4 --- /dev/null +++ b/modules/oauth20/site/templates/block_login.tpl @@ -0,0 +1,7 @@ +
+
+ {foreach item="item" from="$oauth_consumers"} + Login with {$item/}
+ {/foreach} +
+
diff --git a/src/configuration/cms_default_setup.e b/src/configuration/cms_default_setup.e index 1bf8f6a..9f3b42e 100644 --- a/src/configuration/cms_default_setup.e +++ b/src/configuration/cms_default_setup.e @@ -42,6 +42,8 @@ feature {NONE} -- Initialization local l_url: like site_url do + site_location := environment.path + --| Site id, used to identified a site, this could be set to a uuid, or else site_id := text_item_or_default ("site.id", "_EWF_CMS_NO_ID_") @@ -169,4 +171,7 @@ feature -- Theme: Compute location theme_location := themes_location.extended (theme_name) end +note + copyright: "2011-2015, 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/src/configuration/cms_setup.e b/src/configuration/cms_setup.e index 7537e47..cfe7584 100644 --- a/src/configuration/cms_setup.e +++ b/src/configuration/cms_setup.e @@ -92,6 +92,9 @@ feature -- Query feature -- Access: Theme + site_location: PATH + -- Path to CMS site root dir. + modules_location: PATH -- Path to modules. @@ -186,4 +189,7 @@ feature -- Element change module_registered: module_registered (m) end +note + copyright: "2011-2015, 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/src/modules/cms_debug_module.e b/src/modules/cms_debug_module.e index 3a25a35..b0938c7 100644 --- a/src/modules/cms_debug_module.e +++ b/src/modules/cms_debug_module.e @@ -28,12 +28,15 @@ feature {NONE} -- Initialization make do - name := "debug" version := "1.0" description := "Debug" package := "cms" end +feature -- Access + + name: STRING = "debug" + feature -- Router setup_router (a_router: WSF_ROUTER; a_api: CMS_API) @@ -134,7 +137,7 @@ feature -- Handler end note - copyright: "Copyright (c) 1984-2013, Eiffel Software and others" + copyright: "2011-2015, Jocelyn Fiat, Javier Velilla, Eiffel Software and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" source: "[ Eiffel Software diff --git a/src/service/cms_api.e b/src/service/cms_api.e index 697c5d0..0933765 100644 --- a/src/service/cms_api.e +++ b/src/service/cms_api.e @@ -319,6 +319,12 @@ feature {NONE}-- Implemenation feature -- Environment/ theme + site_location: PATH + -- CMS site location. + do + Result := setup.site_location + end + theme_location: PATH -- Active theme location. do @@ -349,6 +355,7 @@ feature -- Environment/ module else l_name := a_name end + p := setup.environment.config_path p := module_location_by_name (a_module_name).extended ("config").extended (l_name) @@ -393,7 +400,14 @@ feature -- Environment/ module -- Location of resource `a_resource' for `a_module'. do --| site/modules/$modname/$a_name.json - Result := module_location (a_module).extended_path (a_resource) + Result := module_resource_location_by_name (a_module.name, a_resource) + end + + module_resource_location_by_name (a_module_name: READABLE_STRING_GENERAL; a_resource: PATH): PATH + -- Location of resource `a_resource' for `a_module'. + do + --| site/modules/$modname/$a_name.json + Result := module_location_by_name (a_module_name).extended_path (a_resource) end feature -- Environment/ modules and theme @@ -419,10 +433,37 @@ feature -- Environment/ modules and theme end end + module_theme_resource_location_by_name (a_module_name: READABLE_STRING_GENERAL; a_resource: PATH): detachable PATH + -- Theme resource location of `a_resource' for module named `a_module_name', if exists. + -- By default, located under the module location folder, but could be overriden + -- from files located under modules subfolder of active `theme_location'. + --| First search in themes/$theme/modules/$a_module.name/$a_resource, + --| and if not found then search in + --| modules/$a_module_name/$a_resource. + local + ut: FILE_UTILITIES + do + -- Check first in selected theme folder. + Result := module_theme_location_by_name (a_module_name).extended_path (a_resource) + if not ut.file_path_exists (Result) then + -- And if not found, look into site/modules/$a_module.name/.... folders. + Result := module_resource_location_by_name (a_module_name, a_resource) + if not ut.file_path_exists (Result) then + Result := Void + end + end + end + module_theme_location (a_module: CMS_MODULE): PATH -- Location for overriden files associated with `a_module_name'. do - Result := theme_location.extended ("modules").extended (a_module.name) + Result := module_theme_location_by_name (a_module.name) + end + + module_theme_location_by_name (a_module_name: READABLE_STRING_GENERAL): PATH + -- Location for overriden files associated with `a_module_name'. + do + Result := theme_location.extended ("modules").extended (a_module_name) end module_configuration (a_module: CMS_MODULE; a_name: detachable READABLE_STRING_GENERAL): detachable CONFIG_READER @@ -430,5 +471,8 @@ feature -- Environment/ modules and theme Result := module_configuration_by_name (a_module.name, a_name) end +note + copyright: "2011-2015, 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/src/service/cms_module.e b/src/service/cms_module.e index 1988de0..0c46a25 100644 --- a/src/service/cms_module.e +++ b/src/service/cms_module.e @@ -16,6 +16,8 @@ feature -- Access name: STRING -- Name of the module. + deferred + end description: STRING -- Description of the module. @@ -132,4 +134,7 @@ feature -- Hooks create Result.make_empty end +note + copyright: "2011-2015, 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/tools/roc/application.e b/tools/roc/application.e index 2e18c36..d6bf2df 100644 --- a/tools/roc/application.e +++ b/tools/roc/application.e @@ -14,7 +14,7 @@ note scripts themes running - roc instal blog + roc install blog will look for a module blog in the modules directory starting at the current directory. ]" date: "$Date$" @@ -26,8 +26,20 @@ class inherit SHARED_EXECUTION_ENVIRONMENT + rename + print as ascii_print + end - ARGUMENTS + ARGUMENTS_32 + rename + print as ascii_print + end + + LOCALIZED_PRINTER + rename + print as ascii_print, + localized_print as print + end create make @@ -36,252 +48,75 @@ feature {NONE} -- Initialization make -- Initialize tool. + local + cmd_args: like command_arguments do -- TODO add support to other commands. if argument_count = 0 then - print ("Use: roc install [--module|-m ] [(--dir|-d ) | ]") - elseif argument (1).starts_with ("install") then - execute_install - else - print ("Wrong command") - print ("%NUse: roc install [--module|-m ] -cap ") - end - end - -feature {NONE} -- Install - - execute_install - -- Install a new module. - local - i: INTEGER - error: BOOLEAN - optional_module: BOOLEAN - cms_path: BOOLEAN - do - if is_valid_install_cmd then - do_execute_install - end - end - - do_execute_install - -- Install a module into a cms application. - -- Pattern - -- app/site/modules/module_name/config/.... - -- app/site/modules/module_name/scripts/.... - -- app/site/modules/module_name/themes/.... - local - l_module_path: PATH - l_config: PATH - l_site_dir: DIRECTORY - l_modules_dir: DIRECTORY - l_dest_dir: DIRECTORY - l_file: FILE - do - if attached install_cms_path as l_cms_path then - l_module_path := install_module_path - --Install configuration files. - if attached l_module_path.entry as l_entry then - create l_site_dir.make_with_path (l_cms_path.extended ("site")) - create l_modules_dir.make_with_path (l_cms_path.extended ("site").extended ("modules")) - - if - l_site_dir.exists and then - l_modules_dir.exists - then - create l_dest_dir.make_with_path (l_cms_path.extended ("site").extended ("modules").extended (l_entry.name)) - if not l_dest_dir.exists then - l_dest_dir.create_dir - end - install_module_elements (l_module_path, l_dest_dir.path, Config_dir) - install_module_elements (l_module_path, l_dest_dir.path, Scripts_dir) - install_module_elements (l_module_path, l_dest_dir.path, Themes_dir) - print ("Module ") - print ( l_entry) - print ( " was successfuly installed to the cms Application located ") - print (l_cms_path.name) - print ("%NCheck the module elements at ") - print (l_dest_dir.path.name) - else - print ("The CMS Application located at does not have the site or modules folders") - end + print_usage + elseif attached commands.item (argument (1)) as cmd then + cmd_args := command_arguments + if cmd.is_valid (cmd_args) then + cmd.execute (cmd_args) else - print ("Error not possible to retrieve module name.") + print_command_usage (cmd) end else - print ("%NWrong path to CMS application") + print ("Wrong command %"" + argument (1) + "%".%N") + print_usage end end - install_module_elements (a_module_path: PATH; a_cms_path: PATH; a_element: STRING) - -- Install module configuration files from `a_module_path' to cms application `a_cms_path' to the element `a_element'. + commands: STRING_TABLE [ROC_COMMAND] local - l_config: PATH - l_dest_dir: DIRECTORY - l_src_dir: DIRECTORY - l_file: FILE - do - if attached a_module_path.entry as l_entry then - l_config := a_module_path.extended ("site").extended (a_element) - - create l_src_dir.make_with_path (l_config) - -- Create the element - create l_dest_dir.make_with_path (a_cms_path.extended(a_element)) - if not l_dest_dir.exists then - l_dest_dir.create_dir - end - copy_elements (l_src_dir, l_dest_dir) - else - print ("Error not possible to retrieve module name.") - end + cmd: ROC_COMMAND + once + create Result.make (1) + create {ROC_INSTALL_COMMAND} cmd.make ("install") + Result.force (cmd, cmd.name) end - - copy_elements (a_src_dir: DIRECTORY; a_dest_dir: DIRECTORY) - -- Copy all elements from a_src_dir to a_dest_dir. + command_arguments: ARRAY [READABLE_STRING_32] local - l_dir: DIRECTORY - l_new_dir: DIRECTORY - entry: PATH - l_file: FILE + i,n: INTEGER do - across - a_src_dir.entries as ic + create Result.make_empty + Result.rebase (0) + Result.force (argument (0), 0) + from + i := 2 -- skip first arg which is command name + n := argument_count + until + i > n loop - entry := ic.item - if not (entry.is_current_symbol or else entry.is_parent_symbol) then - create {RAW_FILE} l_file.make_with_path (a_src_dir.path.extended_path (ic.item)) - if not l_file.is_directory then - copy_file (l_file, a_dest_dir.path) - else - create l_dir.make_with_path (a_src_dir.path.extended_path (entry)) - create l_new_dir.make_with_path (a_dest_dir.path.extended_path (entry)) - if not l_new_dir.exists then - l_new_dir.create_dir - end - if l_dir.exists then - copy_elements (l_dir, l_new_dir) - end - end - end + Result.force (argument (i), i - 1) + i := i + 1 end end +feature -- Usage -feature {NONE} -- Copy File - - copy_file (a_file: FILE; a_dir: PATH) - --Copy file `a_file' to dir `a_dir'. - local - l_dest: RAW_FILE - l_path: PATH + print_usage do - if attached a_file.path.entry as l_name then - l_path := a_dir.absolute_path.extended (l_name.name) - create l_dest.make_with_path (l_path) - l_dest.create_read_write - a_file.open_read - -- Copy file source to destination - if l_dest.exists and then l_dest.is_writable and then a_file.exists and then a_file.is_readable then - a_file.copy_to (l_dest) - a_file.close - l_dest.close - end - else + print ("Usage:%N") + across + commands as ic + loop + print_command_usage (ic.item) end end -feature {NONE} -- Command Validator - - install_module_path: PATH - -- Path to the module to install. + print_command_usage (cmd: ROC_COMMAND) do - if attached separate_word_option_value ("m") as l_m then - create Result.make_from_string (l_m) - elseif attached separate_word_option_value ("-module") as l_m then - create Result.make_from_string (l_m) - else - Result := Execution_environment.current_working_path - end + print ("roc ") + print (cmd.name) + print (" ") + print (cmd.help) + print ("%N") end - install_cms_path: PATH - -- Path to the cms application to install a module. - local - l_dir: DIRECTORY - do - if attached separate_word_option_value ("d") as l_m then - create Result.make_from_string (l_m) - elseif attached separate_word_option_value ("-dir") as l_m then - create Result.make_from_string (l_m) - else - Result := Execution_environment.current_working_path.extended ("modules") - end - end - - is_valid_install_cmd: BOOLEAN - -- Is the submitted install command valid? - -- install [--module|-m %MODULE_PATH%] -cap %CMS_PATH% - local - i: INTEGER - error: BOOLEAN - optional_module: BOOLEAN - cms_path: BOOLEAN - do - -- TODO add error reporting. - if argument_count >= 2 and then argument_count <= 5 then - from - i := 2 - until - i > argument_count - loop - if option_word_equal (argument (i), "m") then - optional_module := True - elseif option_word_equal (argument (i), "-module") then - optional_module := True - elseif option_word_equal (argument (i), "d") then - cms_path := True - elseif option_word_equal (argument (i), "-dir") then - cms_path := True - end - i := i + 1 - end - if argument_count = 5 then - if (cms_path and optional_module) then - -- valid command - Result := True - else - print ("Error check the optional argument --module|-m and --dir|-d") - end - elseif argument_count = 3 then - if (cms_path and not optional_module) then - Result := True - else - print ("Error missing value for dir") - Result := False - end - else - Result := True - end - else - Result := False - if argument_count > 5 then - print ("Too many arguments") - end - if argument_count < 2 then - print ("Too few argumetns") - end - end - end - -feature -- Constants - - Config_dir: STRING = "config" - -- Configuration dir. - - Scripts_dir: STRING = "scripts" - -- Scripts dir. - - Themes_dir: STRING = "themes" - -- Themes dir. +note + copyright: "2011-2015, 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/tools/roc/license.lic b/tools/roc/license.lic new file mode 100644 index 0000000..3e50931 --- /dev/null +++ b/tools/roc/license.lic @@ -0,0 +1,3 @@ +${NOTE_KEYWORD} + copyright: "2011-${YEAR}, Jocelyn Fiat, Javier Velilla, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" diff --git a/tools/roc/roc.ecf b/tools/roc/roc.ecf index 33a4fad..e38b269 100644 --- a/tools/roc/roc.ecf +++ b/tools/roc/roc.ecf @@ -1,13 +1,13 @@ - + - + /EIFGENs$ diff --git a/tools/roc/roc_command.e b/tools/roc/roc_command.e new file mode 100644 index 0000000..28c3c81 --- /dev/null +++ b/tools/roc/roc_command.e @@ -0,0 +1,53 @@ +note + description: "Abstraction of roc command." + date: "$Date$" + revision: "$Revision$" + +deferred class + ROC_COMMAND + +inherit + SHARED_EXECUTION_ENVIRONMENT + rename + print as ascii_print + end + + LOCALIZED_PRINTER + rename + print as ascii_print, + localized_print as print + end + +feature {NONE} -- Initialization + + make (a_name: READABLE_STRING_8) + do + create name.make_from_string (a_name) + end + +feature -- Access + + name: IMMUTABLE_STRING_8 + + help: STRING_32 + deferred + end + +feature -- Status report + + is_valid (args: ARRAY [READABLE_STRING_32]): BOOLEAN + deferred + end + +feature -- Execution + + execute (args: ARRAY [READABLE_STRING_32]) + require + args.lower = 0 -- Prog name at index 0, args at index 1, ... + deferred + end + +note + copyright: "2011-2015, 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/tools/roc/roc_install_command.e b/tools/roc/roc_install_command.e new file mode 100644 index 0000000..df15f07 --- /dev/null +++ b/tools/roc/roc_install_command.e @@ -0,0 +1,285 @@ +note + description: "Installation command." + date: "$Date$" + revision: "$Revision$" + +class + ROC_INSTALL_COMMAND + +inherit + ROC_COMMAND + +create + make + +feature -- Access + + help: STRING_32 + once + Result := "[--module|-m ] [(--dir|-d ) | ] [--site-dir ]" + end + +feature -- Status report + + is_valid (args: ARRAY [READABLE_STRING_32]): BOOLEAN + -- Is the submitted install command valid? + local + i, n: INTEGER + optional_module: BOOLEAN + cms_path: BOOLEAN + do + n := args.upper + -- TODO add error reporting. + if n >= 1 and then n <= 4 then + from + i := 1 + until + i > n + loop + if args [i].same_string ("-m") then + optional_module := True + elseif args [i].same_string ("--module") then + optional_module := True + elseif args [i].same_string ("-d") then + cms_path := True + elseif args [i].same_string ("--dir") then + cms_path := True + end + i := i + 1 + end + if n = 4 then + if (cms_path and optional_module) then + -- valid command + Result := True + else + print ("Error check the optional argument --module|-m and --dir|-d") + end + elseif n = 2 then + if (cms_path and not optional_module) then + Result := True + else + print ("Error missing value for dir") + Result := False + end + else + Result := True + end + else + Result := False + if n > 4 then + print ("Too many arguments") + end + if n < 1 then + print ("Too few argumetns") + end + end + end + +feature -- Helpers + + module_name (a_path: PATH): STRING_32 + do + -- FIXME: better implementation needed. Either based on "a" new module.info file, or parsing the .ecf + if attached a_path.entry as e then + Result := e.name + else + Result := a_path.name + end + end + +feature -- Execution + + execute (args: ARRAY [READABLE_STRING_32]) + -- Install a module into a cms application. + -- Pattern: module_src/site/* => cms/site/modules/$module_name/* + local + l_site_path, l_cms_path, l_module_source_path: detachable PATH + l_site_dir: DIRECTORY + l_modules_dir: DIRECTORY + l_dest_dir: DIRECTORY + i,n: INTEGER + do + from + i := 1 + n := args.upper + until + i > n + loop + if attached args[i] as arg then + if + arg.same_string ("-d") + or arg.same_string ("--dir") + then + i := i + 1 + if i <= n then + create l_cms_path.make_from_string (args[i]) + end + elseif + arg.same_string ("--site-dir") + then + i := i + 1 + if i <= n then + create l_site_path.make_from_string (args[i]) + end + elseif + arg.same_string ("-m") + or arg.same_string ("--module") + then + i := i + 1 + if i <= n then + create l_module_source_path.make_from_string (args[i]) + end + end + end + i := i + 1 + end + if l_module_source_path = Void then + l_module_source_path := Execution_environment.current_working_path + end + if l_cms_path = Void then + l_cms_path := Execution_environment.current_working_path.extended ("modules") + end + if l_cms_path /= Void and l_module_source_path /= Void then + -- If l_site_path is not set; initialize it to $cms_path/site. + if l_site_path = Void then + l_site_path := l_cms_path.extended ("site") + end + + -- Install configuration files. + if attached module_name (l_module_source_path) as l_mod_name then + create l_site_dir.make_with_path (l_site_path) + + if l_site_dir.exists then + create l_modules_dir.make_with_path (l_site_path.extended ("modules")) + if not l_modules_dir.exists then + l_modules_dir.create_dir + end + + create l_dest_dir.make_with_path (l_modules_dir.path.extended (l_mod_name)) + if not l_dest_dir.exists then + l_dest_dir.create_dir + end + install_module_elements (l_module_source_path, l_dest_dir.path, Void) +-- install_module_elements (l_module_source_path, l_dest_dir.path, Config_dir) +-- install_module_elements (l_module_source_path, l_dest_dir.path, Scripts_dir) +-- install_module_elements (l_module_source_path, l_dest_dir.path, Themes_dir) + print ("Module ") + print (l_mod_name) + print (" was successfuly installed to the CMS Application location ") + print (l_cms_path.name) + print ("%NCheck the module elements at ") + print (l_dest_dir.path.name) + print (".%N") + else + print ({STRING_32} "The CMS Application located at " + l_cms_path.name + "does not have the site or modules folders.%N") + end + else + print ("Error: not possible to retrieve module name.%N") + end + else + print ("Error: wrong path to CMS application.%N") + end + end + + install_module_elements (a_module_source_path: PATH; a_cms_module_target_path: PATH; a_element: detachable READABLE_STRING_GENERAL) + -- Install module site files from `a_module_source_path' to cms application `a_cms_module_target_path' under expected modules folder. + -- If `a_element' is set, take into account only sub folder `a_element'. + local + l_path: PATH + l_dest_dir: DIRECTORY + l_src_dir: DIRECTORY + do + l_path := a_module_source_path.extended ("site") + if a_element /= Void then + -- Copy all files under "site/$a_element" into "site/modules/$module_name/$a_element" location. + create l_src_dir.make_with_path (l_path.extended (a_element)) + create l_dest_dir.make_with_path (a_cms_module_target_path.extended (a_element)) + else + -- Copy all files under "site" into "site/modules/$module_name/" location. + create l_src_dir.make_with_path (l_path) + create l_dest_dir.make_with_path (a_cms_module_target_path) + end + if not l_dest_dir.exists then + l_dest_dir.create_dir + end + copy_directory (l_src_dir, l_dest_dir, True) + end + +feature {NONE} -- System/copy files + + copy_directory (a_src: DIRECTORY; a_dest: DIRECTORY; is_recursive: BOOLEAN) + -- Copy all elements from `a_src' to `a_dest'. + local + l_dir: DIRECTORY + l_new_dir: DIRECTORY + entry: PATH + l_path: PATH + l_file: FILE + ut: FILE_UTILITIES + do + across + a_src.entries as ic + loop + entry := ic.item + if not (entry.is_current_symbol or else entry.is_parent_symbol) then + l_path := a_src.path.extended_path (entry) + create {RAW_FILE} l_file.make_with_path (l_path) + if not l_file.is_directory then + copy_file_in_directory (l_file, a_dest.path) + elseif is_recursive then + create l_dir.make_with_path (l_path) + create l_new_dir.make_with_path (a_dest.path.extended_path (entry)) + ut.create_directory_path (l_new_dir.path) + if l_dir.exists then + copy_directory (l_dir, l_new_dir, is_recursive) + end + end + end + end + end + + copy_file_in_directory (a_file: FILE; a_dir: PATH) + -- Copy file `a_file' to dir `a_dir'. + local + retried: BOOLEAN + l_dest: RAW_FILE + do + if not retried then + if attached a_file.path.entry as e then + create l_dest.make_with_path (a_dir.extended_path (e)) + l_dest.create_read_write + a_file.open_read + -- Copy file source to destination + if + l_dest.exists and then + l_dest.is_writable and then + a_file.exists and then + a_file.is_readable + then + a_file.copy_to (l_dest) + a_file.close + l_dest.close + end + end + end + rescue + retried := True + retry + end + +--feature -- Constants + +-- Config_dir: STRING = "config" +-- -- Configuration dir. + +-- Scripts_dir: STRING = "scripts" +-- -- Scripts dir. + +-- Themes_dir: STRING = "themes" +-- -- Themes dir. + + +note + copyright: "2011-2015, Jocelyn Fiat, Javier Velilla, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" +end