Beispiel #1
0
 def create_logger(self):
     if self._daemon is False:
         self.log = StdoutLogger()
         self.log.set_debug()
     else:
         logtype = helpers.get_conf_value(self._config,
                                             'freeswitch', 'LOG_TYPE')
         if logtype == 'file':
             logfile = helpers.get_conf_value(self._config,
                                             'freeswitch', 'LOG_FILE')
             self.log = FileLogger(logfile)
         elif logtype == 'syslog':
             syslogaddress = helpers.get_conf_value(self._config,
                                         'freeswitch', 'SYSLOG_ADDRESS')
             syslogfacility = helpers.get_conf_value(self._config,
                                         'freeswitch', 'SYSLOG_FACILITY')
             self.log = SysLogger(syslogaddress, syslogfacility)
         else:
             self.log = StdoutLogger()
         debug_mode = helpers.get_conf_value(self._config,
                                             'freeswitch', 'DEBUG')
         if debug_mode == 'true':
             self.log.set_debug()
         else:
             self.log.set_info()
Beispiel #2
0
 def do_daemon(self):
     # get user/group from config
     user = helpers.get_conf_value(self._config, "freeswitch", "FS_OUTBOUND_USER")
     group = helpers.get_conf_value(self._config, "freeswitch", "FS_OUTBOUND_GROUP")
     if not user or not group:
         uid = os.getuid()
         user = pwd.getpwuid(uid)[0]
         gid = os.getgid()
         group = grp.getgrgid(gid)[0]
     # daemonize now
     plivo.utils.daemonize.daemon(user, group, path="/", pidfile=self._pidfile, other_groups=())
Beispiel #3
0
 def _validate_http_auth(self):
     """Verify http auth request with values in "Authorization" header
     """
     key = get_conf_value(self._config, 'rest_server', 'AUTH_ID')
     secret = get_conf_value(self._config, 'rest_server', 'AUTH_TOKEN')
     if not key or not secret:
         return True
     try:
         auth_type, encoded_auth_str = \
             request.headers['Authorization'].split(' ', 1)
         if auth_type == 'Basic':
             decoded_auth_str = base64.decodestring(encoded_auth_str)
             auth_id, auth_token = decoded_auth_str.split(':', 1)
             if auth_id == key and secret == auth_token:
                 return True
     except (KeyError, ValueError, TypeError):
         pass
     raise Unauthorized("HTTP Auth Failed")
Beispiel #4
0
 def _validate_http_auth(self):
     """Verify http auth request with values in "Authorization" header
     """
     key = get_conf_value(self._config, 'rest_server', 'AUTH_ID')
     secret = get_conf_value(self._config, 'rest_server', 'AUTH_TOKEN')
     if not key or not secret:
         return True
     if 'Authorization' in request.headers:
         auth_header = request.headers['Authorization'].split()
         if auth_header[0] == 'Basic':
             encoded_auth_str = auth_header[1]
             decoded_auth_str = base64.decodestring(encoded_auth_str)
             auth_list = decoded_auth_str.split(':')
             auth_id = auth_list[0]
             auth_token = auth_list[1]
             if auth_id == key and secret == auth_token:
                 return True
     raise Unauthorized("HTTP Auth Failed")
Beispiel #5
0
    def create_logger(self):
        """This will create a logger

        Based on the settings in the configuration file,
        LOG_TYPE will determine if we will log in file, syslog or stdout

        To log in file we use the following setting :
        LOG_FILE = /tmp/plivo-rest.log

        To log to syslog we have several settings to configure the logging :
            * LOG_TYPE = syslog
            * SYSLOG_ADDRESS = /dev/log
            * SYSLOG_FACILITY = local0
        """

        if self._daemon is False:
            self.log = StdoutLogger()
            self.log.set_debug()
            self.app.debug = True
        else:
            logtype = helpers.get_conf_value(self._config,
                                                'rest_server', 'LOG_TYPE')
            if logtype == 'file':
                logfile = helpers.get_conf_value(self._config,
                                                'rest_server', 'LOG_FILE')
                self.log = FileLogger(logfile)
            elif logtype == 'syslog':
                syslogaddress = helpers.get_conf_value(self._config,
                                            'rest_server', 'SYSLOG_ADDRESS')
                syslogfacility = helpers.get_conf_value(self._config,
                                            'rest_server', 'SYSLOG_FACILITY')
                self.log = SysLogger(syslogaddress, syslogfacility)
            else:
                self.log = StdoutLogger()

            debug_mode = helpers.get_conf_value(self._config,
                                                    'rest_server', 'DEBUG')
            if  debug_mode == 'true':
                self.log.set_debug()
                self.app.debug = True
            else:
                self.log.set_info()
        self.log.name = self.name
        self.app._logger = self.log
