Drop private pastes.
This commit is contained in:
parent
60df8bf7b0
commit
c1826083fb
|
@ -15,12 +15,10 @@ instance is installed by ansible, the role is available here:
|
||||||
- Support any database supported by Django (Sqlite3, MySQL, PostgreSQL, Oracle, ...)
|
- Support any database supported by Django (Sqlite3, MySQL, PostgreSQL, Oracle, ...)
|
||||||
- Available in english, french .. and easily translatable into another languages.
|
- Available in english, french .. and easily translatable into another languages.
|
||||||
- Syntax highlighting for a bunch of languages using Pygments.
|
- Syntax highlighting for a bunch of languages using Pygments.
|
||||||
- Public/private pastes (don't appear in the pastes history).
|
|
||||||
- Time-based or "page loads"-based pastes expiration.
|
- Time-based or "page loads"-based pastes expiration.
|
||||||
- Password protection.
|
- Password protection.
|
||||||
- Possibility to enable/disable renderers and to choose the default one.
|
- Possibility to enable/disable renderers and to choose the default one.
|
||||||
- Limit pastes size.
|
- Limit pastes size.
|
||||||
- Pastes history.
|
|
||||||
|
|
||||||
|
|
||||||
## Running Pasteque
|
## Running Pasteque
|
||||||
|
|
|
@ -20,7 +20,6 @@ class PasteForm(ModelForm):
|
||||||
"content",
|
"content",
|
||||||
"lifetime",
|
"lifetime",
|
||||||
"lifecount",
|
"lifecount",
|
||||||
"private",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def save(self, commit=True):
|
def save(self, commit=True):
|
||||||
|
|
|
@ -6,7 +6,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2013-04-04 15:13+0200\n"
|
"POT-Creation-Date: 2023-04-21 09:18+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -15,172 +15,185 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: models.py:12
|
#: paste/models.py:12
|
||||||
msgid "Never expire"
|
msgid "Never expire"
|
||||||
msgstr "Jamais"
|
msgstr "Jamais"
|
||||||
|
|
||||||
#: models.py:13
|
#: paste/models.py:13
|
||||||
msgid "5 minutes"
|
|
||||||
msgstr "5 minutes"
|
|
||||||
|
|
||||||
#: models.py:14
|
|
||||||
msgid "30 minutes"
|
|
||||||
msgstr "30 minutes"
|
|
||||||
|
|
||||||
#: models.py:15
|
|
||||||
msgid "1 hour"
|
msgid "1 hour"
|
||||||
msgstr "1 heure"
|
msgstr "1 heure"
|
||||||
|
|
||||||
#: models.py:16
|
#: paste/models.py:14
|
||||||
msgid "1 day"
|
msgid "1 day"
|
||||||
msgstr "1 jour"
|
msgstr "1 jour"
|
||||||
|
|
||||||
#: models.py:17
|
#: paste/models.py:15
|
||||||
msgid "1 week"
|
msgid "1 week"
|
||||||
msgstr "1 semaine"
|
msgstr "1 semaine"
|
||||||
|
|
||||||
#: templates/404.html:3 templates/404.html.py:5 templates/500.html:3
|
#: paste/models.py:16
|
||||||
|
msgid "1 month"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: paste/models.py:17
|
||||||
|
msgid "1 year"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: paste/templates/404.html:3 paste/templates/404.html:5
|
||||||
|
#: paste/templates/500.html:3
|
||||||
msgid "Not found"
|
msgid "Not found"
|
||||||
msgstr "Non trouvé"
|
msgstr "Non trouvé"
|
||||||
|
|
||||||
#: templates/404.html:7
|
#: paste/templates/404.html:7
|
||||||
msgid "Sorry but the page you try to access does not exists"
|
msgid "Sorry but the page you try to access does not exists"
|
||||||
msgstr "Désolé mais la page à laquelle vous tentez d'accéder n'existe pas"
|
msgstr "Désolé mais la page à laquelle vous tentez d'accéder n'existe pas"
|
||||||
|
|
||||||
#: templates/500.html:5
|
#: paste/templates/500.html:5
|
||||||
msgid "Server error"
|
msgid "Server error"
|
||||||
msgstr "Erreur système"
|
msgstr "Erreur système"
|
||||||
|
|
||||||
#: templates/500.html:7
|
#: paste/templates/500.html:7
|
||||||
msgid "An error occurred"
|
msgid "An error occurred"
|
||||||
msgstr "Une erreur est survenue"
|
msgstr "Une erreur est survenue"
|
||||||
|
|
||||||
#: templates/base.html:27
|
#: paste/templates/base.html:21 paste/templates/paste/index.html:4
|
||||||
msgid "powered by"
|
|
||||||
msgstr "propulsé par"
|
|
||||||
|
|
||||||
#: templates/base.html:30 templates/paste/index.html:4
|
|
||||||
msgid "Paste something"
|
msgid "Paste something"
|
||||||
msgstr "Nouveau collage"
|
msgstr "Nouveau collage"
|
||||||
|
|
||||||
#: templates/base.html:31 templates/paste/history.html:3
|
#: paste/templates/base.html:25
|
||||||
msgid "Lasts pastes"
|
msgid "powered by"
|
||||||
msgstr "Derniers collages"
|
msgstr "propulsé par"
|
||||||
|
|
||||||
#: templates/paste/expired.html:7
|
#: paste/templates/paste/expired.html:7
|
||||||
msgid "This paste has expired"
|
msgid "This paste has expired"
|
||||||
msgstr "Ce collage a expiré"
|
msgstr "Ce collage a expiré"
|
||||||
|
|
||||||
#: templates/paste/expired.html:8
|
#: paste/templates/paste/expired.html:8
|
||||||
msgid "Sorry but the paste you try to access has expired"
|
msgid "Sorry but the paste you try to access has expired"
|
||||||
msgstr "Désolé mais ce collage n'est plus accessible car il a expiré"
|
msgstr "Désolé mais ce collage n'est plus accessible car il a expiré"
|
||||||
|
|
||||||
#: templates/paste/history.html:9 templates/paste/index.html:11
|
#: paste/templates/paste/history.html:3
|
||||||
|
msgid "Lasts pastes"
|
||||||
|
msgstr "Derniers collages"
|
||||||
|
|
||||||
|
#: paste/templates/paste/history.html:10 paste/templates/paste/index.html:21
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titre"
|
msgstr "Titre"
|
||||||
|
|
||||||
#: templates/paste/history.html:10 templates/paste/index.html:19
|
#: paste/templates/paste/history.html:12 paste/templates/paste/index.html:28
|
||||||
#: templates/paste/paste-meta.html:6
|
#: paste/templates/paste/paste-meta.html:7
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr "Langage"
|
msgstr "Langage"
|
||||||
|
|
||||||
#: templates/paste/history.html:11 templates/paste/paste-meta.html:7
|
#: paste/templates/paste/history.html:13
|
||||||
|
#: paste/templates/paste/paste-meta.html:8
|
||||||
msgid "Size"
|
msgid "Size"
|
||||||
msgstr "Taille"
|
msgstr "Taille"
|
||||||
|
|
||||||
#: templates/paste/history.html:12 templates/paste/paste-meta.html:8
|
#: paste/templates/paste/history.html:14
|
||||||
|
#: paste/templates/paste/paste-meta.html:9
|
||||||
msgid "Paste time"
|
msgid "Paste time"
|
||||||
msgstr "Heure collage"
|
msgstr "Heure collage"
|
||||||
|
|
||||||
#: templates/paste/history.html:13 templates/paste/paste-meta.html:9
|
#: paste/templates/paste/history.html:15
|
||||||
msgid "User IP"
|
#: paste/templates/paste/paste-meta.html:11
|
||||||
msgstr "IP utilisateur"
|
|
||||||
|
|
||||||
#: templates/paste/history.html:14 templates/paste/paste-meta.html:11
|
|
||||||
msgid "Protection"
|
msgid "Protection"
|
||||||
msgstr "Protection"
|
msgstr "Protection"
|
||||||
|
|
||||||
#: templates/paste/history.html:15 templates/paste/paste-meta.html:12
|
#: paste/templates/paste/history.html:16
|
||||||
|
#: paste/templates/paste/paste-meta.html:12
|
||||||
msgid "Views"
|
msgid "Views"
|
||||||
msgstr "Vues"
|
msgstr "Vues"
|
||||||
|
|
||||||
#: templates/paste/history.html:25 templates/paste/paste-meta.html:22
|
#: paste/templates/paste/history.html:27
|
||||||
|
#: paste/templates/paste/paste-meta.html:20
|
||||||
msgid "locked"
|
msgid "locked"
|
||||||
msgstr "verrouillé"
|
msgstr "verrouillé"
|
||||||
|
|
||||||
#: templates/paste/history.html:25 templates/paste/paste-meta.html:22
|
#: paste/templates/paste/history.html:27
|
||||||
|
#: paste/templates/paste/paste-meta.html:20
|
||||||
msgid "open"
|
msgid "open"
|
||||||
msgstr "ouvert"
|
msgstr "ouvert"
|
||||||
|
|
||||||
#: templates/paste/history.html:30
|
#: paste/templates/paste/history.html:32
|
||||||
msgid "Nothing has been pasted yet"
|
msgid "Nothing has been pasted yet"
|
||||||
msgstr "Rien n'a encore été collé"
|
msgstr "Rien n'a encore été collé"
|
||||||
|
|
||||||
#: templates/paste/index.html:27
|
#: paste/templates/paste/index.html:11
|
||||||
msgid "Private"
|
|
||||||
msgstr "Privé"
|
|
||||||
|
|
||||||
#: templates/paste/index.html:35
|
|
||||||
msgid "Content"
|
|
||||||
msgstr "Contenu"
|
|
||||||
|
|
||||||
#: templates/paste/index.html:42 templates/paste/paste-meta.html:13
|
|
||||||
msgid "Expire time"
|
|
||||||
msgstr "Expiration temporelle"
|
|
||||||
|
|
||||||
#: templates/paste/index.html:50
|
|
||||||
msgid "Expire allowed views"
|
|
||||||
msgstr "Expiration nombre d'affichages"
|
|
||||||
|
|
||||||
#: templates/paste/index.html:58
|
|
||||||
msgid "Password protected"
|
|
||||||
msgstr "Protection par mot de passe"
|
|
||||||
|
|
||||||
#: templates/paste/index.html:67
|
|
||||||
msgid "Paste"
|
|
||||||
msgstr "Coller"
|
|
||||||
|
|
||||||
#: templates/paste/index.html:75
|
|
||||||
msgid "characters left"
|
msgid "characters left"
|
||||||
msgstr "caractères restants"
|
msgstr "caractères restants"
|
||||||
|
|
||||||
#: templates/paste/locked.html:7
|
#: paste/templates/paste/index.html:13
|
||||||
|
msgid "Content"
|
||||||
|
msgstr "Contenu"
|
||||||
|
|
||||||
|
#: paste/templates/paste/index.html:39 paste/templates/paste/paste-meta.html:13
|
||||||
|
msgid "Expire time"
|
||||||
|
msgstr "Expiration temporelle"
|
||||||
|
|
||||||
|
#: paste/templates/paste/index.html:51
|
||||||
|
msgid "Expire allowed views"
|
||||||
|
msgstr "Expiration nombre d'affichages"
|
||||||
|
|
||||||
|
#: paste/templates/paste/index.html:63
|
||||||
|
msgid "Password protected"
|
||||||
|
msgstr "Protection par mot de passe"
|
||||||
|
|
||||||
|
#: paste/templates/paste/index.html:74
|
||||||
|
msgid "Paste"
|
||||||
|
msgstr "Coller"
|
||||||
|
|
||||||
|
#: paste/templates/paste/locked.html:7
|
||||||
msgid "This paste is password protected"
|
msgid "This paste is password protected"
|
||||||
msgstr "Protégé par un mot de passe"
|
msgstr "Protégé par un mot de passe"
|
||||||
|
|
||||||
#: templates/paste/locked.html:8
|
#: paste/templates/paste/locked.html:8
|
||||||
msgid "Please enter the password in the field below to unlock the paste and display it"
|
msgid ""
|
||||||
msgstr "Veuillez entrer le mot de passe dans le champ ci-dessous pour déverrouiller le collage et l'afficher"
|
"Please enter the password in the field below to unlock the paste and display "
|
||||||
|
"it"
|
||||||
|
msgstr ""
|
||||||
|
"Veuillez entrer le mot de passe dans le champ ci-dessous pour déverrouiller "
|
||||||
|
"le collage et l'afficher"
|
||||||
|
|
||||||
#: templates/paste/locked.html:12
|
#: paste/templates/paste/locked.html:12
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Mot de passe"
|
msgstr "Mot de passe"
|
||||||
|
|
||||||
#: templates/paste/locked.html:21
|
#: paste/templates/paste/locked.html:20
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Déverrouiller"
|
msgstr "Déverrouiller"
|
||||||
|
|
||||||
#: templates/paste/paste-meta.html:10
|
#: paste/templates/paste/paste-meta.html:10
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr "Visibilité"
|
msgstr "Visibilité"
|
||||||
|
|
||||||
#: templates/paste/paste-meta.html:21
|
#: paste/templates/paste/paste-meta.html:22
|
||||||
msgid "private"
|
|
||||||
msgstr "Privé"
|
|
||||||
|
|
||||||
#: templates/paste/paste-meta.html:21
|
|
||||||
msgid "public"
|
|
||||||
msgstr "publique"
|
|
||||||
|
|
||||||
#: templates/paste/paste-meta.html:24
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Aucune"
|
msgstr "Aucune"
|
||||||
|
|
||||||
msgid "Paste expired"
|
#~ msgid "Private"
|
||||||
msgstr "Heure collage"
|
#~ msgstr "Privé"
|
||||||
|
|
||||||
msgid "Plain text"
|
#~ msgid "private"
|
||||||
msgstr "Texte simple"
|
#~ msgstr "Privé"
|
||||||
|
|
||||||
msgid "Expiration time"
|
#~ msgid "public"
|
||||||
msgstr "Heure d'expiration"
|
#~ msgstr "publique"
|
||||||
|
|
||||||
|
#~ msgid "5 minutes"
|
||||||
|
#~ msgstr "5 minutes"
|
||||||
|
|
||||||
|
#~ msgid "30 minutes"
|
||||||
|
#~ msgstr "30 minutes"
|
||||||
|
|
||||||
|
#~ msgid "User IP"
|
||||||
|
#~ msgstr "IP utilisateur"
|
||||||
|
|
||||||
|
#~ msgid "Paste expired"
|
||||||
|
#~ msgstr "Heure collage"
|
||||||
|
|
||||||
|
#~ msgid "Plain text"
|
||||||
|
#~ msgstr "Texte simple"
|
||||||
|
|
||||||
|
#~ msgid "Expiration time"
|
||||||
|
#~ msgstr "Heure d'expiration"
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Generated by Django 4.2 on 2023-04-21 07:19
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("paste", "0002_auto_20180513_1644"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name="paste",
|
||||||
|
name="private",
|
||||||
|
),
|
||||||
|
]
|
|
@ -60,7 +60,6 @@ class Paste(models.Model):
|
||||||
lifecount = models.IntegerField(default=0, blank=True)
|
lifecount = models.IntegerField(default=0, blank=True)
|
||||||
viewcount = models.IntegerField(default=0, editable=False)
|
viewcount = models.IntegerField(default=0, editable=False)
|
||||||
expired = models.BooleanField(default=False, editable=False)
|
expired = models.BooleanField(default=False, editable=False)
|
||||||
private = models.BooleanField(default=False)
|
|
||||||
password = models.CharField(max_length=128, blank=True)
|
password = models.CharField(max_length=128, blank=True)
|
||||||
salt = models.CharField(max_length=36, blank=True)
|
salt = models.CharField(max_length=36, blank=True)
|
||||||
|
|
||||||
|
|
|
@ -70,12 +70,6 @@
|
||||||
{{ form.password.errors }}
|
{{ form.password.errors }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-check">
|
|
||||||
{{ form.private|add_class:"form-check-input" }}
|
|
||||||
<label class="form-check-label" for="id_private">{% trans 'Private' %}</label>
|
|
||||||
{{ form.private.errors }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<button class="btn btn-primary btn-lg" type="submit">{% trans 'Paste' %}</button>
|
<button class="btn btn-primary btn-lg" type="submit">{% trans 'Paste' %}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
<td>{% trans paste.language.name %}</td>
|
<td>{% trans paste.language.name %}</td>
|
||||||
<td>{{ paste.size }}</td>
|
<td>{{ paste.size }}</td>
|
||||||
<td>{{ paste.paste_time }}</td>
|
<td>{{ paste.paste_time }}</td>
|
||||||
<td>{% if paste.private %}<i class="icon-eye-close"> {% trans 'private' %}</i>{% else %}<i class="icon-eye-open"> {% trans 'public' %}</i>{% endif %}</td>
|
|
||||||
<td>{% if paste.password %}<i class="icon-lock"> {% trans 'locked' %}</i>{% else %}<i class="icon-unlock"> {% trans 'open' %}</i>{% endif %}</td>
|
<td>{% if paste.password %}<i class="icon-lock"> {% trans 'locked' %}</i>{% else %}<i class="icon-unlock"> {% trans 'open' %}</i>{% endif %}</td>
|
||||||
<td>{{ paste.viewcount }}{% if paste.lifecount > 0 %}/{{ paste.lifecount }}{% endif %}</td>
|
<td>{{ paste.viewcount }}{% if paste.lifecount > 0 %}/{{ paste.lifecount }}{% endif %}</td>
|
||||||
<td>{% if paste.expiration_time %}{{ paste.expiration_time }}{% else %}{% trans 'None' %}{% endif %}</td>
|
<td>{% if paste.expiration_time %}{{ paste.expiration_time }}{% else %}{% trans 'None' %}{% endif %}</td>
|
||||||
|
|
|
@ -6,7 +6,6 @@ from webtools import settings
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r"^$", views.index, name="index"),
|
url(r"^$", views.index, name="index"),
|
||||||
url(r"^history$", views.history, name="history"),
|
|
||||||
url(r"^static/(?P<path>.*)", serve, {"document_root": settings.STATIC_ROOT}),
|
url(r"^static/(?P<path>.*)", serve, {"document_root": settings.STATIC_ROOT}),
|
||||||
url(
|
url(
|
||||||
r"^paste/(?P<slug>[a-zA-Z0-9-]+)/(?P<renderer>[a-z]+)?$",
|
r"^paste/(?P<slug>[a-zA-Z0-9-]+)/(?P<renderer>[a-z]+)?$",
|
||||||
|
|
|
@ -23,7 +23,6 @@ def index(request):
|
||||||
{
|
{
|
||||||
"language": language.id,
|
"language": language.id,
|
||||||
"title": any_file.name,
|
"title": any_file.name,
|
||||||
"private": settings.PASTE["private_by_default"],
|
|
||||||
"lifetime": settings.PASTE["default_lifetime"],
|
"lifetime": settings.PASTE["default_lifetime"],
|
||||||
"content": any_file.read().decode(),
|
"content": any_file.read().decode(),
|
||||||
},
|
},
|
||||||
|
@ -43,7 +42,6 @@ def index(request):
|
||||||
)
|
)
|
||||||
data["form"] = PasteForm(
|
data["form"] = PasteForm(
|
||||||
initial={
|
initial={
|
||||||
"private": settings.PASTE["private_by_default"],
|
|
||||||
"lifetime": settings.PASTE["default_lifetime"],
|
"lifetime": settings.PASTE["default_lifetime"],
|
||||||
"language": Language.by_name(settings.PASTE["default_language"]).id,
|
"language": Language.by_name(settings.PASTE["default_language"]).id,
|
||||||
}
|
}
|
||||||
|
@ -84,14 +82,3 @@ def show(request, slug, renderer="pygments"):
|
||||||
if "password" in request.POST:
|
if "password" in request.POST:
|
||||||
response.set_cookie("password", request.POST["password"])
|
response.set_cookie("password", request.POST["password"])
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
def history(request):
|
|
||||||
"""Display last 25 public non-expired pastes."""
|
|
||||||
pastes = Paste.objects.filter(private=False, expired=False).order_by("-pk")[:25]
|
|
||||||
data = {
|
|
||||||
"pastes": pastes,
|
|
||||||
"menu": "history",
|
|
||||||
"default_renderer": settings.PASTE["default_renderer"],
|
|
||||||
}
|
|
||||||
return render(request, "paste/history.html", data)
|
|
||||||
|
|
|
@ -97,7 +97,6 @@ PASTE = {
|
||||||
"has_expire_by_views": False,
|
"has_expire_by_views": False,
|
||||||
"has_meta_table": False,
|
"has_meta_table": False,
|
||||||
"show_char_left": False,
|
"show_char_left": False,
|
||||||
"private_by_default": True,
|
|
||||||
"enabled_renderers": ["pygments", "raw"],
|
"enabled_renderers": ["pygments", "raw"],
|
||||||
"default_renderer": "pygments",
|
"default_renderer": "pygments",
|
||||||
"max_characters": 100000,
|
"max_characters": 100000,
|
||||||
|
|
Loading…
Reference in New Issue