コード例 #1
0
        def form_callback(data):
            msg = {"enabled": data['enabled']}

            if msg["enabled"]:
                msg["network"], prefix = data['network'].split("/")
                mask = prefix_to_mask_4(int(prefix))
                msg["network_netmask"] = mask
                msg["route_all"] = data['default_route']
                msg["use_dns"] = data['dns']
                msg["ipv6"] = data['ipv6']
                msg["protocol"] = data['protocol']

            res = current_state.backend.perform("openvpn", "update_settings",
                                                msg)

            if res["result"]:
                messages.success(
                    _('OpenVPN server configuration was successfully %s.') %
                    (_('enabled') if msg["enabled"] else _('disabled')))
            else:
                messages.error(
                    _('Failed to %s OpenVPN server configuration.') %
                    (_('enable') if msg["enabled"] else _('disable')))

            return "none", None
コード例 #2
0
ファイル: networks.py プロジェクト: CZ-NIC/foris
 def save(self, *args, **kwargs):
     result = super(NetworksConfigPage, self).save(no_messages=True, *args, **kwargs)
     if self.form.callback_results["result"]:
         messages.success(_("Network configuration was sucessfully updated."))
     else:
         messages.error(_("Unable to update your network configuration."))
     return result
コード例 #3
0
ファイル: password.py プロジェクト: CZ-NIC/foris
    def save(self, *args, **kwargs):
        result = super(PasswordConfigPage, self).save(no_messages=True, *args, **kwargs)
        wrong_old_password = self.form.callback_results.get("wrong_old_password", False)
        system_password_no_error = self.form.callback_results.get("system_password_no_error", None)
        foris_password_no_error = self.form.callback_results.get("foris_password_no_error", None)

        compromised = self.form.callback_results.get("compromised")
        if compromised:
            messages.error(
                _(
                    "The password you've entered has been compromised. "
                    "It appears %(count)d times in '%(list)s' list."
                )
                % dict(count=compromised["count"], list=compromised["list"])
            )
            return result

        if wrong_old_password:
            messages.error(_("Old password you entered was not valid."))
            return result

        if system_password_no_error is not None:
            if system_password_no_error:
                messages.success(_("System password was successfully saved."))
            else:
                messages.error(_("Failed to save system password."))
        if foris_password_no_error is not None:
            if foris_password_no_error:
                messages.success(_("Foris password was successfully saved."))
            else:
                messages.error(_("Failed to save Foris password."))

        return result
コード例 #4
0
ファイル: __init__.py プロジェクト: erdoukki/foris
 def save(self, *args, **kwargs):
     result = super(NetworksConfigPage, self).save(no_messages=True, *args, **kwargs)
     if self.form.callback_results["result"]:
         messages.success(_("Network configuration was sucessfully updated."))
     else:
         messages.error(_("Unable to update your network configuration."))
     return result
コード例 #5
0
 def save(self, *args, **kwargs):
     result = super(ProfileConfigPage, self).save(no_messages=True, *args, **kwargs)
     if self.form.callback_results["result"]:
         messages.success(_("Guide workflow was sucessfully set."))
     else:
         messages.error(_("Failed to set guide workflow."))
     return result
コード例 #6
0
ファイル: password.py プロジェクト: CZ-NIC/foris
    def save(self, *args, **kwargs):
        result = super(PasswordConfigPage, self).save(no_messages=True,
                                                      *args,
                                                      **kwargs)
        wrong_old_password = self.form.callback_results.get(
            "wrong_old_password", False)
        system_password_no_error = self.form.callback_results.get(
            "system_password_no_error", None)
        foris_password_no_error = self.form.callback_results.get(
            "foris_password_no_error", None)

        compromised = self.form.callback_results.get("compromised")
        if compromised:
            messages.error(
                _("The password you've entered has been compromised. "
                  "It appears %(count)d times in '%(list)s' list.") %
                dict(count=compromised["count"], list=compromised["list"]))
            return result

        if wrong_old_password:
            messages.error(_("Old password you entered was not valid."))
            return result

        if system_password_no_error is not None:
            if system_password_no_error:
                messages.success(_("System password was successfully saved."))
            else:
                messages.error(_("Failed to save system password."))
        if foris_password_no_error is not None:
            if foris_password_no_error:
                messages.success(_("Foris password was successfully saved."))
            else:
                messages.error(_("Failed to save Foris password."))

        return result
