chore: add privacy policy

This commit is contained in:
Tianzhou Chen
2023-05-21 01:32:41 +08:00
parent 8b2b10b13d
commit 353f5bdd8b
6 changed files with 98 additions and 6 deletions

View File

@ -34,11 +34,7 @@ SQL Chat is built by [Next.js](https://nextjs.org/), it supports the following d
## Data Privacy
- All database connection configs are stored locally in your browser. You can also visit settings to clear the data.
- Only the database schema will be sent to the OpenAI API. No table data will be sent there.
- If you use [sqlchat.ai](https://sqlchat.ai), it will record the anonymised conversations.
See [SQL Chat Privacy Policy](https://sqlchat.ai/privacy).
## IP Whitelisting

46
public/privacy.md Normal file
View File

@ -0,0 +1,46 @@
# SQL Chat Privacy Policy
We respect your privacy and are committed to protecting your personal information. This Privacy Policy explains how we collect, use, and disclose your personal information when you use our application that calls LLM provider's API.
## Collection of Application Data
* All database connection configs are stored locally in your browser. You can also visit settings to clear the data.
* We send the database schema to the LLM provider. No table data will be sent there.
* We collect the conversation message to improve the product.
## Collection of Personal Information
We may collect certain personal information from you when you use our application, such as your name and email address. We collect this information in order to communicate with you about our services and to provide you with technical support.
## Use of Personal Information
We may use your personal information to:
* Communicate with you about our services
* Provide you with technical support
* Improve our application and services
* Comply with legal obligations
## Disclosure of Personal Information
We do not sell, trade, or otherwise transfer your personal information to third parties. However, we may disclose your personal information in the following circumstances:
* To our service providers who assist us in providing our services to you
* To comply with legal obligations or to protect our rights or the rights of others
## Security of Personal Information
We take reasonable measures to protect your personal information from unauthorized access, disclosure, or destruction. However, no method of transmission over the internet or electronic storage is completely secure, and we cannot guarantee absolute security.
## Changes to this Privacy Policy
We may update this Privacy Policy from time to time by posting a new versionon our website. We encourage you to review this Privacy Policy periodically for any changes. Your continued use of our application and services after any modifications to this Privacy Policy will constitute your acceptance of such modifications.
For more information about our privacy and data protection practices, including how to exercise your privacy rights, please visit the [Bytebase Privacy Policy](https://bytebase.com/privacy).
## Contact Us
Please contact us at support@bytebase.com if you have questions about this Privacy Policy.
*Last Updated: May 21, 2023*

View File

@ -0,0 +1,33 @@
import React, { useState, useEffect } from "react";
import ReactMarkdown from "react-markdown";
interface MarkdownRendererProps {
url: string;
}
function MarkdownRenderer(props: MarkdownRendererProps) {
const [markdown, setMarkdown] = useState<string>("");
useEffect(() => {
const fetchData = async () => {
const response = await fetch(props.url);
const data = await response.text();
setMarkdown(data);
};
fetchData();
}, [props.url]);
return (
<ReactMarkdown
className="w-auto max-w-full px-4 py-2 prose prose-neutral"
components={{
p: ({ children }) => <p style={{ color: "black" }}>{children}</p>,
li: ({ children }) => <li style={{ color: "black" }}>{children}</li>,
}}
>
{markdown}
</ReactMarkdown>
);
}
export default MarkdownRenderer;

View File

@ -61,6 +61,14 @@ const SettingView = () => {
</div>
</div>
<div className="w-full border border-gray-200 dark:border-zinc-700 p-4 rounded-lg space-y-2">
<div className="w-full flex flex-row justify-between items-center gap-2">
<a href={"privacy"} target="_blank">
Privacy
</a>
</div>
</div>
<div className="w-full border border-red-200 dark:border-zinc-700 p-4 rounded-lg">
<div className="w-full flex flex-row justify-between items-center gap-2">
<span>{t("setting.data.clear-all-data")}</span>

View File

@ -104,7 +104,8 @@ const handler = async (req: NextRequest) => {
frequency_penalty: model.frequency_penalty,
presence_penalty: model.presence_penalty,
stream: true,
// Send end-user ID to help OpenAI monitor and detect abuse.
// Send end-user IP to help OpenAI monitor and detect abuse.
// It's intentionally not using email to avoid leaking user's email to OpenAI.
user: req.ip,
}),
});

View File

@ -0,0 +1,8 @@
import MarkdownRenderer from "@/components/MarkdownRenderer";
import { NextPage } from "next";
const PrivacyPage: NextPage = () => {
return <MarkdownRenderer url="/privacy.md" />;
};
export default PrivacyPage;