Exemplo n.º 1
0
class RootController(BaseController):
    """
    The root controller for the PollandSurvey application.

    All the other controllers and WSGI applications should be mounted on this
    controller. For example::

        panel = ControlPanelController()
        another_app = AnotherWSGIApplication()

    Keep in mind that WSGI applications shouldn't be mounted directly: They
    must be wrapped around with :class:`tg.controllers.WSGIAppController`.

    """
    secc = SecureController()
    admin = AdminController(model, DBSession, config_type=TGAdminConfig)
    error = ErrorController()
    
    def __init__(self):
        
        
        self.register = RegisterController();
        self.activate = ActivateController()
        self.account = AccountController();
        self.survey = SurveyController();
        self.script = ScriptController();
        self.model = ScriptModelController();
        
        self.images = ImagesController();
        self.preview = PreviewController();
       
        
        self.ans = AnswerQuestionController() #AnswerController();
        
        
        self.ang = AngularController();
        
        self.home = ListSurveyController();
        self.voter = VoterController();
        
        self.sendMailC = SendMailController();
        
        self.registersocial = RegisterWithSocialController()
        #acc = AccountSysController();
        
        self.about = AboutController()
        self.policy = PolicyController()
        self.login = LoginController()
        self.forgot = ForgotController()
        self.service = ServiceController()
        self.support = SupportController()
        self.marketing = MarketingController()
        self.howitwork = HowItWorkController()
        self.example = ExampleController()
        self.webservice = InterfaceServiceController()
        self.lang = LanguageController()
        self.manual = ManualController()
        self.gen = GenpollController();
        
        
        
        self.DEPLOY_DIR = config['path_upload_file_deploy'] ;
        self.sendMailService = SendMailService();
        self.registerService = RegisterService();
        self.utility = Utility();
        
        
         
        dh = LogDBHandler( config=config,request=request);        
        log.addHandler(dh)
        
        self.urlServer =  model.SystemEnvironment.getServerUrl();
         
        
    def _before(self, *args, **kw):
        tmpl_context.project_name = "pollandsurvey"
    
    
    
    @expose('pollandsurvey.templates.ads')
    def ads(self, came_from=lurl('/')):
        
        #print request.scheme   + '://';
        #hooks.notify('tgext.pylogservice.startup' ) 
        #hooks.notify('tgext.pyutilservice.startup')
        
        return dict(page='metronic')
        
    @expose('pollandsurvey.templates.metronic')
    def index_old(self, came_from=lurl('/')):
        
        #print request.scheme   + '://';
        #hooks.notify('tgext.pylogservice.startup' ) 
        #hooks.notify('tgext.pyutilservice.startup')
        
        return dict(page='metronic') 
    
    @expose('pollandsurvey.templates.index_theme2')
    def index(self, came_from=lurl('/')):
        
        #print request.scheme   + '://';
        #hooks.notify('tgext.pylogservice.startup' ) 
        #hooks.notify('tgext.pyutilservice.startup')
        
        if not request.identity:
            ManageSession.deleteAll()
            
        if ManageSession.getLanguage() is None:
            ManageSession.setLanguage()
            
        print 'Session Language : %s' %(ManageSession.getLanguage())
        
        
        
        
        return dict(page='metronic') 
     
        
       
    
    
    @expose('pollandsurvey.templates.environ')
    @require(predicates.has_permission('manage', msg=l_('Only for managers')))
    def environ(self):
        """This method showcases TG's access to the wsgi environment."""
        return dict(page='environ', environment=request.environ)

     
    
    @expose('pollandsurvey.templates.index')
    @require(predicates.has_permission('manage', msg=l_('Only for managers')))
    def manage_permission_only(self, **kw):
        """Illustrate how a page for managers only works."""
        return dict(page='managers stuff')


    @expose('pollandsurvey.templates.index')
    @require(predicates.is_user('editor', msg=l_('Only for the editor')))
    def editor_user_only(self, **kw):
        """Illustrate how a page exclusive for the editor works."""
        return dict(page='editor stuff')

    
    @expose()
    def redirectHttp(self,*args,**kw):
        print HTTPFound(location='www.pollsurfvey/survey');
        raise HTTPFound(location='about');
    
    
    @expose()
    def post_login(self, came_from=lurl('/'), *args, **kw):

        log.info("post_login"); 
        
        if not request.identity:
            log.warning("user cannot login, redirect to login");
            login_counter = request.environ.get('repoze.who.logins', 0) + 1
            
            log.info( self.urlServer + '/login')
            redirect('/login', params=dict(came_from=came_from, __logins=login_counter))
            
        #userid = request.identity['repoze.who.userid'];
        user =  request.identity['user'];
        groups = request.identity['groups'] ;
        
        log.info("user in group : %s " %groups );
        
        userActive = model.UserGenCode.getUserActivated(user.user_id);
        
        if(userActive is None ):# and ('managers' not in groups  )):
            log.warning("user cannot login, redirect to login");
            flash(_('Please activate in your email'), 'warning') 
            #request.identity.current.logout();
            
            self.registerService.reActivateUser(user)
            
            auth_force_logout()
            login_counter = request.environ.get('repoze.who.logins', 0) ;
            
            redirect( '/login')#, params=dict(came_from=came_from, __logins=login_counter))
        
        print "add session"
        ManageSession.setLanguage('EN')
            
        #flash(_('Welcome back, %s!') % userid)
        
        if('/' == came_from):
            if ('voter' in groups):
                log.info("redirect to home page");
                #model.LogSurvey.insert(ip_server='127.0.0.1',status='INFO',message="redirect to home page" ,current_page='Login',user_name=user);
                log.info(self.urlServer + '/home' );
                redirect( '/home');
            if ('creator' in groups):
                log.info("redirect to create survey page");
                log.info(self.urlServer + '/survey' );
                #model.LogSurvey.insert(ip_server='127.0.0.1',status='INFO',message="redirect to create survey page" ,current_page='Login',user_name=user);
                redirect('/survey');
        
        
        
        #identity = request.environ.get('repoze.who.identity') 
        
        
        #for key in request.environ:
        #    print key 
        #    print request.environ[key];
        #    print '-------'
        #print "----------------------------------------------------------------";
        #for key in request.identity:
        #    print key 
        #    print request.identity[key];
        #    print '-------'
        #print "----------------------------------------------------------------";
        
        #print "User id "  ;
        #user =  request.identity['user'];
        #print user.user_id;
        
        """
        
        if 'voter' in groups:
            print "voter";
            log.info('voter');
            return HTTPFound(location='/survey')
        
        print "other";
        
        """
        
        
        
        # Do not use tg.redirect with tg.url as it will add the mountpoint
        # of the application twice.
        return HTTPFound(location=came_from)

    @expose()
    def post_logout(self, came_from=lurl('/'), *args, **kw):
        """
        Redirect the user to the initially requested page on logout and say
        goodbye as well.

        """
        #flash(_('We hope to see you soon!'))
        ManageSession.deleteAll();
        
        return HTTPFound(location=came_from)
    
    
    @expose('pollandsurvey.templates.expired')
    def expired(self,*args,**kw):
        return dict(page='expired');
    
    @expose('pollandsurvey.templates.thankyou')
    def thankyou(self,*args,**kw):
         
        return dict(page='thankyou');
     
        
        
    @expose('pollandsurvey.templates.sanpleuploadfile')
    def sampleupload(self,*args,**kw):
    
        return dict(view="sample");
    
   
    
     
    
    @expose('pollandsurvey.templates.register.register_success')
    def sample(self):
        from webob.exc import HTTPFound, HTTPUnauthorized
         
        app = request.environ['repoze.who.api'];# = HTTPUnauthorized()
         
        
        del request.environ['repoze.who.identity']
        #identify = request.environ['repoze.who.plugins']['main_identifier'].identify(request.environ);
        #print request.environ['repoze.who.plugins']['main_identifier'].forget(request.environ,identify);  
        #repoze_api.logout();
        #for key in request.environ:   print "%s --- %s"   %(  key, request.environ[key]);
        return dict(page='register_success')
    
    
    
    
    @expose('json')
    @require(predicates.not_anonymous(  msg=l_('Only for Authen')))
    def getHistoryEmail(self,*arg, **kw):
         
        self.page = kw.get('page');
        self.pagesize = kw.get('pagesize');
        
        if(self.page is None):
            self.page =1
        
        if(self.pagesize is None):
            self.pagesize =10    
        
        log.info( "page : %s " %self.page);
        log.info( "page size : %s " %self.pagesize);
    
         
        user =  request.identity['user'];
        
        
        log.info( "user_id : %s" %user.user_id);
        
        listSurvey = model.Voter.getListSurveyByMember(user.user_id,int(self.page) -1 ,int(self.pagesize));
                
        return dict(historys = listSurvey);
    
    
   
         
    @expose('json') 
    @require(predicates.not_anonymous(  msg=l_('Only for Authen')))
    def showpassword(self,came_from=lurl('/')):
         
        user =  request.identity['user']; 
        
        password = user.password.encode('utf-8');
        
        log.info( 'old password : %s , new password : %s ' %(user.password, password));
         
        
        password = '******';
        from hashlib import sha256
        import os
        
        salt = sha256()
        salt.update(os.urandom(60))
        salt = salt.hexdigest()
        
        print 'salt : %s , length : %s ' %(salt, str(len(salt)));
        
        hash = sha256()
        # Make sure password is a str because we cannot hash unicode objects
        
        print "orig : %s , salt : %s "   %(password, salt);
        hash.update((password + salt).encode('utf-8'))
        
        #0101877a2d04060e2b34b96fbd4f14d59db5e4b3495bcaa53ee10530556b714f  =
        
        hash = hash.hexdigest()
        
        print 'hash2 : %s ' %(hash);
        
        password = salt + hash

        print 'password : %s ' %(password);
        
        enpassword = password[64:];
        print 'password : %s ' %(enpassword);
        
        repassword = sha256();
        repassword.update(enpassword);
        
        out = repassword.digest().encode('hex');
        print 'repassword : %s ' %(out);
        #check
        newpassword = '******'
        hash = sha256()
        hash.update((newpassword + password[:64]).encode('utf-8'));
        
        print 'old : %s'  %password[64:];
        print 'new : %s' %hash.hexdigest();
        
        
        # Make sure the hashed password is a unicode object at the end of the
        # process because SQLAlchemy _wants_ unicode objects for Unicode cols
        password = password.decode('utf-8')
        
        
        return dict(password = password)
        
    
        
      
    
          
    
    @expose('pollandsurvey.templates.uploadfile')     
    @require(predicates.in_any_group('managers', msg=l_('Only for Admin'))) 
    def uploadfile(self,*arg,**kw):
        return dict(page='uploadfile')
    
    
    @expose('pollandsurvey.templates.uploadfile')      
    @require(predicates.in_any_group('managers', msg=l_('Only for Admin')))
    def savefile(self,*arg,**kw):
        print arg;
        print kw;
        
        reload(sys).setdefaultencoding('utf8')
        print kw.get('file');
        fileUpload = kw.get('file');
        data = fileUpload.file.read();
        file_name=  fileUpload.filename
        
        target_file_name = self.DEPLOY_DIR + file_name;  
        
        f = open(target_file_name, 'wb')
        f.write(data)
        f.close()
        
        return dict(page='uploadfile')
    

    
    @expose('json')
    def postMessagefacebook(self):
        url = 'http://graph.facebook.com/151177958578696/feed?message=test&access_token=CAALWq7buVTYBAKfJL6Bm1VQFeDE3uKC7K9OdxIqqwKl7T8jmcezeIxDsSQvtn1HtODcI6uIwCJ1SqdzzZBDacMxn14ZA3uEGhCkZAhYQZC1ktQCt3lJ84mYAtxYga1aCkzLq52uxhqNl2r17ZCppSf0IGOmpBVSShL8rJZB0Bn19VyGRMe5EP6rOxmdwXguxQZD'
        import urllib2
        from urllib2 import Request, urlopen, URLError, HTTPError
        req = urllib2.Request(url)
        try: 
            urllib2.urlopen(req)
        except URLError as e:
            
            print e.reason   
            
    @expose()
    def userRegister(self):
        #https://www.jobsmatcher.com/JMWeb/register/registerApplicant-init.htm?user.beanEng.username=tong_pa@hotmail.com&apPiPersonalData.gender.idGender=1
        #dd = dict ('user.beanEng.username'= '*****@*****.**','apPiPersonalData.gender.idGender'= 1)
        dd = { 'user.beanEng.username' : '*****@*****.**','apPiPersonalData.gender.idGender': 1, 'contactEmail':'S',
              'user.beanOtherLang.firstName': 'padungrat','user.beanOtherLang.lastName' : 'makchu',
              'user.beanEng.firstName' : 'ผดุงรัฐ', 'user.beanEng.lastName' : 'มากชู',}
        
        redirect('//www.jobsmatcher.com/JMWeb/register/registerApplicant-init.htm', params=dd)
        
        
    @expose('pollandsurvey.templates.showConvertPDF2')   
    def showConvertPDF(self, **kw):
        reload(sys).setdefaultencoding("utf-8");
        
        certificateUser = dict(
                               title="Certificate Of Jobsmatcher",
                               label_score='scored', 
                               label_date='Date', 
                               name="ผดุงรัฐ มากชู", 
                               score="12/20", 
                               type="Positive Attitude test", 
                               finishDate='01 Jan. 2016'
                               )
        
        
        return dict(page = 'showConvertPDF',certificateUser = certificateUser)