Revision c738c935 api/util.py
b/api/util.py | ||
---|---|---|
31 | 31 |
# interpreted as representing official policies, either expressed |
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 |
import datetime |
|
35 |
import dateutil.parser |
|
36 |
import logging |
|
37 |
|
|
38 |
from base64 import b64encode |
|
34 | 39 |
from datetime import timedelta, tzinfo |
35 | 40 |
from functools import wraps |
41 |
from hashlib import sha256 |
|
36 | 42 |
from random import choice |
37 | 43 |
from string import ascii_letters, digits |
38 | 44 |
from time import time |
39 | 45 |
from traceback import format_exc |
40 | 46 |
from wsgiref.handlers import format_date_time |
41 | 47 |
|
42 |
import datetime |
|
43 |
import dateutil.parser |
|
44 |
import logging |
|
48 |
from Crypto.Cipher import AES |
|
45 | 49 |
|
46 | 50 |
from django.conf import settings |
47 | 51 |
from django.http import HttpResponse |
... | ... | |
96 | 100 |
pool = ascii_letters + digits |
97 | 101 |
return ''.join(choice(pool) for i in range(length)) |
98 | 102 |
|
103 |
def zeropad(s): |
|
104 |
"""Add zeros at the end of a string in order to make its length |
|
105 |
a multiple of 16.""" |
|
106 |
|
|
107 |
npad = 16 - len(s) % 16 |
|
108 |
return s + '\x00' * npad |
|
109 |
|
|
110 |
def encrypt(plaintext): |
|
111 |
# Make sure key is 32 bytes long |
|
112 |
key = sha256(settings.SECRET_KEY).digest() |
|
113 |
|
|
114 |
aes = AES.new(key) |
|
115 |
enc = aes.encrypt(zeropad(plaintext)) |
|
116 |
return b64encode(enc) |
|
117 |
|
|
99 | 118 |
|
100 | 119 |
def get_vm(server_id, owner): |
101 | 120 |
"""Return a VirtualMachine instance or raise ItemNotFound.""" |
Also available in: Unified diff