示例#1
0
    def ocrun(self):
        logger.debug('')

        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        args = cherrypy.request.json
        if type(args) is not dict:
            return Results.error(message='invalid parameters')

        # appname must exists
        appname = args.get('image')
        if type(appname) is not str:
            return Results.error('Missing parameter image')

        # add lang to user dict
        self.LocaleSettingsLanguage(user)
        try:
            result = oc.od.composer.openapp(auth, user, args)
        except Exception as e:
            return Results.error(str(e))

        return Results.success(result=result)
示例#2
0
    def get(self):

        # Check auth 
        try:
            (auth, user ) = self.validate_env()
        except Exception as e:
            self.logger.error( e )
            return Results.error( message=str(e) )
                
        arguments = cherrypy.request.json

        if type(arguments) is not dict :
            return Results.error( message='invalid parameters' )

        userid = user.userid
        value = None
        key = arguments.get('key')

        if all([userid, key]):
            self.logger.debug('getstoredvalue userid:%s key:%s', str(userid), str(key) )
            value = services.datastore.getstoredvalue(userid, key)
        
        if value is None:
            return Results.error('value not found: userid = %s, key = %s' % (userid,key), 404)
        
        return Results.success(result=value)
示例#3
0
    def list(self):
        logger.info('')

        try:
            (auth, user ) = self.validate_env()
        except Exception as e:
            logger.error( e )
            return Results.error( message=str(e) )

        printers = []        
        logger.debug('self.getclientlocation')
        location = self.getclientlocation( auth )                

        if type(location) is oc.od.locator.ODLocation and \
           location.resolved and location.site :
            logger.debug('location is resolved')
            # find the auth provider 
            logger.debug('looking for the auth provider')
            provider=services.auth.findprovider( name=auth.data.get('domain') )            
            # build the ldap filter
            logger.debug('build the ldap filter')
            sitefilter = '(location=' + location.site + '*)'
            logger.debug('ldap filter %s', sitefilter)
            # run query to ldap server
            printers=provider.listprinter( sitefilter )
        else:
            # return empty data, location is not found
            # we do know where the user is and 
            # we can not query the activedirectory to find printers
            pass        
        return Results.success(result=printers)
示例#4
0
    def listenable(self):
        logger.debug('')
        
        try:
            (auth, user ) = self.validate_env()
        except Exception as e:
            logger.error( e )
            return Results.error( message=str(e) )

        try:
            name=auth.data.get('domain')
        except Exception:
            message='only activedirectory printer are supported'
            logger.error( message )
            return Results.error(message=message)


        printerenabledlist = []
        provider=services.auth.findprovider( name )
        printerctl = self.createprinterctl( auth, user )
        for printername in printerctl.list():
            if printername not in settings.printercupsembeddedList:
                printercn = printerctl.describe(printername).get('Description')
                if printercn:                   
                    printerfilter = '(cn=' + printercn + ')'
                    logger.debug('filter %s', printerfilter)
                    # run query to ldap server
                    printerentry=provider.listprinter( printerfilter )
                    if len(printerentry) == 1: # Only one printer should be found
                        printerenabledlist.append(printerentry[0])

        return Results.success(result=printerenabledlist)
示例#5
0
 def _getcollection(self, dbname, key):        
     value = None
     if all([dbname, key]):
         value = services.datastore.getcollection(dbname, key)
     if value is None:
         return Results.error('key:%s not found' % key, 404)
     return Results.success(result=value)
示例#6
0
    def logout(self, redirect_uri=None):
        """
        Logout a connected user, remove the desktop
        only if anonymous remove all homedir data
        remove all cookies (by setting empty value)
        Args:
            redirect_uri (str): redirect uri 

        Returns:
            JSON Results

        """
        bReturn = None
        args = cherrypy.request.json
        if services.auth.isidentified:
            user = services.auth.user
            auth = services.auth.auth  
            # remove the pod/container          
            if oc.od.composer.removedesktop(auth, user, args) is False:
                bReturn = Results.error( message='removedesktop failed' )
            # Always remove all http cookies
            services.auth.logout()
            bReturn = Results.success()
        else:
            bReturn = Results.error( message='invalid user credentials' )
        
        return bReturn
