def facebook_callback(request): """ Una vez el usuario permise o no el acceso a su cuenta de Facebook esta vista revisa si concedio permisos o no En caso afirmativo busca a un usuario con ese id de Facebook para crear la sesion, de no existir crea al usuario """ code = None if 'code' not in request.GET else request.GET['code'] retorno = HttpResponseRedirect('/?error_facebook') try: if code is not None: args = dict(client_id=FACEBOOK["KEY"], redirect_uri=FACEBOOK["CALLBACK"], client_secret=FACEBOOK["SECRET"], code=code) response = urlparse.parse_qs(urllib.urlopen("https://graph.facebook.com/oauth/access_token?%s"%urllib.urlencode(args)).read()) access_token = response["access_token"][-1] if access_token is not None: fb_user = json.load(urllib.urlopen("https://graph.facebook.com/me?%s"%urllib.urlencode(dict(access_token=access_token)))) if 'id' in fb_user: try: cliente = Cliente.objects.get(facebook_id=fb_user['id']) cliente.login(request) except Cliente.DoesNotExist: cliente = Cliente(nombre_usuario="%s_fb"%(fb_user['username'] if 'username' in fb_user else fb_user['id']), facebook_id=fb_user['id'], facebook_accesstoken=access_token, facebook_code=code) cliente.save() cliente.login(request) request.session['tipo'] = 'cliente' retorno = HttpResponseRedirect('/app/') except: pass return retorno
def facebook_callback(request): """ Una vez el usuario permise o no el acceso a su cuenta de Facebook esta vista revisa si concedio permisos o no En caso afirmativo busca a un usuario con ese id de Facebook para crear la sesion, de no existir crea al usuario """ code = None if 'code' not in request.GET else request.GET['code'] retorno = HttpResponseRedirect('/?error_facebook') try: if code is not None: args = dict(client_id=FACEBOOK["KEY"], redirect_uri=FACEBOOK["CALLBACK"], client_secret=FACEBOOK["SECRET"], code=code) response = urlparse.parse_qs( urllib.urlopen( "https://graph.facebook.com/oauth/access_token?%s" % urllib.urlencode(args)).read()) access_token = response["access_token"][-1] if access_token is not None: fb_user = json.load( urllib.urlopen( "https://graph.facebook.com/me?%s" % urllib.urlencode(dict(access_token=access_token)))) if 'id' in fb_user: try: cliente = Cliente.objects.get( facebook_id=fb_user['id']) cliente.login(request) except Cliente.DoesNotExist: cliente = Cliente(nombre_usuario="%s_fb" % (fb_user['username'] if 'username' in fb_user else fb_user['id']), facebook_id=fb_user['id'], facebook_accesstoken=access_token, facebook_code=code) cliente.save() cliente.login(request) request.session['tipo'] = 'cliente' retorno = HttpResponseRedirect('/app/') except: pass return retorno
def twitter_callback(request): """ Una vez el usuario permise o no el acceso a su cuenta de Twitter esta vista revisa si concedio permisos o no En caso afirmativo busca a un usuario con ese id de Twitter para crear la sesion, de no existir crea al usuario """ retorno = HttpResponseRedirect('/') try: s = request.session['tw_rt'] tokens = s.split('::') request_token = tokens[0] request_secret = tokens[1] if 'oauth_token' in request.GET and 'oauth_verifier' in request.GET: oauth_verifier = request.GET['oauth_verifier'] oauth = tweepy.OAuthHandler(TWITTER['KEY'], TWITTER['SECRET']) oauth.set_request_token(request_token, request_secret) oauth.get_access_token(oauth_verifier) api = tweepy.API(oauth) tw_user = api.verify_credentials() try: cliente = Cliente.objects.get(twitter_id=tw_user.id) cliente.login(request) except Cliente.DoesNotExist: accesstoken = oauth.access_token.key secret = oauth.access_token.secret cliente = Cliente(nombre_usuario="%s_tc" % tw_user.screen_name, twitter_id=tw_user.id, twitter_accesstoken=accesstoken, twitter_secrettoken=secret) cliente.save() cliente.login(request) retorno = HttpResponseRedirect('/app/') except: retorno = HttpResponseRedirect('/?error_twitter') del request.session['tw_rt'] return retorno
def twitter_callback(request): """ Una vez el usuario permise o no el acceso a su cuenta de Twitter esta vista revisa si concedio permisos o no En caso afirmativo busca a un usuario con ese id de Twitter para crear la sesion, de no existir crea al usuario """ retorno = HttpResponseRedirect('/') try: s = request.session['tw_rt'] tokens = s.split('::') request_token = tokens[0] request_secret = tokens[1] if 'oauth_token' in request.GET and 'oauth_verifier' in request.GET: oauth_verifier = request.GET['oauth_verifier'] oauth = tweepy.OAuthHandler(TWITTER['KEY'], TWITTER['SECRET']) oauth.set_request_token(request_token, request_secret) oauth.get_access_token(oauth_verifier) api = tweepy.API(oauth) tw_user = api.verify_credentials() try: cliente = Cliente.objects.get(twitter_id=tw_user.id) cliente.login(request) except Cliente.DoesNotExist: accesstoken = oauth.access_token.key secret = oauth.access_token.secret cliente = Cliente(nombre_usuario="%s_tc"%tw_user.screen_name, twitter_id=tw_user.id, twitter_accesstoken=accesstoken, twitter_secrettoken=secret) cliente.save() cliente.login(request) retorno = HttpResponseRedirect('/app/') except: retorno = HttpResponseRedirect('/?error_twitter') del request.session['tw_rt'] return retorno
def json_registro(request): """ Registra un usuario a traves de la data envíada por ajax, por ejemplo desde el login por fb """ if request.method == 'GET': if "username" in request.GET and \ User.objects.filter(username=request.GET["username"]).exists(): user = authenticate(username=request.GET["username"], password="******") data = {"exists": True} elif "id" in request.GET and \ User.objects.filter(username=request.GET["id"]).exists(): user = authenticate(username=request.GET["id"], password="******") data = {"exists": True} else: if 'username' in request.GET: user = User.objects.create_user(request.GET["username"], request.GET["email"], "fb") else: if "id" not in request.GET: return json_response({}) user = User.objects.create_user(request.GET["id"], request.GET["email"], "fb") user.is_active = False user.first_name = request.GET["first_name"] user.last_name = request.GET["last_name"] user.save() cliente = Cliente(usuario=user) cliente.save() data = {"exists": False} user = authenticate(username=user.username, password="******") login(request, user) return json_response(data) else: return json_response({})
def save(self, request, formset_telefonos, formset_areas): """ Guarda al nuevo cliente con sus preferencias y crea un usuario ademas envia los mails que correspondan al usuario y a los administradores correspondientes """ # TODO: No está mandando todos los mails, se debe mandar un solo mail al registrrse newcli = False if request.user.is_authenticated(): cliente = Cliente.objects.get(usuario=request.user) else: try: cliente = Cliente.objects.get(usuario__username=self.cleaned_data['email']) except Cliente.DoesNotExist: newcli = True usuario = User.objects.create_user( username=self.cleaned_data['email'], email=self.cleaned_data['email'], password="******" ) usuario.first_name = self.cleaned_data['nombre'] usuario.last_name = self.cleaned_data['apellido'] usuario.is_active = False usuario.save() cliente = Cliente(usuario=usuario) cliente.save() cliente.recibir_email = self.cleaned_data['recibir_email'] cliente.rastrear_proyectos = self.cleaned_data['rastrear_proyectos'] for rubro in self.cleaned_data['rubros_interes']: cliente.rubros.add(rubro) for form_telefono in formset_telefonos.forms: telefono = form_telefono.save() cliente.set_telefono(telefono) # proyectos = [] for form_area in formset_areas.forms: area_interes = form_area.save() # proyectos += Proyecto.accepted.filter( # latitud__lte=area_interes.high_latitud, # latitud__gte=area_interes.low_latitud, # longitud__lte=area_interes.high_longitud, # longitud__gte=area_interes.low_longitud, # ) cliente.areas_interes.add(area_interes) cliente.save() #si es un nuevo cliente envia el mail para confirmar el registro y #envia los mails de bienvenida de cada rubro que selecciono el usuario if newcli: send_html_mail(settings.DEFAULT_FROM_EMAIL, u"Registro en Quimera Inmobiliaria", "confirmar_registro_contacto.html", {"cliente": cliente, "sitio": Site.objects.get_current(), "STATIC_URL": settings.STATIC_URL, "inmobiliaria":Inmobiliaria.objects.get(id=1) }, cliente.usuario.email) for rubro in cliente.rubros.all(): #se envia un correo de bienvenida por rubro send_html_mail(settings.DEFAULT_FROM_EMAIL, u"Bienvenido al rubro '%s' de Quimera \ Inmobiliaria" % rubro, "contacto_cliente_rubro.html", {"rubro": rubro, "sitio": Site.objects.get_current(), "STATIC_URL": settings.STATIC_URL, "inmobiliaria":Inmobiliaria.objects.get(id=1) }, cliente.usuario.email) #mail de mensaje recibido send_html_mail(settings.DEFAULT_FROM_EMAIL, u"Mensaje Recibido", "contacto_cliente.html", {"sitio": Site.objects.get_current(), "STATIC_URL": settings.STATIC_URL, "inmobiliaria":Inmobiliaria.objects.get(id=1) }, cliente.usuario.email) project_message = self.cleaned_data.get("proyecto") mensaje = MensajeFormularioContacto( cliente = cliente, mensaje = self.cleaned_data["mensaje"], fecha = datetime.now(), proyecto = project_message) mensaje.save() #se envia un correo a los administradores comerciales del proyecto #si no hay admin comerciales asociados al proyecto se envia al #DEFAULT_FROM_MAIL #si el mensaje no esta asociado a un proyecto se envia un mensaje #al DEFAULT_FROM_MAIL if project_message: queryset = project_message.usuarios.all() if queryset: for user in queryset: if user.email: send_html_mail( settings.DEFAULT_FROM_EMAIL, u"%s : Hay un nuevo mensaje!" % project_message, "contacto_admin.html", {"cliente": cliente, "mensaje": self.cleaned_data["mensaje"], "proyecto": project_message, "sitio": Site.objects.get_current(), "STATIC_URL": settings.STATIC_URL, "inmobiliaria":Inmobiliaria.objects.get(id=1)}, user.email) else: send_html_mail( settings.DEFAULT_FROM_EMAIL, u"%s : Hay un nuevo mensaje!" % project_message, "contacto_admin.html", {"noAdminsAssociated": True, "cliente": cliente, "mensaje": self.cleaned_data["mensaje"], "proyecto": project_message, "sitio": Site.objects.get_current(), "STATIC_URL": settings.STATIC_URL, "inmobiliaria":Inmobiliaria.objects.get(id=1)}, settings.DEFAULT_FROM_EMAIL) else: sitio = Site.objects.get_current() send_html_mail( settings.DEFAULT_FROM_EMAIL, u"%s : Hay un nuevo mensaje!" % sitio.name, "contacto_admin_no_project.html", {"cliente": cliente, "mensaje": self.cleaned_data["mensaje"], "sitio": sitio, "STATIC_URL": settings.STATIC_URL, "inmobiliaria":Inmobiliaria.objects.get(id=1)}, settings.DEFAULT_FROM_EMAIL)