コード例 #7
0
        def form_callback(data):
            current_state.backend.perform("openvpn", "generate_client",
                                          {"name": self.data['client_name']})
            messages.success(
                _("Started to generate client '%(name)s' for the OpenVPN server."
                  ) % dict(name=data['client_name']))

            return bottle.redirect(reverse("config_page", page_name="openvpn"))
コード例 #8
0
ファイル: __init__.py プロジェクト: erdoukki/foris
 def _action_delete_ca(self):
     self._check_post()
     data = current_state.backend.perform("remote", "delete_ca")
     if data["result"]:
         messages.success(_("CA for remote access was sucessfully deleted."))
     else:
         messages.error(_("Failed to delete CA for remote access."))
     bottle.redirect(reverse("config_page", page_name="remote"))
コード例 #9
0
    def _action_generate_ca(self):
        """Call RPC to generate CA for openvpn server

        :return: redirect to plugin's main page
        """
        current_state.backend.perform("openvpn", "generate_ca")
        messages.success(_("Started to generate CA for the OpenVPN server."))

        return bottle.redirect(reverse("config_page", page_name="openvpn"))
コード例 #10
0
    def _action_check_registration(self):
        handler = RegistrationCheckHandler(bottle.request.POST.decode())
        if not handler.save():
            messages.warning(_("There were some errors in your input."))
            return self.render(registration_check_form=handler.form)

        email = handler.data["email"]

        result = handler.form.callback_results
        kwargs = {}
        if not result["success"]:
            messages.error(
                _("An error ocurred when checking the registration: "
                  "<br><pre>%(error)s</pre>" % dict(error=result["error"])))
            return self.render()
        else:
            if result["status"] == "owned":
                messages.success(
                    _("Registration for the entered email is valid. "
                      "Now you can enable the data collection."))
                collection_toggle_handler = CollectionToggleHandler(
                    bottle.request.POST.decode())
                kwargs[
                    'collection_toggle_form'] = collection_toggle_handler.form
            elif result["status"] == "foreign":
                messages.warning(
                    _('This router is currently assigned to a different email address. Please '
                      'continue to the <a href="%(url)s">Turris website</a> and use the '
                      'registration code <strong>%(reg_num)s</strong> for a re-assignment to your '
                      'email address.') %
                    dict(url=result["url"],
                         reg_num=result["registration_number"]))
                bottle.redirect(
                    reverse("config_page", page_name="data_collect") + "?" +
                    urlencode({"email": email}))
            elif result["status"] == "free":
                messages.info(
                    _('This email address is not registered yet. Please continue to the '
                      '<a href="%(url)s">Turris website</a> and use the registration code '
                      '<strong>%(reg_num)s</strong> to create a new account.')
                    % dict(url=result["url"],
                           reg_num=result["registration_number"]))
                bottle.redirect(
                    reverse("config_page", page_name="data_collect") + "?" +
                    urlencode({"email": email}))
            elif result["status"] == "not_found":
                messages.error(
                    _('Router failed to authorize. Please try to validate our email later.'
                      ))
                bottle.redirect(
                    reverse("config_page", page_name="data_collect") + "?" +
                    urlencode({"email": email}))
        return self.render(status=result["status"],
                           registration_url=result["url"],
                           reg_num=result["registration_number"],
                           **kwargs)
コード例 #11
0
ファイル: maintenance.py プロジェクト: CZ-NIC/foris
 def _action_save_notifications(self):
     if bottle.request.method != "POST":
         messages.error(_("Wrong HTTP method."))
         bottle.redirect(reverse("config_page", page_name="maintenance"))
     handler = notifications.NotificationsHandler(bottle.request.POST.decode())
     if handler.save():
         messages.success(_("Configuration was successfully saved."))
         bottle.redirect(reverse("config_page", page_name="maintenance"))
     messages.warning(_("There were some errors in your input."))
     return super(MaintenanceConfigPage, self).render(notifications_form=handler.form)
