示例#1
0
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"))
示例#2
0
文件: index.py 项目: Sicno/rainwave
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)
示例#3
0
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)
示例#4
0
文件: index.py 项目: Siqo53/rainwave
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])
示例#5
0
文件: index.py 项目: Siqo53/rainwave
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,
        )
示例#6
0
文件: index.py 项目: Dinir/rainwave
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)
示例#7
0
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)
示例#8
0
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)
示例#9
0
  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("/")
示例#10
0
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)
示例#11
0
文件: index.py 项目: Reani/rainwave
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"))
示例#12
0
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)
示例#13
0
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())
示例#14
0
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(),
        )
示例#15
0
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(),
        )
示例#16
0
文件: index.py 项目: nullun/rainwave
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())
示例#17
0
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()
		)