示例#7
0
 def refreshtoken(self):
     if services.auth.isidentified:
         user = services.auth.user
         auth = services.auth.auth
         expire_in = oc.od.settings.jwt_config_user.get('exp')    
         services.auth.update_token( auth=auth, user=user, roles=None, expire_in=expire_in )
         services.accounting.accountex('login', 'refreshtoken')
         return Results.success("Authentication successful", {'expire_in': expire_in } )
  
     return Results.error(message='Invalid user')
示例#8
0
    def launchmetappli(self):

        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        if type(cherrypy.request.json) is not dict:
            return Results.error(message='invalid parameters')

        args = cherrypy.request.json.copy()
        appname = args.get('app')
        appargs = args.get('args')
        querystring = args.get('querystring')
        if not appname:
            return Results.error('Missing parameters app')

        # decode appargs URL decode string
        if type(appargs) is str:
            args['args'] = urllib.parse.unquote(appargs)

        if querystring:
            datadict = urllib.parse.parse_qs(querystring)
            keyname = datadict.get('keyname')
            metadata = datadict.get('metadata')
            if type(keyname) is list and len(keyname) > 0:
                keyname = keyname[0]
            if type(metadata) is list and len(metadata) > 0:
                metadata = metadata[0]

            # check if metadata is an encrypted metadata
            if type(keyname) is str and type(metadata) is str:
                if len(keyname) > 0 and len(metadata) > 0:
                    # keyname exists and execmetadata exists
                    metadata = services.keymanager.decode(keyname=keyname,
                                                          enc_data=metadata)
                    if metadata is None:
                        return Results.error(
                            message='invalid encrypted execmetadata parameters'
                        )
            args['metadata'] = metadata

        logger.info('Metappli : %s %s', str(appname), str(appargs))

        preferednodehostname = cherrypy.request.headers.get(
            'Prefered-Nodename')
        self.logger.debug(
            'cherrypy.request.headers.get(Prefered-Nodename) = %s ',
            str(preferednodehostname))

        # add lang to user dict
        self.LocaleSettingsLanguage(user)

        return self._launchdesktop(preferednodehostname, auth, user, args)
示例#9
0
    def getlogs(self):
        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        logs = oc.od.composer.logdesktop(auth, user)
        if logs:
            return Results.success(result=logs)
        return Results.error('failed to read log')
示例#10
0
    def getlocation(self):
        logger.debug('')

        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error( e )
            return Results.error( message=str(e) )
        
        location = oc.od.user.getlocation( auth )
        return Results.success(result=location)
示例#11
0
    def listcontainer(self):
        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        result = oc.od.composer.listContainerApp(auth, user)
        if type(result) is list:
            return Results.success(result=result)
        return Results.error('failed to read container list')
示例#12
0
    def setacl(self):
        # Check auth 
        try:
            (auth, user ) = self.validate_env()
        except Exception as e:
            self.logger.error( e )
            return Results.error( message=str(e) )

        arguments = cherrypy.request.json

        if type(arguments) is not dict:
            return Results.error('bad request invalid parameters')

        return self._addtocollection('acl', arguments.get('key', None), arguments.get('value', None))
示例#13
0
 def destroy_stream(self):
     logger.debug('')
     if services.webrtc is None:
         return Results.error(
             message='WebRTC is disabled in configuration file')
     else:
         return self.rtp_stream(services.webrtc.destroy_stream)
示例#14
0
    def getuserapplist(self):
        logger.debug('')
        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        # list all applications allowed for this user (auth)
        applist = services.apps.user_applist(auth)

        # get the default application list from the config file
        userapplist = settings.get_default_applist()
        userapplist += applist

        return Results.success(result=userapplist)
