Esempio n. 1
0
File: views.py Progetto: Vedolin/api
def facebook_auth(request, format=None):
    accessToken = request.DATA["accessToken"]
    userID = request.DATA["userID"]
    expiresIn = request.DATA["expiresIn"]
    getPhoto = request.DATA.get("getPhoto", None)

    try:
        graph = facebook.GraphAPI(accessToken)
        me = graph.get("me")
    except facebook.FacepyError as e:
        print "ERROR - %d - %s" % (sys.exc_traceback.tb_lineno, e)
        return Response({"We don't have permissions to log in the user."}, status.HTTP_403_FORBIDDEN)

    volunteer = Volunteer.objects.filter(facebook_uid=userID)

    if volunteer:
        volunteer = volunteer[0]
        if getPhoto:
            faceImage = graph.get("me/picture?redirect=0&height=200&type=normal&width=200")
            imgurl = iri_to_uri(faceImage["data"]["url"])
            image = NamedTemporaryFile(delete=True)
            image.write(urllib2.urlopen(imgurl).read())
            image.flush()
            imgname = "volunteer/%s/%s.jpg" % (volunteer.user.slug, volunteer.user.slug)
            volunteer.image.save(imgname, File(image))
            volunteer.save()
        user = volunteer.user
        user.last_login = timezone.now()
        user.save()
    else:
        try:
            user = User.objects.get(email=me["email"])
            volunteer = Volunteer.objects.get(user=user)
        except:
            email = me.get("email", None)
            name = me.get("name", None)
            if name:
                slug = slugify(name)
            elif email:
                slug = slugify(email)
            else:
                return Response({"Could not creata slug for account."}, status.HTTP_400_BAD_REQUEST)

            user = User.objects.create_user(slug=slug, email=email, password="******")
            volunteer = Volunteer(user=user)

            try:
                # Sending welcome email on facebook signup
                plaintext = get_template("email/volunteerFacebookSignup.txt")
                htmly = get_template("email/volunteerFacebookSignup.html")
                d = Context({"name": name})
                subject, from_email, to = "Seja bem vindo ao Atados", "*****@*****.**", email
                text_content = plaintext.render(d)
                html_content = htmly.render(d)
                msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
                msg.attach_alternative(html_content, "text/html")
                msg.send()
            except:
                pass

        user.last_login = timezone.now()
        user.name = me.get("name", None)
        user.save()

        faceImage = graph.get("me/picture?redirect=0&height=200&type=normal&width=200")
        imgurl = iri_to_uri(faceImage["data"]["url"])
        image = NamedTemporaryFile(delete=True)
        image.write(urllib2.urlopen(imgurl).read())
        image.flush()
        imgname = "volunteer/%s/%s.jpg" % (volunteer.user.slug, volunteer.user.slug)
        volunteer.image.save(imgname, File(image))
        volunteer.facebook_uid = userID
        volunteer.facebook_access_token = accessToken
        volunteer.facebook_access_token_expires = expiresIn
        volunteer.save()

    if not volunteer:
        return Response({"Could not get user through facebook login."}, status.HTTP_404_NOT_FOUND)

    client = Client.objects.get(id=1)
    token = AccessToken.objects.create(user=user, client=client)
    data = {"access_token": token.token, "user": VolunteerSerializer(volunteer).data}
    return Response(data, status.HTTP_200_OK)