~widelands-dev/widelands-website/move_minimaps

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
try:
	from hashlib import md5
except ImportError:
	from md5 import md5
import os
import os.path
import warnings
import logging
import urllib
import urllib2
from datetime import datetime, timedelta
import shutil
import socket

from pybb import settings as pybb_settings
from django.core.files.uploadedfile import SimpleUploadedFile
from django.conf import settings

warnings.filterwarnings('ignore', r'tmpnam')

def fetch_gravatar(email):
    """
    Fetch avatar from gravatar.com service.

    Return None if avatar was not found.
    """

    hash = md5(email).hexdigest()
    size = max(pybb_settings.AVATAR_WIDTH, pybb_settings.AVATAR_HEIGHT)
    default = urllib.quote('http://spam.egg/')

    url = 'http://www.gravatar.com/avatar/%s?s=%d&d=%s' % (hash, size, default)
    fname = os.tmpnam()

    class RedirectHandler(urllib2.HTTPRedirectHandler):
        def http_error_302(*args):
            raise IOError('Redirect found')

    timeout = socket.getdefaulttimeout()
    socket.setdefaulttimeout(10)
    opener = urllib2.build_opener(RedirectHandler())
    socket.setdefaulttimeout(timeout)

    try:
        file(fname, 'wb').write(opener.open(url, fname).read())
    except IOError, ex:
        #logging.error(ex)
        return None
    else:
        return fname


def check_gravatar(user, ignore_date_joined=False, ignore_saved_avatar=False):
    if user.is_active:
        if ignore_date_joined or (datetime.now() - user.date_joined) < timedelta(seconds=3):
            if ignore_saved_avatar or not user.pybb_profile.avatar:
                path = fetch_gravatar(user.email)
                if path:
                    avatars_dir = os.path.join(settings.MEDIA_ROOT, pybb_settings.AVATARS_UPLOAD_TO)
                    avatar_name = '_pybb_%d' % user.id

                    avatar_path = os.path.join(avatars_dir, avatar_name)
                    shutil.copy(path, avatar_path)

                    relpath = os.path.join(pybb_settings.AVATARS_UPLOAD_TO, avatar_name)
                    user.pybb_profile.avatar = relpath
                    user.pybb_profile.save()
                    return True
    return False