mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
Closes: #729. Tests: - Install Shadowsocks Server. Install Shadowsocks Client, and set the server to localhost, and set the same password as the server. Use curl to connect to local SOCKS proxy on port 1080 and fetch a website. Signed-off-by: James Valleroy <jvalleroy@mailbox.org> [sunil: Update some docstring comments for shadowsocks clients] [sunil: Use the term Censorship instead of network filters] [sunil: Prevent enabling both apps when setup is re-run] [sunil: Update typehint for a privileged method to be minimal] [sunil: Accept connections from external IPs too] Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""FreedomBox app for configuring Shadowsocks Client."""
|
|
|
|
from django.contrib import messages
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from plinth import views
|
|
|
|
from . import privileged
|
|
from .forms import ShadowsocksForm
|
|
|
|
|
|
class ShadowsocksAppView(views.AppView):
|
|
"""Configuration view for Shadowsocks Client and SOCKS5 proxy."""
|
|
|
|
app_id = 'shadowsocks'
|
|
form_class = ShadowsocksForm
|
|
|
|
def get_initial(self, *args, **kwargs):
|
|
"""Get initial values for form."""
|
|
status = super().get_initial()
|
|
try:
|
|
status.update(privileged.get_config())
|
|
except Exception:
|
|
status.update({
|
|
'server': '',
|
|
'server_port': 8388,
|
|
'password': '',
|
|
'method': 'chacha20-ietf-poly1305',
|
|
})
|
|
|
|
return status
|
|
|
|
def form_valid(self, form):
|
|
"""Configure Shadowsocks."""
|
|
old_status = form.initial
|
|
new_status = form.cleaned_data
|
|
|
|
if old_status['server'] != new_status['server'] or \
|
|
old_status['server_port'] != new_status['server_port'] or \
|
|
old_status['password'] != new_status['password'] or \
|
|
old_status['method'] != new_status['method']:
|
|
new_config = {
|
|
'local_address': '::0',
|
|
'local_port': 1080,
|
|
'server': new_status['server'],
|
|
'server_port': new_status['server_port'],
|
|
'password': new_status['password'],
|
|
'method': new_status['method'],
|
|
}
|
|
|
|
privileged.merge_config(new_config)
|
|
messages.success(self.request, _('Configuration updated'))
|
|
|
|
return super().form_valid(form)
|