class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." def prepare(self): super(MainIndex, self).prepare() self.json_payload = [] if not self.user: self.user = User(1) self.user.ensure_api_key(self.request.remote_ip) self.user.data['sid'] = self.sid def append(self, key, value): self.json_payload.append({key: value}) def get(self): info.attach_info_to_request(self, playlist=True, artists=True) self.append("api_info", {"time": int(time.time())}) self.set_header("Content-Type", "text/plain") self.render("index.html", request=self, site_description=self.locale.translate( "station_description_id_%s" % self.sid), revision_number=config.get("revision_number"), api_url=config.get("api_external_url_prefix"), cookie_domain=config.get("cookie_domain"))
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." auth_required = False login_required = False sid_required = False def prepare(self): super(MainIndex, self).prepare() self.json_payload = [] if not self.user: self.user = User(1) self.user.ensure_api_key(self.request.remote_ip) self.user.data['sid'] = self.sid def append(self, key, value): self.json_payload.append({ key: value }) def get(self): info.attach_info_to_request(self, all_lists=True) self.append("api_info", { "time": int(time.time()) }) self.render("index.html", request=self, site_description=self.locale.translate("station_description_id_%s" % self.sid), revision_number=config.build_number, api_url=config.get("api_external_url_prefix"), cookie_domain=config.get("cookie_domain"), locales=api.locale.locale_names_json)
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." auth_required = False login_required = False sid_required = False def prepare(self): super(MainIndex, self).prepare() self.json_payload = [] if not self.user: self.user = User(1) self.user.ensure_api_key(self.request.remote_ip) self.user.data['sid'] = self.sid def append(self, key, value): self.json_payload.append({key: value}) def get(self): info.attach_info_to_request(self, all_lists=True) self.append("api_info", {"time": int(time.time())}) self.render("index.html", request=self, site_description=self.locale.translate( "station_description_id_%s" % self.sid), revision_number=config.build_number, api_url=config.get("api_external_url_prefix"), cookie_domain=config.get("cookie_domain"), locales=api.locale.locale_names_json)
class Bootstrap(api.web.APIHandler): description = ( "Bootstrap a Rainwave client. Provides user info, API key, station info, relay info, and more. " "If you run a GET query to this URL, you will receive a Javascript file containing a single variable called BOOTSTRAP. While this is largely intended for the purposes of the main site, you may use this. " "If you run a POST query to this URL, you will receive a JSON object." ) phpbb_auth = True auth_required = False login_required = False sid_required = False allow_get = False def prepare(self): super(Bootstrap, self).prepare() if not self.user: self.user = User(1) self.user.ensure_api_key() # def finish(self, *args, **kwargs): # self.write_output() # super(Bootstrap, self).finish(*args, **kwargs) def get(self): self.set_header("Content-Type", "text/javascript") self.append("locales", api.locale.locale_names) self.append("cookie_domain", config.get("cookie_domain")) self.post() self.write("var BOOTSTRAP=") def post(self): info.attach_info_to_request(self, extra_list=self.get_cookie("r4_active_list")) self.append("stream_filename", config.get_station(self.sid, "stream_filename")) self.append("station_list", config.station_list) self.append("relays", config.public_relays[self.sid])
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." auth_required = config.has("index_requires_login") and config.get("index_requires_login") login_required = config.has("index_requires_login") and config.get("index_requires_login") sid_required = False beta = False page_template = "r4_index.html" js_dir = "js4" def set_default_headers(self): self.set_header("X-Frame-Options", "SAMEORIGIN") def prepare(self): super(MainIndex, self).prepare() self.json_payload = {} self.jsfiles = None if not self.user: self.user = User(1) self.user.ensure_api_key() if self.beta or config.get("web_developer_mode") or config.get("developer_mode") or config.get("test_mode"): buildtools.bake_beta_css() buildtools.bake_beta_templates() self.jsfiles = [] for root, subdirs, files in os.walk( os.path.join(os.path.dirname(__file__), "../static/%s" % self.js_dir) ): # pylint: disable=W0612 for f in files: if f.endswith(".js"): self.jsfiles.append(os.path.join(root[root.find("static/%s" % self.js_dir) :], f)) def append(self, key, value): self.json_payload[key] = value def get(self): self.mobile = ( self.request.headers.get("User-Agent").lower().find("mobile") != -1 or self.request.headers.get("User-Agent").lower().find("android") != -1 ) if not self.beta: info.attach_info_to_request(self, extra_list=self.get_cookie("r4_active_list")) self.append("api_info", {"time": int(timestamp())}) self.render( self.page_template, request=self, site_description=self.locale.translate("station_description_id_%s" % self.sid), revision_number=config.build_number, jsfiles=self.jsfiles, api_url=config.get("api_external_url_prefix"), cookie_domain=config.get("cookie_domain"), locales=api.locale.locale_names_json, relays=config.public_relays_json[self.sid], stream_filename=config.get_station(self.sid, "stream_filename"), station_list=config.station_list_json, apple_home_screen_icon=config.get_station(self.sid, "apple_home_screen_icon"), mobile=self.mobile, )
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." auth_required = False login_required = False sid_required = False beta = False page_template = "r4_index.html" def prepare(self): super(MainIndex, self).prepare() self.json_payload = {} self.jsfiles = None if not self.user: self.user = User(1) self.user.ensure_api_key() if self.beta or config.get("web_developer_mode") or config.get( "developer_mode") or config.get("test_mode"): buildtools.bake_beta_css() self.jsfiles = [] for root, subdirs, files in os.walk( os.path.join(os.path.dirname(__file__), "../static/js4")): for f in files: self.jsfiles.append( os.path.join(root[root.find("static/js4"):], f)) def append(self, key, value): self.json_payload[key] = value def get(self): self.mobile = self.request.headers.get("User-Agent").lower().find( "mobile") != -1 or self.request.headers.get( "User-Agent").lower().find("android") != -1 info.attach_info_to_request( self, extra_list=self.get_cookie("r4_active_list")) self.append("api_info", {"time": int(time.time())}) self.render(self.page_template, request=self, site_description=self.locale.translate( "station_description_id_%s" % self.sid), revision_number=config.build_number, jsfiles=self.jsfiles, api_url=config.get("api_external_url_prefix"), cookie_domain=config.get("cookie_domain"), locales=api.locale.locale_names_json, relays=config.public_relays_json[self.sid], stream_filename=config.get_station(self.sid, "stream_filename"), station_list=config.station_list_json, mobile=self.mobile)
class Bootstrap(api.web.APIHandler): description = ( "Bootstrap a Rainwave client. Provides user info, API key, station info, relay info, and more. " "If you run a GET query to this URL, you will receive a Javascript file containing a single variable called BOOTSTRAP. While this is largely intended for the purposes of the main site, you may use this. " "If you run a POST query to this URL, you will receive a JSON object of the same data." ) phpbb_auth = True auth_required = False login_required = False sid_required = False allow_get = False is_mobile = False content_type = "text/javascript" def prepare(self): super(Bootstrap, self).prepare() if not self.user: self.user = User(1) self.user.ensure_api_key() self.is_mobile = ( self.request.headers.get("User-Agent").lower().find("mobile") != -1 or self.request.headers.get("User-Agent").lower().find("android") != -1) def get(self): # pylint: disable=method-hidden self.post() if self.is_mobile: self.write("window.MOBILE = true;") else: self.write("window.MOBILE = false;") self.write("var BOOTSTRAP=") def post(self): info.attach_info_to_request(self, live_voting=True) self.append("build_version", config.build_number) self.append("locale", self.locale.code) self.append("locales", api.locale.locale_names) self.append("cookie_domain", config.get("cookie_domain")) self.append("on_init", []) self.append("on_measure", []) self.append("on_draw", []) self.append("websocket_host", config.get("websocket_host")) self.append("stream_filename", config.get_station(self.sid, "stream_filename")) self.append("station_list", config.station_list) self.append("relays", config.public_relays[self.sid]) if self.is_mobile: self.append("mobile", True) else: self.append("mobile", False)
class Bootstrap(api.web.APIHandler): description = ( "Bootstrap a Rainwave client. Provides user info, API key, station info, relay info, and more. " "If you run a GET query to this URL, you will receive a Javascript file containing a single variable called BOOTSTRAP. While this is largely intended for the purposes of the main site, you may use this. " "If you run a POST query to this URL, you will receive a JSON object of the same data." ) phpbb_auth = True auth_required = False login_required = False sid_required = False allow_get = False def prepare(self): super(Bootstrap, self).prepare() if not self.user: self.user = User(1) self.user.ensure_api_key() self.is_mobile = self.request.headers.get("User-Agent").lower().find("mobile") != -1 or self.request.headers.get("User-Agent").lower().find("android") != -1 def get(self): self.set_header("Content-Type", "text/javascript") self.post() if self.is_mobile: self.write("window.MOBILE = true;") else: self.write("window.MOBILE = false;") self.write("var BOOTSTRAP=") def post(self): info.attach_info_to_request(self, live_voting=True) self.append("build_version", config.build_number) self.append("locale", self.locale.code) self.append("locales", api.locale.locale_names) self.append("cookie_domain", config.get("cookie_domain")) self.append("on_init", []) self.append("on_measure", []) self.append("on_draw", []) self.append("websocket_host", config.get("websocket_host")) self.append("stream_filename", config.get_station(self.sid, "stream_filename")) self.append("station_list", config.station_list) self.append("relays", config.public_relays[self.sid]) if self.is_mobile: self.append("mobile", True) else: self.append("mobile", False)
def setup_rainwave_session_and_redirect(self, user_id, destination): session_id = str(uuid.uuid4()) db.c.update( "INSERT INTO r4_sessions (session_id, user_id) VALUES (%s, %s)", (session_id, user_id,) ) self.set_cookie("r4_session_id", session_id) if destination == "app" or destination == "rw": user = User(user_id) user.authorize(1, None, bypass=True) self.redirect("rw://%s:%[email protected]" % (user.id, user.ensure_api_key()),) elif destination == "rwpath": user = User(user_id) user.authorize(1, None, bypass=True) self.redirect("rwpath://rainwave.cc/%s/%s" % (user.id, user.ensure_api_key()),) else: self.redirect("/")
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." auth_required = False login_required = False sid_required = False beta = False def prepare(self): super(MainIndex, self).prepare() self.json_payload = {} self.jsfiles = None if not self.user: self.user = User(1) self.user.ensure_api_key(self.request.remote_ip) if self.beta or config.get("web_developer_mode") or config.get("developer_mode") or config.get("test_mode"): buildtools.bake_css() self.jsfiles = [] for root, subdirs, files in os.walk(os.path.join(os.path.dirname(__file__), "../static/js4")): for f in files: self.jsfiles.append(os.path.join(root[root.find("static/js4"):], f)) def append(self, key, value): self.json_payload[key] = value def get(self): info.attach_info_to_request(self, extra_list=self.get_cookie("r4_active_list")) self.append("api_info", { "time": int(time.time()) }) mobile = self.request.headers.get("User-Agent").lower().find("mobile") != -1 or self.request.headers.get("User-Agent").lower().find("android") != -1 self.render("r4_index.html", request=self, site_description=self.locale.translate("station_description_id_%s" % self.sid), revision_number=config.build_number, jsfiles=self.jsfiles, api_url=config.get("api_external_url_prefix"), cookie_domain=config.get("cookie_domain"), locales=api.locale.locale_names_json, relays=config.public_relays_json[self.sid], stream_filename=config.get_station(self.sid, "stream_filename"), station_list=config.station_list_json, mobile=mobile)
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." def prepare(self): super(MainIndex, self).prepare() self.json_payload = [] if not self.user: self.user = User(1) self.user.ensure_api_key(self.request.remote_ip) self.user.data['sid'] = self.sid def append(self, key, value): self.json_payload.append({ key: value }) def get(self): info.attach_info_to_request(self, playlist=True, artists=True) self.append("api_info", { "time": int(time.time()) }) self.set_header("Content-Type", "text/plain") self.render("index.html", request=self, site_description=self.locale.translate("station_description_id_%s" % self.sid), revision_number=config.get("revision_number"), api_url=config.get("api_external_url_prefix"), cookie_domain=config.get("cookie_domain"))
class MainIndex(tornado.web.RequestHandler): def prepare(self): # TODO: Language self.info = [] self.sid = fieldtypes.integer(self.get_cookie("r4sid", "1")) if not self.sid: self.sid = 1 if self.request.host == "game.rainwave.cc": self.sid = 1 elif self.request.host == "ocr.rainwave.cc": self.sid = 2 elif self.request.host == "covers.rainwave.cc" or self.request.host == "cover.rainwave.cc": self.sid = 3 elif self.request.host == "chiptune.rainwave.cc": self.sid = 4 elif self.request.host == "all.rainwave.cc": self.sid = 5 self.set_cookie("r4sid", str(self.sid), expires_days=365, domain=".rainwave.cc") self.user = None if not fieldtypes.integer(self.get_cookie("phpbb3_38ie8_u", "")): self.user = User(1) else: user_id = int(self.get_cookie("phpbb3_38ie8_u")) if self.get_cookie("phpbb3_38ie8_sid"): session_id = db.c_old.fetch_var("SELECT session_id FROM phpbb_sessions WHERE session_id = %s AND session_user_id = %s", (self.get_cookie("phpbb3_38ie8_sid"), user_id)) if session_id: db.c_old.update("UPDATE phpbb_sessions SET session_last_visit = %s, session_page = %s WHERE session_id = %s", (time.time(), "rainwave", session_id)) self.user = User(user_id) self.user.authorize(self.sid, None, None, True) if not self.user and self.get_cookie("phpbb3_38ie8_k"): can_login = db.c_old.fetch_var("SELECT 1 FROM phpbb_sessions_keys WHERE key_id = %s AND user_id = %s", (hashlib.md5(self.get_cookie("phpbb3_38ie8_k")).hexdigest(), user_id)) if can_login == 1: self.user = User(user_id) self.user.authorize(self.sid, None, None, True) if not self.user: self.user = User(1) self.user.ensure_api_key(self.request.remote_ip) self.user.data['sid'] = self.sid # this is so that get_info can be called, makes us compatible with the custom web handler used elsewhere in RW def append(self, key, value): self.info.append({ key: value }) def get(self): info.attach_info_to_request(self) self.set_header("Content-Type", "text/plain") self.render("index.html", user=self.user, info=tornado.escape.json_encode(self.info), sid=self.sid) # @handle_url("authtest_beta") # class BetaIndex(MainIndex): # def get(self): # if self.user.data['group_id'] not in (5, 4, 8, 12, 15, 14, 17): # self.send_error(403) # else: # info.attach_info_to_request(self) # self.set_header("Content-Type", "text/plain") # self.render("index.html", user=self.user, info=tornado.escape.json_encode(self.info), sid=self.sid)
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." auth_required = config.has("index_requires_login") and config.get( "index_requires_login") login_required = config.has("index_requires_login") and config.get( "index_requires_login") sid_required = False beta = False page_template = "r5_index.html" js_dir = "js5" def set_default_headers(self): self.set_header("X-Frame-Options", "SAMEORIGIN") def prepare(self): super(MainIndex, self).prepare() if not cache.get_station(self.sid, "sched_current"): raise APIException( "server_just_started", "Rainwave is Rebooting, Please Try Again in a Few Minutes", http_code=500) # self.json_payload = {} self.jsfiles = None if not self.user: self.user = User(1) self.user.ensure_api_key() if self.beta or config.get("web_developer_mode") or config.get( "developer_mode") or config.get("test_mode"): buildtools.bake_beta_css() buildtools.bake_beta_templates() self.jsfiles = [] for root, subdirs, files in os.walk( os.path.join(os.path.dirname(__file__), "../static/%s" % self.js_dir)): #pylint: disable=W0612 for f in files: if f.endswith(".js"): self.jsfiles.append( os.path.join( root[root.find("static/%s" % self.js_dir):], f)) # def append(self, key, value): # self.json_payload[key] = value def get(self): self.mobile = self.request.headers.get("User-Agent").lower().find( "mobile") != -1 or self.request.headers.get( "User-Agent").lower().find("android") != -1 # if not self.beta: # info.attach_info_to_request(self, extra_list=self.get_cookie("r4_active_list")) # self.append("api_info", { "time": int(timestamp()) }) page_title = None if (self.sid == config.get("default_station")): page_title = self.locale.translate("page_title_on_google") else: page_title = "%s %s" % ( self.locale.translate("page_title_on_google"), self.locale.translate("station_name_%s" % self.sid)) self.render( self.page_template, request=self, site_description=self.locale.translate( "station_description_id_%s" % self.sid), revision_number=config.build_number, jsfiles=self.jsfiles, # api_url=config.get("api_external_url_prefix"), # cookie_domain=config.get("cookie_domain"), # locales=api.locale.locale_names_json, # relays=config.public_relays_json[self.sid], # stream_filename=config.get_station(self.sid, "stream_filename"), # station_list=config.station_list_json, mobile=self.mobile, station_name=page_title, dj=self.user.is_dj())
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." auth_required = config.has("index_requires_login") and config.get("index_requires_login") login_required = config.has("index_requires_login") and config.get("index_requires_login") sid_required = False beta = False page_template = "r5_index.html" js_dir = "js5" def set_default_headers(self): self.set_header("X-Frame-Options", "SAMEORIGIN") def prepare(self): super(MainIndex, self).prepare() if not cache.get_station(self.sid, "sched_current"): raise APIException( "server_just_started", "Rainwave is Rebooting, Please Try Again in a Few Minutes", http_code=500 ) # self.json_payload = {} self.jsfiles = None if not self.user: self.user = User(1) self.user.ip_address = self.request.remote_ip self.user.ensure_api_key() if self.beta or config.get("web_developer_mode") or config.get("developer_mode") or config.get("test_mode"): buildtools.bake_beta_css() buildtools.bake_beta_templates() self.jsfiles = [] for root, subdirs, files in os.walk( os.path.join(os.path.dirname(__file__), "../static/%s" % self.js_dir) ): # pylint: disable=W0612 for f in files: if f.endswith(".js"): self.jsfiles.append(os.path.join(root[root.find("static/%s" % self.js_dir) :], f)) # def append(self, key, value): # self.json_payload[key] = value def get(self): self.mobile = ( self.request.headers.get("User-Agent").lower().find("mobile") != -1 or self.request.headers.get("User-Agent").lower().find("android") != -1 ) # if not self.beta: # info.attach_info_to_request(self, extra_list=self.get_cookie("r4_active_list")) # self.append("api_info", { "time": int(timestamp()) }) page_title = None if self.sid == config.get("default_station"): page_title = self.locale.translate("page_title_on_google") else: page_title = "%s %s" % ( self.locale.translate("page_title_on_google"), self.locale.translate("station_name_%s" % self.sid), ) self.render( self.page_template, request=self, site_description=self.locale.translate("station_description_id_%s" % self.sid), revision_number=config.build_number, jsfiles=self.jsfiles, # api_url=config.get("api_external_url_prefix"), # cookie_domain=config.get("cookie_domain"), # locales=api.locale.locale_names_json, # relays=config.public_relays_json[self.sid], # stream_filename=config.get_station(self.sid, "stream_filename"), # station_list=config.station_list_json, mobile=self.mobile, station_name=page_title, dj=self.user.is_dj(), )
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." auth_required = config.has("index_requires_login") and config.get( "index_requires_login" ) login_required = config.has("index_requires_login") and config.get( "index_requires_login" ) sid_required = False beta = False page_template = "r5_index.html" js_dir = "js5" jsfiles = None def set_default_headers(self): self.set_header("X-Frame-Options", "SAMEORIGIN") self.set_header("X-XSS-Protection", "1; mode=block") self.set_header("X-Content-Type-Options", "nosniff") if self.request.protocol == "https": self.set_header("Content-Security-Policy", config.csp_header) self.set_header("Referrer-Policy", "origin") self.set_header("Strict-Transport-Security", "max-age=63072000; preload") def prepare(self): if self.path_kwargs.get("station"): self.sid = config.stream_filename_to_sid.get(self.path_kwargs["station"]) if not self.sid: self.redirect(config.get("base_site_url")) return super(MainIndex, self).prepare() if self.path_kwargs.get("station") is None: self.redirect( "{}{}/".format( config.get("base_site_url"), config.station_mount_filenames[self.sid], ) ) return if config.get("enforce_ssl") and self.request.protocol != "https": self.redirect( "{}{}/".format( config.get("base_site_url"), config.station_mount_filenames[self.sid], ) ) return if not config.get("developer_mode") and self.request.host != config.get( "hostname" ): self.redirect( "{}{}/".format( config.get("base_site_url"), config.station_mount_filenames[self.sid], ) ) return if not cache.get_station(self.sid, "sched_current"): raise APIException( "server_just_started", "Rainwave is Rebooting, Please Try Again in a Few Minutes", http_code=500, ) self.jsfiles = None if not self.user: self.user = User(1) self.user.ip_address = self.request.remote_ip self.user.ensure_api_key() if ( self.beta or config.get("developer_mode") ): buildtools.bake_beta_css() buildtools.bake_beta_templates() self.jsfiles = [] for root, _subdirs, files in os.walk( os.path.join(os.path.dirname(__file__), "../static/%s" % self.js_dir) ): for f in files: if f.endswith(".js"): self.jsfiles.append( os.path.join( root[root.find("static/%s" % self.js_dir) :], f ) ) def get(self, station=None): self.mobile = False ua = self.request.headers.get("User-Agent") or '' if ua: self.mobile = ( ua.lower().find("mobile") != -1 or ua.lower().find("android") != -1 ) page_title = None if self.sid == config.get("default_station"): page_title = self.locale.translate("page_title_on_google") else: page_title = "%s %s" % ( self.locale.translate("page_title_on_google"), self.locale.translate("station_name_%s" % self.sid), ) self.render( self.page_template, request=self, site_description=self.locale.translate( "station_description_id_%s" % self.sid ), revision_number=config.build_number, jsfiles=self.jsfiles, mobile=self.mobile, station_name=page_title, dj=self.user.is_dj(), )
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." auth_required = config.has("index_requires_login") and config.get( "index_requires_login") login_required = config.has("index_requires_login") and config.get( "index_requires_login") sid_required = False beta = False page_template = "r5_index.html" js_dir = "js5" def set_default_headers(self): self.set_header("X-Frame-Options", "SAMEORIGIN") self.set_header("X-XSS-Protection", "1; mode=block") self.set_header("X-Content-Type-Options", "nosniff") if self.request.protocol == 'https': self.set_header("Content-Security-Policy", config.csp_header) self.set_header("Referrer-Policy", "origin") self.set_header("Strict-Transport-Security", "max-age=63072000; includeSubDomains; preload") def prepare(self): if self.path_kwargs.get('station'): self.sid = config.stream_filename_to_sid.get( self.path_kwargs['station']) if not self.sid: self.redirect(config.get("base_site_url")) return super(MainIndex, self).prepare() if self.path_kwargs.get('station') is None: self.redirect("{}{}/".format( config.get("base_site_url"), config.station_mount_filenames[self.sid]), permanent=True) return if config.get("enforce_ssl") and self.request.protocol != "https": self.redirect("{}{}/".format( config.get("base_site_url"), config.station_mount_filenames[self.sid]), permanent=True) return if not config.get("developer_mode" ) and self.request.host != config.get("hostname"): self.redirect("{}{}/".format( config.get("base_site_url"), config.station_mount_filenames[self.sid]), permanent=True) return if not cache.get_station(self.sid, "sched_current"): raise APIException( "server_just_started", "Rainwave is Rebooting, Please Try Again in a Few Minutes", http_code=500) # self.json_payload = {} self.jsfiles = None if not self.user: self.user = User(1) self.user.ip_address = self.request.remote_ip self.user.ensure_api_key() if self.beta or config.get("web_developer_mode") or config.get( "developer_mode") or config.get("test_mode"): buildtools.bake_beta_css() buildtools.bake_beta_templates() self.jsfiles = [] for root, subdirs, files in os.walk( os.path.join(os.path.dirname(__file__), "../static/%s" % self.js_dir)): #pylint: disable=W0612 for f in files: if f.endswith(".js"): self.jsfiles.append( os.path.join( root[root.find("static/%s" % self.js_dir):], f)) # def append(self, key, value): # self.json_payload[key] = value def get(self, station=None): self.mobile = self.request.headers.get("User-Agent").lower().find( "mobile") != -1 or self.request.headers.get( "User-Agent").lower().find("android") != -1 # if not self.beta: # info.attach_info_to_request(self, extra_list=self.get_cookie("r4_active_list")) # self.append("api_info", { "time": int(timestamp()) }) page_title = None if (self.sid == config.get("default_station")): page_title = self.locale.translate("page_title_on_google") else: page_title = "%s %s" % ( self.locale.translate("page_title_on_google"), self.locale.translate("station_name_%s" % self.sid)) self.render( self.page_template, request=self, site_description=self.locale.translate( "station_description_id_%s" % self.sid), revision_number=config.build_number, jsfiles=self.jsfiles, # api_url=config.get("api_external_url_prefix"), # cookie_domain=config.get("cookie_domain"), # locales=api.locale.locale_names_json, # relays=config.public_relays_json[self.sid], # stream_filename=config.get_station(self.sid, "stream_filename"), # station_list=config.station_list_json, mobile=self.mobile, station_name=page_title, dj=self.user.is_dj())
class MainIndex(api.web.HTMLRequest): description = "Main Rainwave page." auth_required = config.has("index_requires_login") and config.get("index_requires_login") login_required = config.has("index_requires_login") and config.get("index_requires_login") sid_required = False beta = False page_template = "r5_index.html" js_dir = "js5" def set_default_headers(self): self.set_header("X-Frame-Options", "SAMEORIGIN") self.set_header("X-XSS-Protection", "1; mode=block") self.set_header("X-Content-Type-Options", "nosniff") if self.request.protocol == 'https': self.set_header("Content-Security-Policy", config.csp_header) self.set_header("Referrer-Policy", "origin") self.set_header("Strict-Transport-Security", "max-age=63072000; includeSubDomains; preload") def prepare(self): if self.path_kwargs.get('station'): self.sid = config.stream_filename_to_sid.get(self.path_kwargs['station']) if not self.sid: self.redirect(config.get("base_site_url")) return super(MainIndex, self).prepare() if self.path_kwargs.get('station') is None: self.redirect("{}{}/".format(config.get("base_site_url"), config.station_mount_filenames[self.sid]), permanent=True) return if config.get("enforce_ssl") and self.request.protocol != "https": self.redirect("{}{}/".format(config.get("base_site_url"), config.station_mount_filenames[self.sid]), permanent=True) return if not config.get("developer_mode") and self.request.host != config.get("hostname"): self.redirect("{}{}/".format(config.get("base_site_url"), config.station_mount_filenames[self.sid]), permanent=True) return if not cache.get_station(self.sid, "sched_current"): raise APIException("server_just_started", "Rainwave is Rebooting, Please Try Again in a Few Minutes", http_code=500) # self.json_payload = {} self.jsfiles = None if not self.user: self.user = User(1) self.user.ip_address = self.request.remote_ip self.user.ensure_api_key() if self.beta or config.get("web_developer_mode") or config.get("developer_mode") or config.get("test_mode"): buildtools.bake_beta_css() buildtools.bake_beta_templates() self.jsfiles = [] for root, subdirs, files in os.walk(os.path.join(os.path.dirname(__file__), "../static/%s" % self.js_dir)): #pylint: disable=W0612 for f in files: if f.endswith(".js"): self.jsfiles.append(os.path.join(root[root.find("static/%s" % self.js_dir):], f)) # def append(self, key, value): # self.json_payload[key] = value def get(self, station=None): self.mobile = self.request.headers.get("User-Agent").lower().find("mobile") != -1 or self.request.headers.get("User-Agent").lower().find("android") != -1 # if not self.beta: # info.attach_info_to_request(self, extra_list=self.get_cookie("r4_active_list")) # self.append("api_info", { "time": int(timestamp()) }) page_title = None if (self.sid == config.get("default_station")): page_title = self.locale.translate("page_title_on_google") else: page_title = "%s %s" % (self.locale.translate("page_title_on_google"), self.locale.translate("station_name_%s" % self.sid)) self.render( self.page_template, request=self, site_description=self.locale.translate("station_description_id_%s" % self.sid), revision_number=config.build_number, jsfiles=self.jsfiles, # api_url=config.get("api_external_url_prefix"), # cookie_domain=config.get("cookie_domain"), # locales=api.locale.locale_names_json, # relays=config.public_relays_json[self.sid], # stream_filename=config.get_station(self.sid, "stream_filename"), # station_list=config.station_list_json, mobile=self.mobile, station_name=page_title, dj=self.user.is_dj() )