Exemple #1
0
def bucket_web_for_independent_domain(web_path=''):
    # 跟 bucket web 一样, 但是呈现的是独立域名, 放到最后被 app.route 添加,以避免影响其它 view 的逻辑
    # 系统自带的前端资源
    if re.match("/(_system|admin|service|bucket)/", request.path):
        abort(
            404,
            "custom url is not allowed to startswith (_system|admin|service|bucket)"
        )
    frontend_response = send_static_frontend_resource()
    if frontend_response:
        return frontend_response
    if not web_path and not get_buckets_size():
        # 还没有 bucket 的时候,允许用户进行安装的操作
        return p_redirect("/__create_bucket?code=admin")
    bucket = get_bucket_from_request()
    if bucket:
        if request.path in ['/robot.txt', '/robots.txt']:
            if not get_bucket_private_config(
                    bucket, "enable_web_robots", default=True):
                # 禁用爬虫
                robot_content = 'User-agent: *\nDisallow: /'
                return Response(robot_content, mimetype='text/plain')
        if request.url.startswith("http://") and get_bucket_private_config(
                bucket, "enable_https_force_redirect", default=False):
            # 强制跳转 https, 不用永久 301 code,避免用户自己切换后不成功
            return redirect(request.url.replace('http://', 'https://', 1),
                            code=302)
        set_site_in_request(get_bucket_site_configs(bucket))
        return render_bucket(bucket, web_path)
    else:
        abort(404, 'no bucket found')


################# for web pages ends ##########
Exemple #2
0
def install_ssl_for_bucket_domain():
    domain = request.values.get("domain")
    if not domain:
        return abort(404, "no domain set to install SSL")
    bucket = get_logined_bucket()
    if not bucket:
        return abort(404, "need login first")
    domain_bucket = get_bucket_from_domain(domain)
    if bucket != domain_bucket:
        return abort(404, "logined bucket is not matched to this domain")
    cert_doc = get_ssl_cert_for_domain(domain)
    ssl_key = request.values.get("ssl_key")
    ssl_cert = request.values.get("ssl_cert")
    if cert_doc.get("by_user"):
        ssl_key = ssl_key or cert_doc.get("ssl_key") or ""
        ssl_cert = ssl_cert or cert_doc.get("ssl_cert") or ""
    data_obj = dict(ssl_key=ssl_key, ssl_cert=ssl_cert)
    info = ""
    if request.method == "POST":
        info = set_ssl_cert_for_domain_by_user(domain=domain,
                                               ssl_key=ssl_key,
                                               ssl_cert=ssl_cert)
        if not info:  #  ssl 安装成功了
            return p_redirect("/admin")
    return render_api_template_as_response("page_user_install_ssl.jade",
                                           info=info,
                                           data_obj=data_obj)
Exemple #3
0
def create_new_bucket_for_user_step_1():
    register_note = get_env("register_note") or ""
    info = ""
    invitation_code = request.values.get("invitation_code")
    if invitation_code:
        if not check_invitation_by_web_request():
            info = "invalid invitation code or used"
        else:  # 跳转到创建 bucket 的逻辑
            return p_redirect("__create_bucket?invitation_code=%s" %
                              invitation_code)
    return render_api_template_as_response("page_user_register.jade",
                                           info=info,
                                           register_note=register_note)
Exemple #4
0
def set_bucket_email():
    bucket = get_logined_bucket()
    if not bucket:
        return abort(404, "need login first")
    info = ""
    if request.method == "POST":
        email = request.values.get("email", "").strip()
        if email and not is_email_address(email):
            info = "email format is error"
        else:
            set_owner_email_to_bucket(bucket, email)
            return p_redirect("/admin")
    else:
        email = get_bucket_owner_email(bucket)
    return render_api_template_as_response("page_user_set_bucket_email.jade",
                                           info=info,
                                           email=email)
Exemple #5
0
def create_new_bucket_for_user_step_2():
    # 这个也负责初次的安装,还没有 bucket 的时候
    register_note = get_env("register_note") or ""
    private_key = request.values.get(
        "private_key") or get_private_key_on_server_side()
    info = ""
    invitation_code = request.values.get(
        "invitation_code") or request.values.get("code")
    if request.method == "POST":
        info = create_bucket_by_web_request(invitation_code)
        if not info:  # 创建成功了
            return p_redirect("/admin")
    else:  # GET
        if invitation_code != "admin" and not check_invitation_by_web_request(
        ):
            info = "invalid invitation code"
    return render_api_template_as_response("page_user_create_bucket.jade",
                                           private_key=private_key,
                                           info=info,
                                           register_note=register_note)
Exemple #6
0
    def as_web_response(self,
                        bucket,
                        record,
                        mimetype="",
                        try_resized_image=True):
        # 只处理存储在外部(包括本地),但不在 database 中的数据
        file_stored = record.get("_file_stored")
        if not file_stored:
            return
        relative_path = record.get('path')
        if not relative_path:
            return  # ignore
        local_filepath = self.get_local_filepath(bucket, record)

        mimetype = mimetype or guess_type(
            relative_path) or 'application/octet-stream'

        # 处理缩略图的对应
        if try_resized_image and mimetype.startswith("image"):
            resized_image_response = get_response_for_resized_image(
                bucket, record, self)
            if resized_image_response:
                return resized_image_response

        if local_filepath:
            if os.path.isfile(local_filepath):
                response = send_file(local_filepath, mimetype=mimetype)
                spawn(self.update_bucket_bandwidth, bucket, record)
                set_304_response_for_doc(response=response,
                                         doc=record,
                                         date_field='mtime')
                return response
            else:
                return
        else:
            file_url = self.get_url(bucket, record)
            if file_url:
                spawn(self.update_bucket_bandwidth, bucket, record)
                return p_redirect(file_url)
            else:
                return
Exemple #7
0
def auth_failed(error):
    #info = getattr(error, 'description', '')
    return p_redirect('/login?redirect=%s' % encode_url_arg(request.url))
Exemple #8
0
def show_server_stats_bucket():
    status_bucket = get_server_status_bucket()
    if not status_bucket:
        abort(404, 'server_status not found')
    else:
        return p_redirect('/bucket/%s/web/' % status_bucket)