Пример #1
0
    def execute_index(self):
        """
Action for "index" (most likely root requested)

:since: v1.0.0
        """

        default_page_settings = Settings.get_lang_associated("pas_http_site_page_default", self.request.lang)

        if (type(default_page_settings) is not dict
            or ("module" not in default_page_settings
                and "service" not in default_page_settings
                and "action" not in default_page_settings
               )
           ): raise TranslatableError("pas_http_core_site_unconfigured", 201)

        redirect_request = PredefinedHttpRequest()

        if ("module" in default_page_settings): redirect_request.module_package = default_page_settings['module']
        if ("service" in default_page_settings): redirect_request.service_package_and_module = default_page_settings['service']
        if ("action" in default_page_settings): redirect_request.action = default_page_settings['action']

        if ("parameters" in default_page_settings): redirect_request.parameters = default_page_settings['parameters']

        self.request.redirect(redirect_request)
    def __init__(self, l10n = None):
        """
Constructor __init__(RegistrationEMailRenderer)

:param l10n: L10n instance

:since: v0.2.00
        """

        VerificationEMailRenderer.__init__(self, l10n)

        self.verification_details = Settings.get_lang_associated("pas_http_user_registration_welcome_text",
                                                                 self.l10n.get_lang(),
                                                                 self.l10n.get("pas_http_user_registration_pending_email_message")
                                                                )
