~widelands-dev/widelands-website/trunk

22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
1
try:
438.1.6 by franku
run the script
2
    from hashlib import md5
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
3
except ImportError:
438.1.6 by franku
run the script
4
    from md5 import md5
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
5
import os
6
import os.path
7
import warnings
8
import logging
9
import urllib
10
import urllib2
11
from datetime import datetime, timedelta
12
import shutil
13
import socket
14
15
from pybb import settings as pybb_settings
16
from django.core.files.uploadedfile import SimpleUploadedFile
17
from django.conf import settings
18
19
warnings.filterwarnings('ignore', r'tmpnam')
20
438.1.6 by franku
run the script
21
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
22
def fetch_gravatar(email):
438.1.6 by franku
run the script
23
    """Fetch avatar from gravatar.com service.
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
24
25
    Return None if avatar was not found.
438.1.6 by franku
run the script
26
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
27
    """
28
29
    hash = md5(email).hexdigest()
30
    size = max(pybb_settings.AVATAR_WIDTH, pybb_settings.AVATAR_HEIGHT)
31
    default = urllib.quote('http://spam.egg/')
32
33
    url = 'http://www.gravatar.com/avatar/%s?s=%d&d=%s' % (hash, size, default)
34
    fname = os.tmpnam()
35
36
    class RedirectHandler(urllib2.HTTPRedirectHandler):
438.1.6 by franku
run the script
37
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
38
        def http_error_302(*args):
39
            raise IOError('Redirect found')
40
41
    timeout = socket.getdefaulttimeout()
42
    socket.setdefaulttimeout(10)
43
    opener = urllib2.build_opener(RedirectHandler())
44
    socket.setdefaulttimeout(timeout)
45
46
    try:
47
        file(fname, 'wb').write(opener.open(url, fname).read())
48
    except IOError, ex:
438.1.6 by franku
run the script
49
        # logging.error(ex)
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
50
        return None
51
    else:
52
        return fname
53
54
55
def check_gravatar(user, ignore_date_joined=False, ignore_saved_avatar=False):
56
    if user.is_active:
57
        if ignore_date_joined or (datetime.now() - user.date_joined) < timedelta(seconds=3):
58
            if ignore_saved_avatar or not user.pybb_profile.avatar:
59
                path = fetch_gravatar(user.email)
60
                if path:
438.1.6 by franku
run the script
61
                    avatars_dir = os.path.join(
62
                        settings.MEDIA_ROOT, pybb_settings.AVATARS_UPLOAD_TO)
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
63
                    avatar_name = '_pybb_%d' % user.id
64
65
                    avatar_path = os.path.join(avatars_dir, avatar_name)
66
                    shutil.copy(path, avatar_path)
67
438.1.6 by franku
run the script
68
                    relpath = os.path.join(
69
                        pybb_settings.AVATARS_UPLOAD_TO, avatar_name)
22 by Holger Rapp
- Added my hacked version of pybb. Remerging new versions is very difficult at this point :(
70
                    user.pybb_profile.avatar = relpath
71
                    user.pybb_profile.save()
72
                    return True
73
    return False