コード例 #12
0
 def save(self, *args, **kwargs):
     super().save(no_messages=True, *args, **kwargs)
     result = self.form.callback_results.get('result', False)
     if result:
         messages.success(_("Configuration was successfully saved."))
     else:
         messages.error(
             _("Failed to update emulated services. Note that you might need to wait till "
               "ucollect is properly installed."))
     return result
コード例 #13
0
ファイル: __init__.py プロジェクト: erdoukki/foris
 def save(self, *args, **kwargs):
     super(MaintenanceConfigPage, self).save(no_messages=True, *args, **kwargs)
     result = self.form.callback_results.get('result')
     if result:
         messages.success(_("Configuration was successfully restored. "
                            "Note that a reboot will be required to apply restored "
                            "configuration."))
     else:
         messages.warning(_("Failed to restore the backup from the provided file."))
     return result
コード例 #14
0
 def save(self, *args, **kwargs):
     no_messages = kwargs.pop("no_messages", False)
     result = super(ConfigPageMixin, self).save(*args, **kwargs)
     if no_messages:
         return result
     if result:
         messages.success(_("Configuration was successfully saved."))
     else:
         messages.warning(_("There were some errors in your input."))
     return result
コード例 #15
0
ファイル: __init__.py プロジェクト: erdoukki/foris
 def _action_save_notifications(self):
     if bottle.request.method != 'POST':
         messages.error(_("Wrong HTTP method."))
         bottle.redirect(reverse("config_page", page_name="maintenance"))
     handler = notifications.NotificationsHandler(request.POST.decode())
     if handler.save():
         messages.success(_("Configuration was successfully saved."))
         bottle.redirect(reverse("config_page", page_name="maintenance"))
     messages.warning(_("There were some errors in your input."))
     return super(MaintenanceConfigPage, self).render(notifications_form=handler.form)
コード例 #16
0
 def form_cb(data):
     msg = {"autostart_enabled": data["autostart_enabled"]}
     if data["autostart_enabled"]:
         msg["hours_to_run"] = []
         for i in range(24):
             name = "hour_to_run_%d" % i
             if name in data and data[name]:
                 msg["hours_to_run"].append(i)
     current_state.backend.perform("netmetr", "update_settings", msg)
     messages.success(_("Netmetr settings were updated."))
     return "none", None
コード例 #17
0
    def _action_delete_ca(self):
        """Call RPC to delete the CA of the openvpn server

        :return: redirect to plugin's main page
        """
        res = current_state.backend.perform("openvpn", "delete_ca")
        if res["result"]:
            messages.success(_("The OpenVPN CA was successfully deleted."))
        else:
            messages.success(_("Failed to delete the OpenVPN CA."))

        return bottle.redirect(reverse("config_page", page_name="openvpn"))
コード例 #18
0
    def _action_toggle_collecting(self):
        if bottle.request.method != 'POST':
            messages.error(_("Wrong HTTP method."))
            bottle.redirect(reverse("config_page", page_name="data_collect"))

        handler = CollectionToggleHandler(bottle.request.POST.decode())
        if handler.save():
            messages.success(_("Configuration was successfully saved."))
            bottle.redirect(reverse("config_page", page_name="data_collect"))

        messages.warning(_("There were some errors in your input."))
        return super().render(collection_toggle_form=handler.form)
コード例 #19
0
 def maintenance_form_cb(data):
     client_name = data['client_name']
     if new_client(client_name):
         messages.success(
             _("Request for creating a new client \"%s\" was succesfully submitted. "
               "Client token should be available for download in a minute."
               ) % client_name)
     else:
         messages.error(
             _("An error occurred when creating client \"%s\".") %
             client_name)
     return "none", None
コード例 #20
0
    def _action_revoke(self):
        """Handle POST requesting revoking client certificate config

        :return: response with token with appropriate HTTP headers
        """
        res = current_state.backend.perform("openvpn", "revoke",
                                            {"id": self.data['revoke-client']})
        if res["result"]:
            messages.success(
                _("The client certificate was successfully revoked."))
        else:
            messages.error(_("Failed to revoke the client certificate."))
        return bottle.redirect(reverse("config_page", page_name="openvpn"))
