Merge branch 'master' of gitlab.rezometz.org:klafyvel/site_tps
This commit is contained in:
commit
4983e0c002
6 changed files with 152 additions and 2 deletions
32
content/migrations/0001_initial.py
Normal file
32
content/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# Generated by Django 2.0.1 on 2018-01-14 18:04
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('auth', '0009_alter_user_last_name_max_length'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Category',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('Nom de la catégorie', models.CharField(max_length=255)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Content',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('Nom du contenu', models.CharField(max_length=255)),
|
||||||
|
('URL du contenu', models.URLField(editable=False)),
|
||||||
|
('group_owner', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='auth.Group')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,3 +1,25 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.contrib.auth.models import Group
|
||||||
|
|
||||||
# Create your models here.
|
|
||||||
|
class Category(models.Model):
|
||||||
|
name = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
name="Nom de la catégorie"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Content(models.Model):
|
||||||
|
name = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
name="Nom du contenu"
|
||||||
|
)
|
||||||
|
group_owner = models.ForeignKey(
|
||||||
|
Group,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
editable=False,
|
||||||
|
)
|
||||||
|
content_url = models.URLField(
|
||||||
|
name='URL du contenu',
|
||||||
|
editable=False,
|
||||||
|
)
|
||||||
|
|
32
settings/migrations/0001_initial.py
Normal file
32
settings/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# Generated by Django 2.0.1 on 2018-01-14 18:04
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import settings.models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='ContentSettings',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('URL du FTP', models.URLField(max_length=255)),
|
||||||
|
('Identifiant sur le FTP', models.CharField(max_length=255)),
|
||||||
|
('Mot de passe', settings.models.AESEncryptedField(max_length=255)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='SiteSettings',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('allow_upload', models.BooleanField(help_text="Autoriser l'upload de vidéos.")),
|
||||||
|
('site_name', models.CharField(help_text='Nom du site', max_length=255)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,3 +1,39 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
import binascii
|
||||||
|
import site_tps.qaes
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
# Create your models here.
|
|
||||||
|
class AESEncryptedField(models.CharField):
|
||||||
|
def save_form_data(self, instance, data):
|
||||||
|
setattr(instance, self.name,
|
||||||
|
binascii.b2a_base64(qaes.encrypt(settings.AES_KEY, data)))
|
||||||
|
|
||||||
|
def value_from_object(self, obj):
|
||||||
|
return qaes.decrypt(settings.AES_KEY,
|
||||||
|
binascii.a2b_base64(getattr(obj, self.attname)))
|
||||||
|
|
||||||
|
|
||||||
|
class ContentSettings(models.Model):
|
||||||
|
ftp_url = models.URLField(
|
||||||
|
max_length=255,
|
||||||
|
name="URL du FTP",
|
||||||
|
)
|
||||||
|
ftp_id = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
name="Identifiant sur le FTP",
|
||||||
|
)
|
||||||
|
ftp_pass = AESEncryptedField(
|
||||||
|
max_length=255,
|
||||||
|
name="Mot de passe"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class SiteSettings(models.Model):
|
||||||
|
allow_upload = models.BooleanField(
|
||||||
|
help_text="Autoriser l'upload de vidéos."
|
||||||
|
)
|
||||||
|
site_name = models.CharField(
|
||||||
|
max_length=255,
|
||||||
|
help_text="Nom du site",
|
||||||
|
)
|
||||||
|
|
26
site_tps/qaes.py
Normal file
26
site_tps/qaes.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import string
|
||||||
|
from random import choice
|
||||||
|
from Crypto.Cipher import AES
|
||||||
|
|
||||||
|
EOD = '`%EofD%`' # This should be something that will not occur in strings
|
||||||
|
|
||||||
|
|
||||||
|
def genstring(length=16, chars=string.printable):
|
||||||
|
return ''.join([choice(chars) for i in range(length)])
|
||||||
|
|
||||||
|
|
||||||
|
def encrypt(key, s):
|
||||||
|
obj = AES.new(key)
|
||||||
|
datalength = len(s) + len(EOD)
|
||||||
|
if datalength < 16:
|
||||||
|
saltlength = 16 - datalength
|
||||||
|
else:
|
||||||
|
saltlength = 16 - datalength % 16
|
||||||
|
ss = ''.join([s, EOD, genstring(saltlength)])
|
||||||
|
return obj.encrypt(ss)
|
||||||
|
|
||||||
|
|
||||||
|
def decrypt(key, s):
|
||||||
|
obj = AES.new(key)
|
||||||
|
ss = obj.decrypt(s)
|
||||||
|
return ss.split(EOD)[0]
|
|
@ -37,6 +37,8 @@ INSTALLED_APPS = [
|
||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
|
'settings',
|
||||||
|
'content',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|
Loading…
Reference in a new issue