Example #1
0
 def get(self):
   instance = LoadBalancer.find(TailboneCustomInstance)
   if not instance:
     raise AppError('Instance not found, try again later.')
   return {
     "ip": instance.address
   }
Example #2
0
def get_or_create_room(request, name=None):
    if not name:
        name, room, address = unique_name()
    else:
        room = room_hash(name)
        address = memcache.get(room)
    if not address:
        if _config.ENABLE_WEBSOCKET:
            if DEBUG:

                class DebugInstance(object):
                    if _config.DEBUG_WEBSOCKET_ADDRESS:
                        address = _config.DEBUG_WEBSOCKET_ADDRESS
                    elif str(request.remote_addr) == "::1":
                        address = "localhost"
                    else:
                        address = request.remote_addr

                instance = DebugInstance()
            else:
                instance = LoadBalancer.find(TailboneWebsocketInstance)
            if not instance:
                raise AppError('Instance not yet ready, try again later.')
            address = "ws://{}:{}/{}".format(instance.address, _config.PORT,
                                             name)
        else:
            address = "/api/channel/{}".format(name)
        if not memcache.add(room, address, time=_config.ROOM_EXPIRATION):
            return get_or_create_room(request, name)
    return name, address
Example #3
0
def get_or_create_room(request, name=None):
  if not name:
    name, room, address = unique_name()
  else:
    room = room_hash(name)
    address = memcache.get(room)
  if not address:
    if _config.ENABLE_WEBSOCKET:
      if DEBUG:
        class DebugInstance(object):
          if _config.DEBUG_WEBSOCKET_ADDRESS:
            address = _config.DEBUG_WEBSOCKET_ADDRESS
          elif str(request.remote_addr) == "::1":
            address = "localhost"
          else:
            address = request.remote_addr
        instance = DebugInstance()
      else:
        instance = LoadBalancer.find(TailboneWebsocketInstance)
      if not instance:
        raise AppError('Instance not yet ready, try again later.')
      address = "ws://{}:{}/{}".format(instance.address, _config.PORT, name)
    else:
      address = "/api/channel/{}".format(name)
    if not memcache.add(room, address, time=_config.ROOM_EXPIRATION):
      return get_or_create_room(request, name)
  return name, address
Example #4
0
 def get(self):
     username = self.request.get("username")
     if not username:
         raise AppError("Must provide username.")
     instance = LoadBalancer.find(TailboneTurnInstance, self.request)
     if not instance:
         raise AppError('Instance not found, try again later.')
     username, password = credentials(username, instance.secret)
     return {
         "username": username,
         "password": password,
         "turn": instance.address
     }
Example #5
0
 def get(self):
   username = self.request.get("username")
   if not username:
     raise AppError("Must provide username.")
   instance = LoadBalancer.find(TailboneTurnInstance, self.request)
   if not instance:
     raise AppError('Instance not found, try again later.')
   username, password = credentials(username, instance.secret)
   return {
     "username": username,
     "password": password,
     "turn": instance.address
   }
Example #6
0
 def get(self, name):
     room, address = get_or_create_room(self.request, name)
     resp = {"name": room}
     if _config.ENABLE_WEBSOCKET:
         resp["ws"] = address
     else:
         resp["channel"] = address
     if _config.ENABLE_TURN and not DEBUG:
         ts = LoadBalancer.find(turn.TailboneTurnInstance)
         if ts:
             username = self.request.get("username", generate_word())
             username, password = turn.credentials(username, ts.secret)
             resp.update({
                 "turn": ts,
                 "username": username,
                 "password": password,
             })
     return resp
 def get(self, name):
   room, address = get_or_create_room(self.request, name)
   resp = {"name": room}
   if _config.ENABLE_WEBSOCKET:
     resp["ws"] = address
   else:
     resp["channel"] = address
   if _config.ENABLE_TURN:
     ts = LoadBalancer.find(turn.TailboneTurnInstance)
     if ts:
       username = self.request.get("username", generate_word())
       username, password = turn.credentials(username, ts.secret)
       resp.update({
         "turn": ts,
         "username": username,
         "password": password,
       })
   return resp
Example #8
0
 def get(self):
     username = self.request.get("username")
     if not username:
         raise AppError("Must provide username.")
     instance = LoadBalancer.find(TailboneTurnInstance)
     if not instance:
         raise AppError('Instance not found, try again later.')
     username, password = credentials(username, instance.secret)
     return {
         "username":
         username,
         "password":
         password,
         "uris": [
             "turn:{}:3478?transport=udp".format(instance.address),
             "turn:{}:3478?transport=tcp".format(instance.address),
         ],
     }
Example #9
0
 def get(self):
   if _config.RESTRICTED_DOMAINS:
     if self.request.host_url not in _config.RESTRICTED_DOMAINS:
       raise AppError("Invalid host.")
   username = self.request.get("username")
   if not username:
     raise AppError("Must provide username.")
   instance = LoadBalancer.find(TailboneTurnInstance)
   if not instance:
     raise AppError('Instance not found, try again later.')
   username, password = credentials(username, instance.secret)
   return {
     "username": username,
     "password": password,
     "uris": [
       "turn:{}:3478?transport=udp".format(instance.address),
       "turn:{}:3478?transport=tcp".format(instance.address)
     ],
   }