示例#15
0
 def get_stream(self):
     logger.debug('')
     if services.webrtc is None:
         return Results.error(
             message='WebRTC is disabled in configuration file')
     else:
         # get_stream create or get a previous created stream
         return self.rtp_stream(services.webrtc.get_stream)
示例#16
0
    def collection(self, key):
        # Check auth 
        try:
            (auth, user ) = self.validate_env()
        except Exception as e:
            self.logger.error( e )
            return Results.error( message=str(e) )

        userid = user.userid
        if type(key) is not str:
            return Results.error('bad request invalid parameters')

        # only 'loginHistory' or 'callHistory' is allowed
        if key not in ['loginHistory', 'callHistory']:
            return Results.error('denied key value')

        return self._getcollection(userid, key)
示例#17
0
    def labels(self):
        """[summary]

        Returns:
            [json]: [Results array of labels if auth set]
        """
        self.logger.debug('')
        res = None
        if services.auth.isidentified:
            auth = services.auth.auth
            labels = [] 
            if auth.data and type( auth.data.get('labels') ) is dict :
                for k in auth.data.get('labels').keys():
                    labels.append( str(k) )
            res = Results.success( result=labels) 
        else:
            res = Results.error( message='invalid user credentials' )
        return res
示例#18
0
    def getacl(self):
        # Check auth 
        try:
            (auth, user ) = self.validate_env()
        except Exception as e:
            self.logger.error( e )
            return Results.error( message=str(e) )

        return self._getcollection('acl', cherrypy.request.json.get('key'))
示例#19
0
    def getmessageinfo(self):

        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        message = ''
        if user.userid:
            logger.debug('getmessageinfo::popflush(%s)', user.userid)
            message = services.messageinfo.popflush(user.userid)
            logger.debug('getmessageinfo %s is %s', str(user.userid),
                         str(message))
        else:
            logger.debug('getmessageinfo warning userid is None')

        return Results.success(message, result={'message': message})
示例#20
0
    def issue(self):
        """[summary]
        """
        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        arguments = cherrypy.request.json
        myjira = oc.od.tracker.jiraclient()
        summary = arguments.get('summary', 'summary')
        description = arguments.get('description', 'description')
        issuetype = arguments.get('issue', {'name': 'Bug'})
        new_issue = myjira.issue(description=description,
                                 summary=summary,
                                 issuetype=issuetype)

        return Results.success(result=new_issue)
示例#21
0
    def removedesktop(self, auth, user, args):
        services.accounting.accountex('desktop', 'remove')
        logger.debug('')
        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        return oc.od.composer.removedesktop(auth, user, args)
示例#22
0
    def removecontainer(self):
        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        args = cherrypy.request.json
        if type(args) is not dict:
            return Results.error(message='invalid parameters')

        containerid = args.get('containerid')
        if type(containerid) is not str:
            return Results.error(message='invalid parameter containerid')

        result = oc.od.composer.removeContainerApp(auth, user, containerid)
        if result is not None:
            return Results.success(result=result)
        return Results.error('failed to remove container')
示例#23
0
    def disconnect(self):
        """
            Disconnect a connected user, 
            remove ONLY all cookies (by setting empty value)
            Keep desktop running
        Args:
            None


        Returns:
            JSON Results
        """
        bReturn = None
        if services.auth.isidentified:
            # Always remove all http cookies
            services.auth.logout()
            bReturn = Results.success()
        else:
            bReturn = Results.error( message='invalid user credentials' )  
        return bReturn
