Compare commits

...

2 commits

8 changed files with 33 additions and 16 deletions

2
.gitignore vendored
View file

@ -207,3 +207,5 @@ tags
[._]*.un~
# End of https://www.toptal.com/developers/gitignore/api/vim,venv,python
community_backup/community_backup/configuration.py

View file

@ -128,6 +128,7 @@ STATIC_URL = "static/"
TASKS = {"default": {"BACKEND": "django.tasks.backends.immediate.ImmediateBackend"}}
STATIC_ROOT = BASE_DIR.parent.parent / "static"
# Import settings from configuration.py
try:
@ -139,6 +140,13 @@ try:
assert module.BACKUP_HOME_DIR, "The BACKUP_HOME_DIR setting is required."
assert module.BACKUP_BORG_DIR, "The BACKUP_BORG_DIR setting is required."
assert module.BACKUP_AUTHORIZED_KEYS, "The BACKUP_AUTHORIZED_KEYS setting is required."
except ModuleNotFoundError:
print(f"could not find configuration file {config_module}")
exit(1)
BACKUP_USER = module.BACKUP_USER
BACKUP_REPO_HOST = module.BACKUP_REPO_HOST
BACKUP_HOME_DIR = module.BACKUP_HOME_DIR
BACKUP_BORG_DIR = module.BACKUP_BORG_DIR
BACKUP_AUTHORIZED_KEYS = module.BACKUP_AUTHORIZED_KEYS

View file

@ -16,13 +16,11 @@ def sync_repos(dry_run=False):
from .models import BorgRepository
repos = BorgRepository.objects.all()
print(repos)
repos_by_key = defaultdict(list)
for repo in repos:
repos_by_key[repo.key].append(repo)
print(repos)
# create .ssh directory
ssh_dir = settings.BACKUP_AUTHORIZED_KEYS.parent
if not dry_run:
@ -45,10 +43,8 @@ def sync_repos(dry_run=False):
if not dry_run:
authorized_keys.write_text("\n".join(commands) + "\n")
print(repos)
# remove repositories that do no longer exist
repo_paths = {repo.path for repo in repos}
print(repo_paths)
for user_dir in settings.BACKUP_BORG_DIR.iterdir():
print(user_dir)
for dir in user_dir.iterdir():

View file

@ -48,13 +48,7 @@
<div class="row">
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link" href="{% url "about" %}">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Imprint</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Data Protection</a>
<a class="nav-link" href="{% url 'imprint' %}">Imprint</a>
</li>
</ul>
</div>

View file

@ -1,13 +1,17 @@
{% extends "base.html" %}
{% block content %}
<div class<div class="d-flex">
<div class="d-flex">
<h1>Your Borg Repositories</h1>
<div class="p-2 ms-auto">
<a class="btn btn-primary" href="{% url 'borg_add' %}" role="button">Add Repository</a>
</div>
</div>
<row>
<p>Create a borg repository by specifying a name and the SSH public key that is allowed to access this repository. The name is only for your convenience. To set up the repository please follow the <a href="https://borgbackup.readthedocs.io/en/stable/">BorgBackup documentation</a>. There is also a <a href="https://borgbackup.readthedocs.io/en/stable/quickstart.html">Quick start guide</a> available.
<b>Always use encrypted backups!</b></p>
</row>
<table class="table table-striped table-hover">
<thead>
@ -30,4 +34,6 @@
</table>
{% endblock %}

View file

@ -4,4 +4,10 @@
<row class="text-center p-2">
<h1>Welcome to Community Backup!</h1>
</row>
<row>
<p>This is a service offering space for backups free of charge. This is a hobby project. It comes with no garantuees for anything, especially availability of the service. This service is in a testing phase at the moment. It might be unavailalbe at times and features might change quickly.</p>
<p>Currently this service offers only backups via <a href="https://www.borgbackup.org/">Borg Backup</a>.</p>
<p>To access this service you need an account. To register for an account you need a voucher. Vouchers are required to control the amount of users, so that there is enough space available for everyone.</p>
</row>
{% endblock %}

View file

@ -17,5 +17,5 @@ urlpatterns = [
name="borg_delete",
),
path("register/", views.RegisterUserView.as_view(), name="register"),
path("about/", views.AboutView.as_view(), name="about"),
path("imprint/", views.ImprintView.as_view(), name="imprint"),
]

View file

@ -41,9 +41,14 @@ class MarkdownView(TemplateView):
return context
class AboutView(MarkdownView):
class DataProtectionView(MarkdownView):
template_name = "markdown.html"
md = "about.md"
md = "dataprotection.md"
class ImprintView(MarkdownView):
template_name = "markdown.html"
md = "imprint.md"
class BorgView(LoginRequiredMixin, ListView):