Beispiel #6
0
 def _validate_ip_auth(self):
     """Verify request is from allowed ips
     """
     allowed_ips = get_conf_value(self._config, 'rest_server',
                                  'ALLOWED_IPS')
     if not allowed_ips:
         return True
     for ip in allowed_ips.split(','):
         if ip.strip() == request.remote_addr.strip():
             return True
     raise Unauthorized("IP Auth Failed")
Beispiel #7
0
 def create_logger(self):
     if self._daemon is False:
         self.log = StdoutLogger()
         self.log.set_debug()
     else:
         logtype = helpers.get_conf_value(self._config, "freeswitch", "LOG_TYPE")
         if logtype == "file":
             logfile = helpers.get_conf_value(self._config, "freeswitch", "LOG_FILE")
             self.log = FileLogger(logfile)
         elif logtype == "syslog":
             syslogaddress = helpers.get_conf_value(self._config, "freeswitch", "SYSLOG_ADDRESS")
             syslogfacility = helpers.get_conf_value(self._config, "freeswitch", "SYSLOG_FACILITY")
             self.log = SysLogger(syslogaddress, syslogfacility)
         else:
             self.log = StdoutLogger()
         debug_mode = helpers.get_conf_value(self._config, "freeswitch", "DEBUG")
         if debug_mode == "true":
             self.log.set_debug()
         else:
             self.log.set_info()
Beispiel #8
0
    def __init__(self, config, daemon=False,
                            pidfile='/tmp/plivo_outbound.pid'):
        self._request_id = 0
        self._daemon = daemon
        self._run = False
        self._pidfile = pidfile
        # load config
        self._config = config
        # create logger
        self.create_logger()
        # create outbound server
        self.fs_outbound_address = helpers.get_conf_value(self._config,
                                        'freeswitch', 'FS_OUTBOUND_ADDRESS')
        fs_host, fs_port = self.fs_outbound_address.split(':', 1)
        fs_port = int(fs_port)
        self.default_answer_url = helpers.get_conf_value(self._config,
                                        'freeswitch', 'DEFAULT_ANSWER_URL')
        self.auth_id = helpers.get_conf_value(self._config,
                                        'rest_server', 'AUTH_ID')
        self.auth_token = helpers.get_conf_value(self._config,
                                        'rest_server', 'AUTH_TOKEN')
        self.default_hangup_url = helpers.get_conf_value(self._config,
                                        'freeswitch', 'DEFAULT_HANGUP_URL')
        self.default_http_method = helpers.get_conf_value(self._config,
                                        'rest_server', 'DEFAULT_HTTP_METHOD')
        if not self.default_http_method in ('GET', 'POST'):
            self.default_http_method = 'POST'

        # This is where we define the connection with the
        # Plivo XML element Processor
        multiprocserver.OutboundServer.__init__(self, (fs_host, fs_port),
                            PlivoOutboundEventSocket, filter=None)
Beispiel #9
0
 def __init__(self, configfile, daemon=False, pidfile="/tmp/plivo_outbound.pid", filter=None):
     self._request_id = 0
     self._daemon = daemon
     self._run = False
     self._pidfile = pidfile
     # load config
     self._config = helpers.get_config(configfile)
     # create logger
     self.create_logger()
     # create outbound server
     self.fs_outbound_address = helpers.get_conf_value(self._config, "freeswitch", "FS_OUTBOUND_ADDRESS")
     fs_host, fs_port = self.fs_outbound_address.split(":", 1)
     fs_port = int(fs_port)
     self.default_answer_url = helpers.get_conf_value(self._config, "freeswitch", "DEFAULT_ANSWER_URL")
     self.auth_id = helpers.get_conf_value(self._config, "rest_server", "AUTH_ID")
     self.auth_token = helpers.get_conf_value(self._config, "rest_server", "AUTH_TOKEN")
     self.default_hangup_url = helpers.get_conf_value(self._config, "freeswitch", "DEFAULT_HANGUP_URL")
     # default hangup_url is answer_url
     if not self.default_hangup_url:
         self.default_hangup_url = self.default_answer_url
     # This is where we define the connection with the
     # Plivo XML grammar Processor
     OutboundServer.__init__(self, (fs_host, fs_port), PlivoOutboundEventSocket, filter)