コード例 #21
0
    def _action_reset_ca(self):
        """Call RPC for resetting the CA and redirect back.

        :return: redirect to plugin's main page
        """
        if reset_ca():
            messages.success(
                _("Reset of the certification authority was successfully submitted."
                  ))
        else:
            messages.error(_("An error occurred when trying to reset the CA."))

        bottle.redirect(reverse("config_page", page_name="tls"))
コード例 #22
0
    def _action_reset(self):

        if bottle.request.method != "POST":
            messages.error(_("Wrong HTTP method."))
            bottle.redirect(reverse("config_page", page_name="wifi"))

        data = current_state.backend.perform("wifi", "reset")
        if "result" in data and data["result"] is True:
            messages.success(_("Wi-Fi reset was successful."))
        else:
            messages.error(_("Failed to perform Wi-Fi reset."))

        bottle.redirect(reverse("config_page", page_name="wifi"))
コード例 #23
0
ファイル: wifi.py プロジェクト: CZ-NIC/foris
    def _action_reset(self):

        if bottle.request.method != "POST":
            messages.error(_("Wrong HTTP method."))
            bottle.redirect(reverse("config_page", page_name="wifi"))

        data = current_state.backend.perform("wifi", "reset")
        if "result" in data and data["result"] is True:
            messages.success(_("Wi-Fi reset was successful."))
        else:
            messages.error(_("Failed to perform Wi-Fi reset."))

        bottle.redirect(reverse("config_page", page_name="wifi"))
コード例 #24
0
    def save(self, *args, **kwargs):
        super(SubordinatesSetupPage, self).save(no_messages=True,
                                                *args,
                                                **kwargs)
        data = self.form.callback_results
        if data["result"]:
            messages.success(
                _("Token was successfully added and client '%(controller_id)s' "
                  "should be visible in a moment.") %
                dict(controller_id=data["controller_id"]))
        else:
            messages.error(_("Failed to add token."))

        return data["result"]
コード例 #25
0
    def save(self, *args, **kwargs):
        result = super(UpdaterConfigPage, self).save(no_messages=True,
                                                     *args,
                                                     **kwargs)

        target = self.form.callback_results.get("target", None)
        if target in ["deny", "grant"]:
            result = self.form.callback_results["result"]
            if result:
                if target == "grant":
                    messages.success(_("Update was approved."))
                elif target == "deny":
                    messages.success(_("Update was postponed."))
            else:
                if target == "grant":
                    messages.error(_("Failed to approve the update."))
                elif target == "deny":
                    messages.error(_("Failed to postpone the update."))
            return result

        if result:
            if self.form.callback_results.get("enabled", False):
                messages.success(
                    _("Configuration was successfully saved. Selected "
                      "packages should be installed or removed shortly."))
            else:
                messages.success(_("Configuration was successfully saved."))
        else:
            messages.warning(_("There were some errors in your input."))
        return result
コード例 #26
0
ファイル: maintenance.py プロジェクト: CZ-NIC/foris
 def save(self, *args, **kwargs):
     super(MaintenanceConfigPage, self).save(no_messages=True, *args, **kwargs)
     result = self.form.callback_results.get("result")
     if result:
         messages.success(
             _(
                 "Configuration was successfully restored. "
                 "Note that a reboot will be required to apply restored "
                 "configuration."
             )
         )
     else:
         messages.warning(_("Failed to restore the backup from the provided file."))
     return result
コード例 #27
0
    def _action_generate_client(self):
        """Call RPC to generate a client for openvpn server

        :return: redirect to plugin's main page
        """
        form = self.get_client_form(bottle.request.POST)
        if form.save():
            messages.success(
                _("Started to generate client certificate for the OpenVPN server."
                  ))
            return bottle.redirect(reverse("config_page", page_name="openvpn"))
        else:
            kwargs = {}
            self._prepare_render_args(kwargs, client_form=form)
            return super(OpenvpnConfigPage, self).render(**kwargs)