示例#24
0
    def refreshdesktoptoken(self):
        logger.debug('')
        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        appname = None
        args = cherrypy.request.json
        if type(args) is dict:
            appname = args.get('app')

        preferednodehostname = services.auth.user.get('nodehostname')
        if preferednodehostname is None:
            self.logger.debug('services.auth.nodehostname is None')
            preferednodehostname = cherrypy.request.headers.get(
                'Prefered-Nodename')

        desktop = oc.od.composer.finddesktop_quiet(authinfo=auth,
                                                   userinfo=user,
                                                   appname=appname)
        if desktop is None:
            return Results.error('refreshdesktoptoken failed')

        # This case should only exist if a desktop is running twice on the same host
        # twice mode standalone in docker mode and kubernetes mode
        if desktop.internaluri is None:
            return Results.error(
                'refreshdesktoptoken Desktop internaluri is None, unreachable')

        # build new jwtdesktop
        jwtdesktoptoken = services.jwtdesktop.encode(desktop.internaluri)
        logger.info('jwttoken is %s -> %s ', desktop.internaluri,
                    jwtdesktoptoken)

        return Results.success(
            result={
                'authorization': jwtdesktoptoken,  # desktop.ipAddr
                'expire_in': services.jwtdesktop.exp()
            })
示例#25
0
    def getcollection(self):

         # Check auth 
        try:
            (auth, user ) = self.validate_env()
        except Exception as e:
            self.logger.error( e )
            return Results.error( message=str(e) )
        
        
        userid = user.userid
        arguments = cherrypy.request.json
        if type(arguments) is not dict:
            return Results.error('bad request invalid parameters')

        key = arguments.get('key')
        # only 'loginHistory' or 'callHistory' is allowed
        if key not in ['loginHistory', 'callHistory']:
            return Results.error('denied key value')

        return self._getcollection(userid, key)
示例#26
0
    def isauthenticated(self):
        """
        Return a result object with auth status 

        Args:
            None

        Returns:
            Results object if user is authenticated

        """
        return Results.success(result=services.auth.isauthenticated)
示例#27
0
    def rtp_stream(self, action=lambda x: x):
        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        if not settings.webrtc_enable:
            return Results.error(
                message='WebRTC is disabled in configuration file')

        if services.webrtc is None:
            return Results.error(message='no WebRTC configuration found')

        appname = None
        args = cherrypy.request.json
        if type(args) is dict:
            appname = args.get('app')

        desktop = oc.od.composer.finddesktop_quiet(authinfo=auth,
                                                   userinfo=user,
                                                   appname=appname)
        if desktop is None:
            return Results.error(message='desktop not found')

        try:
            stream = action(desktop.name)
        except Exception as e:
            return Results.error('webrtc stream failed ' + str(e))

        return Results.success(result=stream)
示例#28
0
    def deleteacl(self):
        # Check auth 
        try:
            (auth, user ) = self.validate_env()
        except Exception as e:
            self.logger.error( e )
            return Results.error( message=str(e) )

        arguments = cherrypy.request.json

        if type(arguments) is not dict:
            return Results.error('bad request invalid parameters')

        dbname = 'acl'

        key = arguments.get('key')
        value = arguments.get('value')

        if all([dbname, key]) and services.datastore.deletestoredvalue(dbname, key, value) is True:
            return Results.success()

        return Results.error('set data error')
示例#29
0
    def setcollection(self):
        # Check auth 
        try:
            (auth, user ) = self.validate_env()
        except Exception as e:
            self.logger.error( e )
            return Results.error( message=str(e) )


        userid = user.userid
        arguments = cherrypy.request.json
        
        if type(arguments) is not dict:
            return Results.error('bad request invalid parameters')

        key = arguments.get('key')
        value = arguments.get('value')

        if key not in ['callHistory']:
            return Results.error('collection name denied')
            
        return self._addtocollection(userid, key, value)        
示例#30
0
    def launchdesktop(self):

        try:
            (auth, user) = self.validate_env()
        except Exception as e:
            logger.error(e)
            return Results.error(message=str(e))

        # add lang to user dict
        self.LocaleSettingsLanguage(user)

        preferednodehostname = services.auth.user.get('nodehostname')
        if preferednodehostname is None:
            self.logger.debug('services.auth.nodehostname is None')
            preferednodehostname = cherrypy.request.headers.get(
                'Prefered-Nodename')

        self.logger.debug(
            'cherrypy.request.headers.get(Prefered-Nodename) = %s ',
            str(preferednodehostname))

        return self._launchdesktop(preferednodehostname, auth, user,
                                   cherrypy.request.json)