Beispiel #10
0
    def do_daemon(self):
        """This will daemonize the current application

        Two settings from our configuration files are also used to run the
        daemon under a determine user & group.

        REST_SERVER_USER : determine the user running the daemon
        REST_SERVER_GROUP : determine the group running the daemon
        """
        # get user/group from config
        user = helpers.get_conf_value(self._config,
                                        'rest_server', 'REST_SERVER_USER')
        group = helpers.get_conf_value(self._config,
                                        'rest_server', 'REST_SERVER_GROUP')
        if not user or not group:
            uid = os.getuid()
            user = pwd.getpwuid(uid)[0]
            gid = os.getgid()
            group = grp.getgrgid(gid)[0]
        # daemonize now
        plivo.utils.daemonize.daemon(user, group, path='/',
                                     pidfile=self._pidfile, 
                                     other_groups=())
Beispiel #11
0
    def __init__(self, configfile, daemon=False,
                    pidfile='/tmp/plivo_outbound.pid'):
        self._config = helpers.get_config(configfile)
        self._handler_mode = helpers.get_conf_value(self._config,
                                    'freeswitch', 'FS_OUTBOUND_HANDLER')

        if self._handler_mode == 'thread':
            self.server = PlivoThreadOutboundServer(self._config,
                                        daemon, pidfile)
        elif self._handler_mode == 'process':
            self.server = PlivoProcessOutboundServer(self._config,
                                        daemon, pidfile)
        else:
            self.server = PlivoSpawnOutboundServer(self._config,
                                        daemon, pidfile)
Beispiel #12
0
 def test_config(self):
     '''Test to get config parameter'''
     return get_conf_value(self._config, 'freeswitch', 'FS_INBOUND_ADDRESS')
Beispiel #13
0
    def __init__(self, configfile, daemon=False,
                        pidfile='/tmp/plivo_rest.pid'):
        """Constructor

        Initialize main properties such as daemon, pidfile, config, etc...

        This will init the http server that will provide the Rest interface,
        the rest server is configured on HTTP_ADDRESS

        Extra:
        * FS_INBOUND_ADDRESS : Define the event_socket interface to connect to
        in order to initialize CallSession with Freeswitch

        * FS_OUTBOUND_ADDRESS : Define where on which address listen to
        initialize event_socket session with Freeswitch in order to control
        new CallSession

        """
        self._daemon = daemon
        self._run = False
        self._pidfile = pidfile
        # load config
        self._config = helpers.get_config(configfile)
        # create flask app
        self.app = Flask(self.name)
        self.app.secret_key = helpers.get_conf_value(self._config,
                                                'rest_server', 'SECRET_KEY')
        self.app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024
        # create logger
        self.create_logger()
        # create rest server
        self.fs_inbound_address = helpers.get_conf_value(self._config,
                                        'freeswitch', 'FS_INBOUND_ADDRESS')
        fs_host, fs_port = self.fs_inbound_address.split(':', 1)
        fs_port = int(fs_port)
        fs_password = helpers.get_conf_value(self._config,
                                                'freeswitch', 'FS_PASSWORD')
        # get auth id and auth token
        self.auth_id = helpers.get_conf_value(self._config,
                                        'rest_server', 'AUTH_ID')
        self.auth_token = helpers.get_conf_value(self._config,
                                        'rest_server', 'AUTH_TOKEN')
        # get outbound socket host/port
        fs_out_address = helpers.get_conf_value(self._config,
                                        'freeswitch', 'FS_OUTBOUND_ADDRESS')
        fs_out_host, fs_out_port  = fs_out_address.split(':', 1)
        # if outbound host is 0.0.0.0, send to 127.0.0.1
        if fs_out_host == '0.0.0.0':
            fs_out_address = '127.0.0.1:%s' % fs_out_port
        # create inbound socket instance
        self._rest_inbound_socket = RESTInboundSocket(fs_host, fs_port,
                                                    fs_password, 
                                                    outbound_address=fs_out_address,
                                                    auth_id=self.auth_id,
                                                    auth_token=self.auth_token,
                                                    filter='ALL',
                                                    log=self.log)
        # expose api functions to flask app
        for path, func_desc in urls.URLS.iteritems():
            func, methods = func_desc
            fn = getattr(self, func.__name__)
            self.app.add_url_rule(path, func.__name__, fn, methods=methods)
        # create wsgi server
        self.http_address = helpers.get_conf_value(self._config,
                                            'rest_server', 'HTTP_ADDRESS')
        http_host, http_port = self.http_address.split(':', 1)
        http_port = int(http_port)
        self.http_server = WSGIServer((http_host, http_port),
                                       self.app, log=self.log)