コード例 #28
0
ファイル: remote.py プロジェクト: CZ-NIC/foris
    def save(self, *args, **kwargs):
        kwargs["no_messages"] = True
        result = super().save(*args, **kwargs)
        if self.form.callback_results["enabled"]:
            if self.form.callback_results["result"]:
                messages.success(_("Remote access was sucessfully enabled."))
            else:
                messages.error(
                    _("Failed to enable the remote access. You are probably using "
                      "a message bus which doesn't support the remote access or "
                      "the CA for remote access hasn't been generated yet."))
        else:
            if self.form.callback_results["result"]:
                messages.success(_("Remote access was sucessfully disabled."))
            else:
                messages.error(_("Failed to disable remote access."))

        return result
コード例 #29
0
ファイル: __init__.py プロジェクト: erdoukki/foris
    def _action_test_notifications(self):
        if bottle.request.method != 'POST':
            messages.error(_("Wrong HTTP method."))
            bottle.redirect(reverse("config_page", page_name="maintenance"))
        data = current_state.backend.perform(
            "router_notifications", "create",
            {
                "msg": "_(This is a testing notification. Please ignore me.)",
                "severity": "news",
                "immediate": True,
            }
        )

        if data["result"]:
            messages.success(_("Testing message was sent, please check your inbox."))
        else:
            messages.error(_(
                "Sending of the testing message failed, your configuration is possibly wrong."
            ))
        bottle.redirect(reverse("config_page", page_name="maintenance"))
コード例 #30
0
ファイル: maintenance.py プロジェクト: CZ-NIC/foris
    def _action_test_notifications(self):
        if bottle.request.method != "POST":
            messages.error(_("Wrong HTTP method."))
            bottle.redirect(reverse("config_page", page_name="maintenance"))
        data = current_state.backend.perform(
            "router_notifications",
            "create",
            {
                "msg": "_(This is a testing notification. Please ignore me.)",
                "severity": "news",
                "immediate": True,
            },
        )

        if data["result"]:
            messages.success(_("Testing message was sent, please check your inbox."))
        else:
            messages.error(
                _("Sending of the testing message failed, your configuration is possibly wrong.")
            )
        bottle.redirect(reverse("config_page", page_name="maintenance"))
コード例 #31
0
ファイル: __init__.py プロジェクト: erdoukki/foris
    def save(self, *args, **kwargs):
        result = super(PasswordConfigPage, self).save(no_messages=True, *args, **kwargs)
        wrong_old_password = self.form.callback_results.get('wrong_old_password', False)
        system_password_no_error = self.form.callback_results.get('system_password_no_error', None)
        foris_password_no_error = self.form.callback_results.get('foris_password_no_error', None)
        if wrong_old_password:
            messages.error(_("Old password you entered was not valid."))
            return result

        if system_password_no_error is not None:
            if system_password_no_error:
                messages.success(_("System password was successfully saved."))
            else:
                messages.error(_("Failed to save system password"))
        if foris_password_no_error is not None:
            if foris_password_no_error:
                messages.success(_("Foris password was successfully saved."))
            else:
                messages.error(_("Failed to save Foris password"))

        return result
コード例 #32
0
ファイル: updater.py プロジェクト: CZ-NIC/foris
    def save(self, *args, **kwargs):
        result = super(UpdaterConfigPage, self).save(no_messages=True, *args, **kwargs)

        target = self.form.callback_results.get("target", None)
        if target in ["deny", "grant"]:
            result = self.form.callback_results["result"]
            if result:
                if target == "grant":
                    messages.success(_("Update was approved."))
                elif target == "deny":
                    messages.success(_("Update was postponed."))
            else:
                if target == "grant":
                    messages.error(_("Failed to approve the update."))
                elif target == "deny":
                    messages.error(_("Failed to postpone the update."))
            return result

        if result:
            messages.success(
                _(
                    "Configuration was successfully saved. Selected "
                    "packages should be installed or removed shortly."
                )
            )
        else:
            messages.warning(_("There were some errors in your input."))
        return result