开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 1 Fork 0

C++项目/servertech-chat

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (6)
master
feature/48-mysql-connection-pool
gh-pages
bugfix/52-volume-already-in-use
feature/6-simplify-deployment
async-rewrite
master
分支 (6)
master
feature/48-mysql-connection-pool
gh-pages
bugfix/52-volume-already-in-use
feature/6-simplify-deployment
async-rewrite
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (6)
master
feature/48-mysql-connection-pool
gh-pages
bugfix/52-volume-already-in-use
feature/6-simplify-deployment
async-rewrite
servertech-chat
/
server
/
src
/
request_context.cpp
servertech-chat
/
server
/
src
/
request_context.cpp
request_context.cpp 5.39 KB
一键复制 编辑 原始数据 按行查看 历史
Ruben Perez 提交于 2023年09月26日 23:21 +08:00 . Authentication, login and account creation
//
// Copyright (c) 2023 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include "request_context.hpp"
#include <boost/beast/http/empty_body.hpp>
#include <boost/beast/http/fields.hpp>
#include <boost/beast/http/file_body.hpp>
#include <boost/beast/http/message.hpp>
#include <boost/beast/http/status.hpp>
#include <boost/beast/http/string_body.hpp>
#include <boost/url/parse.hpp>
#include <string_view>
#include "api/api_types.hpp"
#include "error.hpp"
using namespace chat;
namespace http = boost::beast::http;
namespace beast = boost::beast;
// Intentionally don't provide exact version
static constexpr std::string_view server_header = "beast";
static std::string_view mime_type(std::string_view path)
{
using beast::iequals;
auto const ext = [&path] {
auto const pos = path.rfind(".");
if (pos == std::string_view::npos)
return std::string_view{};
return path.substr(pos);
}();
if (iequals(ext, ".htm"))
return "text/html";
if (iequals(ext, ".html"))
return "text/html";
if (iequals(ext, ".php"))
return "text/html";
if (iequals(ext, ".css"))
return "text/css";
if (iequals(ext, ".txt"))
return "text/plain";
if (iequals(ext, ".js"))
return "application/javascript";
if (iequals(ext, ".json"))
return "application/json";
if (iequals(ext, ".xml"))
return "application/xml";
if (iequals(ext, ".swf"))
return "application/x-shockwave-flash";
if (iequals(ext, ".flv"))
return "video/x-flv";
if (iequals(ext, ".png"))
return "image/png";
if (iequals(ext, ".jpe"))
return "image/jpeg";
if (iequals(ext, ".jpeg"))
return "image/jpeg";
if (iequals(ext, ".jpg"))
return "image/jpeg";
if (iequals(ext, ".gif"))
return "image/gif";
if (iequals(ext, ".bmp"))
return "image/bmp";
if (iequals(ext, ".ico"))
return "image/vnd.microsoft.icon";
if (iequals(ext, ".tiff"))
return "image/tiff";
if (iequals(ext, ".tif"))
return "image/tiff";
if (iequals(ext, ".svg"))
return "image/svg+xml";
if (iequals(ext, ".svgz"))
return "image/svg+xml";
return "application/text";
}
response_builder::response_builder(unsigned version, bool keep_alive) : keep_alive_(keep_alive)
{
header_.version(version);
header_.set(http::field::server, server_header);
}
response_builder::response_type response_builder::file_response(const char* path, bool is_head)
{
// Attempt to open the file
error_code ec;
http::file_body::value_type body;
body.open(path, beast::file_mode::scan, ec);
// Handle the case where the file doesn't exist
if (ec == boost::system::errc::no_such_file_or_directory)
return not_found_text();
// Handle an unknown error
if (ec)
return internal_server_error(ec, "Opening file");
// Cache the size since we need it after the move
const auto size = body.size();
set_content_type(mime_type(path));
if (is_head)
{
// Respond to HEAD request
auto res = build_response<http::empty_body>();
res.content_length(size);
return res;
}
else
{
// Respond to GET request
auto res = build_response<http::file_body>(std::move(body));
res.content_length(size);
return res;
}
}
response_builder::response_type response_builder::empty_response()
{
header_.result(http::status::no_content);
auto res = build_response<http::empty_body>();
res.prepare_payload();
return res;
}
response_builder::response_type response_builder::json_response_impl(std::string serialized_json)
{
set_content_type("application/json");
auto res = build_response<http::string_body>(std::move(serialized_json));
res.prepare_payload();
return res;
}
response_builder::response_type response_builder::plaintext_response(
boost::beast::http::status status,
std::string content
)
{
header_.result(status);
set_content_type("text/plain");
auto res = build_response<http::string_body>(std::move(content));
res.prepare_payload();
return res;
}
response_builder::response_type response_builder::json_error(
boost::beast::http::status status,
api_error_id error_id,
std::string_view error_message
)
{
header_.result(status);
return json_response(api_error{error_id, error_message});
}
response_builder::response_type response_builder::internal_server_error(error_code ec, std::string_view what)
{
// Log the error
log_error(ec, "Returning internal server error", what);
// Intentionally don't expose any error information
return plaintext_response(
boost::beast::http::status::internal_server_error,
"An unexpected server error occurred"
);
}
error_code request_context::parse_request_target()
{
auto url_result = boost::urls::parse_origin_form(request_.target());
if (url_result.has_error())
return url_result.error();
target_ = url_result.value();
return error_code();
}
bool request_context::is_json_content_type() const
{
// Validate content-type
auto it = request_.find(boost::beast::http::field::content_type);
return it != request_.end() && it->value() == "application/json";
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

Web聊天室项目
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/cppprojects/servertech-chat.git
git@gitee.com:cppprojects/servertech-chat.git
cppprojects
servertech-chat
servertech-chat
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /