Fixes #3312: Sanitize payment titles.
[wolnelektury.git] / apps / funding / utils.py
1 # -*- coding: utf-8
2 import re
3 import string
4 from fnpdjango.utils.text.slughifi import char_map
5
6 # PayU chokes on non-Polish diacritics.
7 # Punctuation is handled correctly and escaped as needed,
8 # with the notable exception of backslash.
9 sane_in_payu_title = re.escape(
10     string.uppercase +
11     string.lowercase + 
12     u'ąćęłńóśźżĄĆĘŁŃÓŚŹŻ' + 
13     string.digits +
14     ' ' +
15     "".join(set(string.punctuation) - set('\\'))
16 )
17
18 def replace_char(m):
19     char = m.group()
20     return char_map.get(char, '')
21
22 def sanitize_payment_title(value):
23     return re.sub('[^%s]{1}' % sane_in_payu_title, replace_char, unicode(value))