Python django.utils.encoding.force_bytes() Examples
The following are 30
code examples of django.utils.encoding.force_bytes().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
django.utils.encoding
, or try the search function
.

Example #1
Source File: base.py From GTDWeb with GNU General Public License v2.0 | 7 votes |
def decode(self, session_data): encoded_data = base64.b64decode(force_bytes(session_data)) try: # could produce ValueError if there is no ':' hash, serialized = encoded_data.split(b':', 1) expected_hash = self._hash(serialized) if not constant_time_compare(hash.decode(), expected_hash): raise SuspiciousSession("Session data corrupted") else: return self.serializer().loads(serialized) except Exception as e: # ValueError, SuspiciousOperation, unpickling exceptions. If any of # these happen, just return an empty dictionary (an empty session). if isinstance(e, SuspiciousOperation): logger = logging.getLogger('django.security.%s' % e.__class__.__name__) logger.warning(force_text(e)) return {}
Example #2
Source File: utils.py From django-oidc-rp with MIT License | 6 votes |
def validate_and_return_id_token(jws, nonce=None, validate_nonce=True): """ Validates the id_token according to the OpenID Connect specification. """ shared_key = oidc_rp_settings.CLIENT_SECRET \ if oidc_rp_settings.PROVIDER_SIGNATURE_ALG == 'HS256' \ else oidc_rp_settings.PROVIDER_SIGNATURE_KEY # RS256 try: # Decodes the JSON Web Token and raise an error if the signature is invalid. id_token = JWS().verify_compact(force_bytes(jws), _get_jwks_keys(shared_key)) except JWKESTException: return # Validates the claims embedded in the id_token. _validate_claims(id_token, nonce=nonce, validate_nonce=validate_nonce) return id_token
Example #3
Source File: crypto.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def salted_hmac(key_salt, value, secret=None): """ Returns the HMAC-SHA1 of 'value', using a key generated from key_salt and a secret (which defaults to settings.SECRET_KEY). A different key_salt should be passed in for every application of HMAC. """ if secret is None: secret = settings.SECRET_KEY key_salt = force_bytes(key_salt) secret = force_bytes(secret) # We need to generate a derived key from our base key. We can do this by # passing the key_salt and our base key through a pseudo-random function and # SHA1 works nicely. key = hashlib.sha1(key_salt + secret).digest() # If len(key_salt + secret) > sha_constructor().block_size, the above # line is redundant and could be replaced by key = key_salt + secret, since # the hmac module does the same thing for keys longer than the block size. # However, we need to ensure that we *always* do this. return hmac.new(key, msg=force_bytes(value), digestmod=hashlib.sha1)
Example #4
Source File: crypto.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def pbkdf2(password, salt, iterations, dklen=0, digest=None): """ Implements PBKDF2 with the same API as Django's existing implementation, using the stdlib. This is used in Python 2.7.8+ and 3.4+. """ if digest is None: digest = hashlib.sha256 if not dklen: dklen = None password = force_bytes(password) salt = force_bytes(salt) return hashlib.pbkdf2_hmac( digest().name, password, salt, iterations, dklen)
Example #5
Source File: client.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def encode_file(boundary, key, file): to_bytes = lambda s: force_bytes(s, settings.DEFAULT_CHARSET) filename = os.path.basename(file.name) if hasattr(file, 'name') else '' if hasattr(file, 'content_type'): content_type = file.content_type elif filename: content_type = mimetypes.guess_type(filename)[0] else: content_type = None if content_type is None: content_type = 'application/octet-stream' if not filename: filename = key return [ to_bytes('--%s' % boundary), to_bytes('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename)), to_bytes('Content-Type: %s' % content_type), b'', to_bytes(file.read()) ]
Example #6
Source File: hashers.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def encode(self, password, salt): bcrypt = self._load_library() # Need to reevaluate the force_bytes call once bcrypt is supported on # Python 3 # Hash the password prior to using bcrypt to prevent password truncation # See: https://code.djangoproject.com/ticket/20138 if self.digest is not None: # We use binascii.hexlify here because Python3 decided that a hex encoded # bytestring is somehow a unicode. password = binascii.hexlify(self.digest(force_bytes(password)).digest()) else: password = force_bytes(password) data = bcrypt.hashpw(password, salt) return "%s$%s" % (self.algorithm, force_text(data))
Example #7
Source File: hashers.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def verify(self, password, encoded): algorithm, data = encoded.split('$', 1) assert algorithm == self.algorithm bcrypt = self._load_library() # Hash the password prior to using bcrypt to prevent password truncation # See: https://code.djangoproject.com/ticket/20138 if self.digest is not None: # We use binascii.hexlify here because Python3 decided that a hex encoded # bytestring is somehow a unicode. password = binascii.hexlify(self.digest(force_bytes(password)).digest()) else: password = force_bytes(password) # Ensure that our data is a bytestring data = force_bytes(data) # force_bytes() necessary for py-bcrypt compatibility hashpw = force_bytes(bcrypt.hashpw(password, data)) return constant_time_compare(data, hashpw)
Example #8
Source File: modwsgi.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def groups_for_user(environ, username): """ Authorizes a user based on groups """ UserModel = auth.get_user_model() db.reset_queries() try: try: user = UserModel._default_manager.get_by_natural_key(username) except UserModel.DoesNotExist: return [] if not user.is_active: return [] return [force_bytes(group.name) for group in user.groups.all()] finally: db.close_old_connections()
Example #9
Source File: base.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def _check_query(self, query, country=False, city=False, city_or_country=False): "Helper routine for checking the query and database availability." # Making sure a string was passed in for the query. if not isinstance(query, six.string_types): raise TypeError('GeoIP query must be a string, not type %s' % type(query).__name__) # Extra checks for the existence of country and city databases. if city_or_country and not (self._country or self._city): raise GeoIPException('Invalid GeoIP country and city data files.') elif country and not self._country: raise GeoIPException('Invalid GeoIP country data file: %s' % self._country_file) elif city and not self._city: raise GeoIPException('Invalid GeoIP city data file: %s' % self._city_file) # Return the query string back to the caller. GeoIP only takes bytestrings. return force_bytes(query)
Example #10
Source File: signing.py From GTDWeb with GNU General Public License v2.0 | 6 votes |
def loads(s, key=None, salt='django.core.signing', serializer=JSONSerializer, max_age=None): """ Reverse of dumps(), raises BadSignature if signature fails. The serializer is expected to accept a bytestring. """ # TimestampSigner.unsign always returns unicode but base64 and zlib # compression operate on bytes. base64d = force_bytes(TimestampSigner(key, salt=salt).unsign(s, max_age=max_age)) decompress = False if base64d[:1] == b'.': # It's compressed; uncompress it first base64d = base64d[1:] decompress = True data = b64_decode(base64d) if decompress: data = zlib.decompress(data) return serializer().loads(data)
Example #11
Source File: crypto.py From django-cryptography with BSD 3-Clause "New" or "Revised" License | 6 votes |
def pbkdf2(password, salt, iterations, dklen=0, digest=None): """ Implements PBKDF2 with the same API as Django's existing implementation, using cryptography. :type password: any :type salt: any :type iterations: int :type dklen: int :type digest: cryptography.hazmat.primitives.hashes.HashAlgorithm """ if digest is None: digest = settings.CRYPTOGRAPHY_DIGEST if not dklen: dklen = digest.digest_size password = force_bytes(password) salt = force_bytes(salt) kdf = PBKDF2HMAC( algorithm=digest, length=dklen, salt=salt, iterations=iterations, backend=settings.CRYPTOGRAPHY_BACKEND) return kdf.derive(password)
Example #12
Source File: signing.py From django-cryptography with BSD 3-Clause "New" or "Revised" License | 6 votes |
def loads(s, key=None, salt='django.core.signing', serializer=JSONSerializer, max_age=None): """ Reverse of dumps(), raises BadSignature if signature fails. The serializer is expected to accept a bytestring. """ # TimestampSigner.unsign always returns unicode but base64 and zlib # compression operate on bytes. base64d = force_bytes( TimestampSigner(key, salt=salt).unsign(s, max_age=max_age)) decompress = False if base64d[:1] == b'.': # It's compressed; uncompress it first base64d = base64d[1:] decompress = True data = b64_decode(base64d) if decompress: data = zlib.decompress(data) return serializer().loads(data)
Example #13
Source File: password_reset_serializer.py From kobo-predict with BSD 2-Clause "Simplified" License | 6 votes |
def get_password_reset_email(user, reset_url, subject_template_name='registration/password_reset_subject.txt', # noqa email_template_name='api_password_reset_email.html', # noqa token_generator=default_token_generator): """Creates the subject and email body for password reset email.""" result = urlparse(reset_url) site_name = domain = result.hostname c = { 'email': user.email, 'domain': domain, 'path': result.path, 'site_name': site_name, 'uid': urlsafe_base64_encode(force_bytes(user.pk)), 'username': user.username, 'encoded_username': urlsafe_base64_encode(user.username), 'token': token_generator.make_token(user), 'protocol': result.scheme if result.scheme != '' else 'http', } subject = loader.render_to_string(subject_template_name, c) # Email subject *must not* contain newlines subject = ''.join(subject.splitlines()) email = loader.render_to_string(email_template_name, c) return subject, email
Example #14
Source File: test_connect_viewset.py From kobo-predict with BSD 2-Clause "Simplified" License | 6 votes |
def test_reset_user_password(self): # set user.last_login, ensures we get same/valid token # https://code.djangoproject.com/ticket/10265 self.user.last_login = now() self.user.save() token = default_token_generator.make_token(self.user) new_password = "bobbob1" data = {'token': token, 'new_password': new_password} # missing uid, should fail request = self.factory.post('/', data=data) response = self.view(request) self.assertEqual(response.status_code, 400) data['uid'] = urlsafe_base64_encode(force_bytes(self.user.pk)) # with uid, should be successful request = self.factory.post('/', data=data) response = self.view(request) self.assertEqual(response.status_code, 204) user = User.objects.get(email=self.user.email) self.assertTrue(user.check_password(new_password)) request = self.factory.post('/', data=data) response = self.view(request) self.assertEqual(response.status_code, 400)
Example #15
Source File: crypto.py From bioforum with MIT License | 6 votes |
def salted_hmac(key_salt, value, secret=None): """ Return the HMAC-SHA1 of 'value', using a key generated from key_salt and a secret (which defaults to settings.SECRET_KEY). A different key_salt should be passed in for every application of HMAC. """ if secret is None: secret = settings.SECRET_KEY key_salt = force_bytes(key_salt) secret = force_bytes(secret) # We need to generate a derived key from our base key. We can do this by # passing the key_salt and our base key through a pseudo-random function and # SHA1 works nicely. key = hashlib.sha1(key_salt + secret).digest() # If len(key_salt + secret) > sha_constructor().block_size, the above # line is redundant and could be replaced by key = key_salt + secret, since # the hmac module does the same thing for keys longer than the block size. # However, we need to ensure that we *always* do this. return hmac.new(key, msg=force_bytes(value), digestmod=hashlib.sha1)
Example #16
Source File: crypto.py From bioforum with MIT License | 6 votes |
def pbkdf2(password, salt, iterations, dklen=0, digest=None): """Return the hash of password using pbkdf2.""" if digest is None: digest = hashlib.sha256 if not dklen: dklen = None password = force_bytes(password) salt = force_bytes(salt) return hashlib.pbkdf2_hmac(digest().name, password, salt, iterations, dklen)
Example #17
Source File: response.py From bioforum with MIT License | 6 votes |
def make_bytes(self, value): """Turn a value into a bytestring encoded in the output charset.""" # Per PEP 3333, this response body must be bytes. To avoid returning # an instance of a subclass, this function returns `bytes(value)`. # This doesn't make a copy when `value` already contains bytes. # Handle string types -- we can't rely on force_bytes here because: # - Python attempts str conversion first # - when self._charset != 'utf-8' it re-encodes the content if isinstance(value, bytes): return bytes(value) if isinstance(value, str): return bytes(value.encode(self.charset)) # Handle non-string types (#16494) return force_bytes(value, self.charset) # These methods partially implement the file-like object interface. # See https://docs.python.org/3/library/io.html#io.IOBase # The WSGI server must call this method upon completion of the request. # See http://blog.dscpl.com.au/2012/10/obligations-for-calling-close-on.html
Example #18
Source File: auth.py From donation-tracker with Apache License 2.0 | 5 votes |
def send_registration_mail( request, user, template=None, sender=None, token_generator=default_token_generator, extra_context=None, ): template = template or mailutil.get_email_template( default_registration_template_name(), default_registration_template() ) return send_auth_token_mail( user, request.get_host(), request.build_absolute_uri( reverse( 'tracker:confirm_registration', kwargs={ 'uidb64': urlsafe_base64_encode(force_bytes(user.pk)), 'token': token_generator.make_token(user), }, ) ), template, sender, extra_context, )
Example #19
Source File: test_auth.py From donation-tracker with Apache License 2.0 | 5 votes |
def test_registration_flow(self): request = self.factory.post(reverse('tracker:register')) new_user = AuthUser.objects.create( username='dummyuser', email='test@email.com', is_active=False ) sent_mail = tracker.auth.send_registration_mail( request, new_user, template=TEST_AUTH_MAIL_TEMPLATE ) contents = test_util.parse_test_mail(sent_mail) self.assertEqual(new_user.username, contents['user'][0]) parsed = urllib.parse.urlparse(contents['url'][0]) resp = self.client.get(parsed.path) expected_url = reverse( 'tracker:confirm_registration', kwargs={ 'uidb64': urlsafe_base64_encode(force_bytes(new_user.pk)), 'token': 'register-user', }, ) self.assertRedirects(resp, expected_url) resp = self.client.get(expected_url) self.assertContains(resp, 'Please set your username and password.') resp = self.client.post( expected_url, { 'username': 'dummyuser', 'password': 'foobar', 'passwordconfirm': 'foobar', }, ) self.assertContains(resp, 'Your user account has been confirmed') new_user.refresh_from_db() self.assertTrue(new_user.is_active) self.assertTrue(new_user.check_password('foobar'))
Example #20
Source File: backends.py From django-oidc-rp with MIT License | 5 votes |
def create_oidc_user_from_claims(claims): """ Creates an ``OIDCUser`` instance using the claims extracted from an id_token. """ sub = claims['sub'] email = claims.get('email') username = base64.urlsafe_b64encode(hashlib.sha1(force_bytes(sub)).digest()).rstrip(b'=') user = get_or_create_user(username, email) if hasattr(user, 'oidc_user'): update_oidc_user_from_claims(user.oidc_user, claims) oidc_user = user.oidc_user else: oidc_user = OIDCUser.objects.create(user=user, sub=sub, userinfo=claims) return oidc_user
Example #21
Source File: notifications.py From django-herald with MIT License | 5 votes |
def get_context_data(self): context = super(PasswordResetEmail, self).get_context_data() if not self.site_name or self.domain: current_site = Site.objects.get_current() self.site_name = current_site.name self.domain = current_site.domain protocol = 'https' if self.use_https else 'http' uid = force_text(urlsafe_base64_encode(force_bytes(self.user.pk))) token = self.token_generator.make_token(self.user) context.update({ 'full_reset_url': '{}://{}{}'.format( protocol, self.domain, reverse('password_reset_confirm', kwargs={'uidb64': uid, 'token': token}) ), 'email': self.user.email, 'domain': self.domain, 'site_name': self.site_name, 'uid': uid, 'user': self.user, 'token': token, 'protocol': protocol, 'template_name': self.email_template_name, 'html_template_name': self.html_email_template_name, }) if self.extra_email_context is not None: context.update(self.extra_email_context) return context
Example #22
Source File: tests.py From Django-Merged-Inlines with MIT License | 5 votes |
def assertStringOrder(self, response, check_list): """ Check that a list of strings is properly ordered in the content """ index_order = [response.content.index(force_bytes(x)) for x in check_list] self.assertEqual(index_order, sorted(index_order))
Example #23
Source File: processors.py From longclaw with MIT License | 5 votes |
def get_rates_cache_key(self, **kwargs): from longclaw.basket.serializers import BasketItemSerializer settings = kwargs['settings'] origin = settings.shipping_origin destination = kwargs['destination'] basket_id = kwargs['basket_id'] items = BasketItem.objects.filter(basket_id=basket_id) serialized_items = BasketItemSerializer(items, many=True) serialized_origin = AddressSerializer(origin) or None serialized_destination = AddressSerializer(destination) or None data = { "items": serialized_items.data, "origin": serialized_origin.data, "destination": serialized_destination.data, } raw_key = json.dumps( data, sort_keys=True, indent=4, separators=(',', ': '), cls=DjangoJSONEncoder, ) hashed_key = hashlib.sha1(force_bytes(raw_key)).hexdigest() return force_text(hashed_key)
Example #24
Source File: models.py From longclaw with MIT License | 5 votes |
def get_processed_rate_name(self, destination, basket_id, speed): name_long = 'TrivialShippingRateProcessor-{}-{}-{}'.format(destination.pk, basket_id, speed) name = hashlib.md5(force_bytes(name_long)).hexdigest() return force_text(name)
Example #25
Source File: crypto.py From GTDWeb with GNU General Public License v2.0 | 5 votes |
def constant_time_compare(val1, val2): return hmac.compare_digest(force_bytes(val1), force_bytes(val2))
Example #26
Source File: cache.py From GTDWeb with GNU General Public License v2.0 | 5 votes |
def _generate_cache_key(request, method, headerlist, key_prefix): """Returns a cache key from the headers given in the header list.""" ctx = hashlib.md5() for header in headerlist: value = request.META.get(header, None) if value is not None: ctx.update(force_bytes(value)) url = hashlib.md5(force_bytes(iri_to_uri(request.build_absolute_uri()))) cache_key = 'views.decorators.cache.cache_page.%s.%s.%s.%s' % ( key_prefix, method, url.hexdigest(), ctx.hexdigest()) return _i18n_cache_key_suffix(request, cache_key)
Example #27
Source File: cache.py From GTDWeb with GNU General Public License v2.0 | 5 votes |
def _generate_cache_header_key(key_prefix, request): """Returns a cache key for the header cache.""" url = hashlib.md5(force_bytes(iri_to_uri(request.build_absolute_uri()))) cache_key = 'views.decorators.cache.cache_header.%s.%s' % ( key_prefix, url.hexdigest()) return _i18n_cache_key_suffix(request, cache_key)
Example #28
Source File: creation.py From GTDWeb with GNU General Public License v2.0 | 5 votes |
def _digest(cls, *args): """ Generates a 32-bit digest of a set of arguments that can be used to shorten identifying names. """ h = hashlib.md5() for arg in args: h.update(force_bytes(arg)) return h.hexdigest()[:8]
Example #29
Source File: schema.py From GTDWeb with GNU General Public License v2.0 | 5 votes |
def _digest(cls, *args): """ Generates a 32-bit digest of a set of arguments that can be used to shorten identifying names. """ h = hashlib.md5() for arg in args: h.update(force_bytes(arg)) return h.hexdigest()[:8] # Field <-> database mapping functions
Example #30
Source File: schema.py From GTDWeb with GNU General Public License v2.0 | 5 votes |
def _create_index_name(self, model, column_names, suffix=""): """ Generates a unique name for an index/unique constraint. """ # If there is just one column in the index, use a default algorithm from Django if len(column_names) == 1 and not suffix: return truncate_name( '%s_%s' % (model._meta.db_table, self._digest(column_names[0])), self.connection.ops.max_name_length() ) # Else generate the name for the index using a different algorithm table_name = model._meta.db_table.replace('"', '').replace('.', '_') index_unique_name = '_%x' % abs(hash((table_name, ','.join(column_names)))) max_length = self.connection.ops.max_name_length() or 200 # If the index name is too long, truncate it index_name = ('%s_%s%s%s' % ( table_name, column_names[0], index_unique_name, suffix, )).replace('"', '').replace('.', '_') if len(index_name) > max_length: part = ('_%s%s%s' % (column_names[0], index_unique_name, suffix)) index_name = '%s%s' % (table_name[:(max_length - len(part))], part) # It shouldn't start with an underscore (Oracle hates this) if index_name[0] == "_": index_name = index_name[1:] # If it's STILL too long, just hash it down if len(index_name) > max_length: index_name = hashlib.md5(force_bytes(index_name)).hexdigest()[:max_length] # It can't start with a number on Oracle, so prepend D if we need to if index_name[0].isdigit(): index_name = "D%s" % index_name[:-1] return index_name