Пример #3
0
    def _execute_register(self, username = None, email = None, ex_type = None, source_iline = "", target_iline = "", is_save_mode = False):
        """
Action for "register"

:param username: User name to be used
:param email: Verified e-mail address to be used
:param ex_type: Externally verified service identifier string
:param source_iline: Source URI query string
:param target_iline: Target URI query string
:param is_save_mode: True if the form is submitted

:since: v0.2.00
        """

        # pylint: disable=star-args

        source = source_iline
        if (source_iline == ""): source_iline = "m=user;a=services"

        target = target_iline

        if (target_iline == ""):
            if (Settings.is_defined("pas_http_user_register_default_target_lang_{0}".format(self.request.get_lang()))): target_iline = Settings.get("pas_http_user_register_default_target_lang_{0}".format(self.request.get_lang()))
            elif (Settings.is_defined("pas_http_user_register_default_target")): target_iline = Settings.get("pas_http_user_register_default_target")
            else: target_iline = source_iline
        #

        L10n.init("pas_http_core_form")
        L10n.init("pas_http_user")

        if (not Settings.get("pas_http_user_registration_allowed", True)): raise TranslatableError("pas_http_user_registration_disabled", 403)

        if (self.response.is_supported("html_css_files")): self.response.add_theme_css_file("mini_default_sprite.min.css")

        Link.set_store("servicemenu",
                       Link.TYPE_RELATIVE_URL,
                       L10n.get("core_back"),
                       { "__query__": re.sub("\\_\\_\\w+\\_\\_", "", source_iline) },
                       icon = "mini-default-back",
                       priority = 7
                      )

        if (not DatabaseTasks.is_available()): raise TranslatableException("pas_core_tasks_daemon_not_available")

        form_id = InputFilter.filter_control_chars(self.request.get_parameter("form_id"))

        form = FormProcessor(form_id)
        if (is_save_mode): form.set_input_available()

        is_email_verified = (email is not None)

        if (not is_email_verified):
            field = EMailField("uemail")
            field.set_title(L10n.get("pas_http_user_email"))
            field.set_required()
            field.set_limits(_max = 255)
            field.set_validators([ self._check_email_not_registered ])
            form.add(field)
        #

        if (username is None):
            field = TextField("uusername")
            field.set_required()
            field.set_limits(int(Settings.get("pas_http_core_username_min", 3)), 100)
            field.set_size(TextField.SIZE_SMALL)
        else:
            field = InfoField("uusername")
            field.set_value(username)
        #

        field.set_title(L10n.get("pas_core_username"))
        field.set_validators([ self._check_username_not_registered ])
        form.add(field)

        if (is_email_verified):
            field = InfoField("uemail")
            field.set_title(L10n.get("pas_http_user_email"))
            field.set_value(email)
            field.set_validators([ self._check_email_not_registered ])
            form.add(field)
        #

        if (ex_type is None):
            field = PasswordField("upassword")
            field.set_title(L10n.get("pas_http_user_password"))
            field.set_required()
            field.set_limits(int(Settings.get("pas_http_user_password_min", 6)))
            field.set_mode(PasswordField.PASSWORD_CLEARTEXT | PasswordField.PASSWORD_WITH_REPETITION)
            form.add(field)
        #

        tos_filepath = Settings.get_lang_associated("pas_http_user_tos_filepath",
                                                    self.request.get_lang(),
                                                    "{0}/settings/pas_user_tos.ftg".format(Settings.get("path_data"))
                                                   )

        field = FormTagsFileField("utos")
        field.set_title(L10n.get("pas_http_user_tos"))
        field.set_required()
        field.set_formtags_filepath(tos_filepath)
        form.add(field)

        tos_choices = [ { "title": L10n.get("core_yes"), "value": "accepted" },
                        { "title": L10n.get("core_no"), "value": "denied" }
                      ]

        field = RadioField("utos_accepted")
        field.set_title(L10n.get("pas_http_user_tos_accepted"))
        field.set_choices(tos_choices)
        field.set_required()
        field.set_validators([ self._check_tos_accepted ])
        form.add(field)

        if (is_save_mode and form.check()):
            if (not is_email_verified): email = InputFilter.filter_email_address(form.get_value("uemail"))
            if (username is None): username = InputFilter.filter_control_chars(form.get_value("uusername"))

            user_profile_class = NamedLoader.get_class("dNG.data.user.Profile")
            if (user_profile_class is None): raise TranslatableException("core_unknown_error")

            user_profile = user_profile_class()

            user_profile_data = { "name": username,
                                  "lang": self.request.get_lang(),
                                  "email": email
                                }

            if (ex_type is None):
                password = InputFilter.filter_control_chars(form.get_value("upassword"))
                user_profile.set_password(password)
            else:
                user_profile_data['type'] = user_profile_class.TYPE_EXTERNAL_VERIFIED_MEMBER
                user_profile_data['type_ex'] = ex_type
            #

            with TransactionContext():
                user_profile.set_data_attributes(**user_profile_data)

                if (not is_email_verified): user_profile.lock()
                else: user_profile.unlock()

                user_profile.save()
            #

            user_id = user_profile.get_id()

            if (not is_email_verified):
                cleanup_timeout_days = int(Settings.get("pas_http_user_registration_days", 28))

                cleanup_timeout = (cleanup_timeout_days * 86400)
                vid = Md5.hash(urandom(32))

                database_tasks = DatabaseTasks.get_instance()

                database_tasks.add("dNG.pas.user.Profile.delete.{0}".format(username),
                                   "dNG.pas.user.Profile.delete",
                                   cleanup_timeout,
                                   username = username
                                  )

                database_tasks.add("dNG.pas.user.Profile.sendRegistrationEMail.{0}".format(username),
                                   "dNG.pas.user.Profile.sendRegistrationEMail",
                                   1,
                                   username = username,
                                   vid = vid,
                                   vid_timeout_days = cleanup_timeout_days
                                  )

                database_tasks.register_timeout(vid,
                                                "dNG.pas.user.Profile.registrationValidated",
                                                cleanup_timeout,
                                                username = username,
                                                vid = vid
                                               )

                self._on_pending_registration(user_id, source_iline, target_iline)
            else: self._on_registration_completed(user_id, source_iline, target_iline)
        else:
            content = { "title": L10n.get("pas_http_user_registration") }

            content['form'] = { "object": form,
                                "url_parameters": { "__request__": True, "a": "register-save", "dsd": { "source": source, "target": target } },
                                "button_title": "core_continue"
                              }

            self.response.init()
            self.response.set_title(content['title'])
            self.response.add_oset_content("core.form", content)