License FAQ (#2581)

Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
This commit is contained in:
Daniel Valdivia
2023-01-23 10:33:15 -08:00
committed by GitHub
parent 6466687a27
commit 62e822df4e
32 changed files with 215 additions and 45 deletions

View File

@@ -56,7 +56,10 @@
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
"extends": "react-app",
"rules": {
"react/jsx-no-target-blank": "off"
}
},
"browserslist": {
"production": [

View File

@@ -291,7 +291,7 @@ const Account = () => {
<a
href="https://min.io/docs/minio/linux/administration/identity-access-management/minio-user-management.html?ref=con#service-accounts"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -221,7 +221,7 @@ const BucketEventsPanel = ({ classes }: IBucketEventsProps) => {
<a
href="https://min.io/docs/minio/linux/administration/monitoring/bucket-notifications.html?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -336,7 +336,7 @@ const BucketLifecyclePanel = ({ classes }: IBucketLifecyclePanelProps) => {
<a
href="https://min.io/docs/minio/linux/administration/object-management/object-lifecycle-management.html?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -365,7 +365,7 @@ const BucketReplicationPanel = ({ classes }: IBucketReplicationProps) => {
<a
href="https://min.io/docs/minio/linux/administration/bucket-replication.html?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -303,7 +303,7 @@ const AddBucket = ({ classes }: IsetProps) => {
<a
href="https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
Distributed Mode
</a>{" "}

View File

@@ -53,7 +53,7 @@ const DistributedOnly = ({ iconComponent, entity }: IDistributedOnly) => {
<a
href="https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
Distributed Mode
</a>{" "}

View File

@@ -45,7 +45,7 @@ const MissingIntegration = ({
This feature is not available.
<br />
Please configure{" "}
<a href={documentationLink} target="_blank" rel="noreferrer">
<a href={documentationLink} target="_blank" rel="noopener">
{entity}
</a>{" "}
first to use this feature.

View File

@@ -128,7 +128,7 @@ const ConfigurationOptions = ({ classes }: IConfigurationOptions) => {
<a
href="https://min.io/docs/minio/linux/reference/minio-mc-admin/mc-admin-config.html?ref=con#id4"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -215,7 +215,7 @@ const SiteReplication = () => {
<a
href="https://min.io/docs/minio/linux/operations/install-deploy-manage/multi-site-replication.html?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>
@@ -260,7 +260,7 @@ const SiteReplication = () => {
<a
href="https://github.com/minio/minio/tree/master/docs/site-replication?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -470,7 +470,7 @@ const ListTiersConfiguration = ({ classes }: IListTiersConfig) => {
<a
href="https://min.io/docs/minio/linux/administration/object-management/object-lifecycle-management.html?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -67,7 +67,7 @@ const TierTypeSelector = () => {
<a
href="https://min.io/docs/minio/kubernetes/upstream/administration/object-management/transition-objects-to-s3.html#minio-lifecycle-management-transition-to-s3?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
MinIO or other S3-compatible storage
</a>
@@ -76,7 +76,7 @@ const TierTypeSelector = () => {
<a
href="https://min.io/docs/minio/kubernetes/upstream/administration/object-management/transition-objects-to-s3.html#minio-lifecycle-management-transition-to-s3?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
Amazon S3
</a>
@@ -85,7 +85,7 @@ const TierTypeSelector = () => {
<a
href="https://min.io/docs/minio/kubernetes/upstream/administration/object-management/transition-objects-to-gcs.html#minio-lifecycle-management-transition-to-gcs?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
Google Cloud Storage
</a>
@@ -94,7 +94,7 @@ const TierTypeSelector = () => {
<a
href="https://min.io/docs/minio/kubernetes/upstream/administration/object-management/transition-objects-to-azure.html#minio-lifecycle-management-transition-to-azure?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
Microsoft Azure Blob Storage
</a>

View File

@@ -355,7 +355,7 @@ const BasicDashboard = ({ usage }: IDashboardProps) => {
<a
href="https://min.io/docs/minio/linux/operations/monitoring/collect-minio-metrics-using-prometheus.html"
target="_blank"
rel="noreferrer"
rel="noopener"
>
Read more about Prometheus on our Docs site.
</a>

View File

@@ -284,7 +284,7 @@ const DirectPVMain = ({ classes }: IDirectPVMain) => {
For more information{" "}
<a
href="https://github.com/minio/directpv"
rel="noreferrer"
rel="noopener"
target="_blank"
className={classes.linkItem}
>

View File

@@ -375,7 +375,7 @@ const Groups = ({ classes }: IGroupsProps) => {
<a
href="https://min.io/docs/minio/linux/administration/identity-access-management/minio-group-management.html?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -94,7 +94,7 @@ const AddIDPConfigurationHelpBox = ({
</Fragment>
))}
<Box sx={{ paddingBottom: "20px" }}>
<a href={docLink} target="_blank" rel="noreferrer">
<a href={docLink} target="_blank" rel="noopener">
{docText}
</a>
</Box>

View File

@@ -0,0 +1,41 @@
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import React from "react";
import ModalWrapper from "../Common/ModalWrapper/ModalWrapper";
import LicenseFAQ from "./LicenseFAQ";
import { useSelector } from "react-redux";
import { AppState, useAppDispatch } from "../../../store";
import { closeFAQModal } from "./licenseSlice";
const FAQModal = () => {
const dispatch = useAppDispatch();
const isOpen = useSelector((state: AppState) => state.license.faqModalOpen);
return (
<ModalWrapper
modalOpen={isOpen}
title="License FAQ"
onClose={() => {
dispatch(closeFAQModal());
}}
>
<LicenseFAQ />
</ModalWrapper>
);
};
export default FAQModal;

View File

@@ -21,6 +21,7 @@ import { Button } from "mds";
import { AGPLV3DarkLogo } from "mds";
import { setLicenseConsent } from "./utils";
import LicenseLink from "./LicenseLink";
import LicenseFAQ from "./LicenseFAQ";
const LicenseConsentModal = ({
isOpen,
@@ -78,7 +79,7 @@ const LicenseConsentModal = ({
found here:{" "}
<a
href={`https://www.gnu.org/licenses/agpl-3.0.html`}
rel="noreferrer noopener"
rel="noopener"
className={"link-text"}
>
https://www.gnu.org/licenses/agpl-3.0.html.
@@ -95,13 +96,15 @@ const LicenseConsentModal = ({
available here:{" "}
<a
href={`https://min.io/signup?ref=con`}
rel="noreferrer noopener"
rel="noopener"
className={"link-text"}
>
https://min.io/signup.
</a>
</Box>
<LicenseFAQ />
<Box
sx={{
marginTop: "19px",

View File

@@ -0,0 +1,61 @@
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import React, { Fragment } from "react";
const LicenseFAQ = () => {
return (
<Fragment>
<h2>What is the GNU AGPL v3?</h2>
<p>
The GNU AGPL v3 is short for the "GNU Affero General Public License v3."
It is a common open source license certified by the Free Software
Foundation and the Open Source Initiative. You can get a copy of the GNU
AGPL v3 license with MinIO source code or at&nbsp;
<a href={"https://min.io/compliance?ref=con"} target={"_blank"}>
https://www.gnu.org/licenses/agpl-3.0.en.html
</a>
.
</p>
<h2>What does it mean for me to comply with the GNU AGPL v3?</h2>
<p>
When you host or distribute MinIO over a network, the AGPL v3 applies to
you. Any distribution or copying of MinIO software modified or not has
to comply with the obligations specified in the AGPL v3. Otherwise, you
may risk infringing MinIOs copyrights.
</p>
<h2>Making combined or derivative works of MinIO</h2>
<p>
Combining MinIO software as part of a larger software stack triggers
your GNU AGPL v3 obligations.
</p>
<p>
The method of combining does not matter. When MinIO is linked to a
larger software stack in any form, including statically, dynamically,
pipes, or containerized and invoked remotely, the AGPL v3 applies to
your use. What triggers the AGPL v3 obligations is the exchanging data
between the larger stack and MinIO.
</p>
<h2>Talking to your Legal Counsel</h2>
<p>
If you have questions, we recommend that you talk to your own attorney
for legal advice. Purchasing a commercial license from MinIO removes the
AGPL v3 obligations from MinIO software.
</p>
</Fragment>
);
};
export default LicenseFAQ;

View File

@@ -445,6 +445,8 @@ const LicensePlans = ({ licenseInfo, operatorMode }: IRegisterStatus) => {
fontSize: "14px",
"& .link-text": {
color: "#2781B0",
cursor: "pointer",
textDecoration: "underline",
},
"&.icon-yes": {
@@ -514,6 +516,8 @@ const LicensePlans = ({ licenseInfo, operatorMode }: IRegisterStatus) => {
"& .link-text": {
color: "#2781B0",
cursor: "pointer",
textDecoration: "underline",
},
"& .min-icon": {
@@ -526,7 +530,7 @@ const LicensePlans = ({ licenseInfo, operatorMode }: IRegisterStatus) => {
<LicenseDocIcon />
<a
href={`https://subnet.min.io/terms-and-conditions/${currentPlan}`}
rel="noreferrer noopener"
rel="noopener"
className={"link-text"}
>
View License agreement <br />

View File

@@ -0,0 +1,42 @@
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import { createSlice } from "@reduxjs/toolkit";
export interface IAddPool {
faqModalOpen: boolean;
}
const initialState: IAddPool = {
faqModalOpen: false,
};
export const licenseSlice = createSlice({
name: "license",
initialState,
reducers: {
openFAQModal: (state) => {
state.faqModalOpen = true;
},
closeFAQModal: (state) => {
state.faqModalOpen = false;
},
},
});
export const { openFAQModal, closeFAQModal } = licenseSlice.actions;
export default licenseSlice.reducer;

View File

@@ -16,6 +16,9 @@
import { Box } from "@mui/material";
import LicenseLink from "./LicenseLink";
import { openFAQModal } from "./licenseSlice";
import store from "../../../store";
import FAQModal from "./FAQModal";
export const LICENSE_PLANS = {
COMMUNITY: "community",
@@ -37,7 +40,7 @@ const FeatureLink = ({ text, anchor }: { text: string; anchor: string }) => {
href={`https://min.io/product/subnet?ref=con#${anchor}`}
className={"link-text"}
target="_blank"
rel="noopener noreferrer"
rel="noopener "
style={{
color: "#2781B0",
}}
@@ -56,7 +59,7 @@ export const FEATURE_ITEMS: FeatureItem[] = [
label: "",
isHeader: false,
style: {
height: "360px",
height: "400px",
verticalAlign: "top",
alignItems: "start",
},
@@ -138,13 +141,24 @@ export const COMMUNITY_PLAN_FEATURES = [
distribute the complete, corresponding source code of the combined
work under the same <LicenseLink /> license. This requirement
applies whether or not you modified MinIO.
<br />
<br />
<span
className="link-text"
onClick={() => {
store.dispatch(openFAQModal());
}}
>
Compliance FAQ
</span>
<FAQModal />
</span>
</Box>
);
},
isHeader: false,
style: {
height: "360px",
height: "400px",
borderBottom: 0,
},
},
@@ -228,7 +242,7 @@ export const STANDARD_PLAN_FEATURES = [
href="https://min.io/product/subnet?ref=con"
className={"link-text"}
target="_blank"
rel="noopener noreferrer"
rel="noopener"
>
click here
</a>
@@ -237,7 +251,7 @@ export const STANDARD_PLAN_FEATURES = [
);
},
style: {
height: "360px",
height: "400px",
borderBottom: 0,
},
},
@@ -341,7 +355,7 @@ export const ENTERPRISE_PLAN_FEATURES = [
href="https://min.io/product/subnet?ref=con"
className={"link-text"}
target="_blank"
rel="noopener noreferrer"
rel="noopener"
>
click here
</a>
@@ -350,7 +364,7 @@ export const ENTERPRISE_PLAN_FEATURES = [
);
},
style: {
height: "360px",
height: "400px",
borderBottom: 0,
},
},

View File

@@ -101,7 +101,7 @@ const SetEmailModal = ({ open, closeModal }: ISetEmailModalProps) => {
<a
href="https://min.io/product/subnet"
target="_blank"
rel="noreferrer"
rel="noopener"
>
MinIO Subscription Network (SUBNET)
</a>

View File

@@ -257,7 +257,7 @@ const ListNotificationEndpoints = ({ classes }: IListNotificationEndpoints) => {
<a
href="https://min.io/docs/minio/linux/administration/monitoring/bucket-notifications.html?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -282,7 +282,7 @@ const ListPolicies = ({ classes }: IPoliciesProps) => {
<a
href="https://min.io/docs/minio/linux/administration/identity-access-management.html?ref=con#access-management"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -129,7 +129,7 @@ const TLSHelpBox = () => {
<a
href="https://min.io/docs/minio/kubernetes/upstream/operations/network-encryption.html?ref=op#id5"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -264,7 +264,7 @@ const LoggingScreen = ({ classes }: ILoggingScreenProps) => {
<a
href="https://min.io/docs/minio/kubernetes/upstream/operations/monitoring/minio-logging.html"
target="_blank"
rel="noreferrer"
rel="noopener"
>
{" documentation "}
</a>

View File

@@ -309,7 +309,7 @@ const TenantSummary = ({ classes }: ITenantsSummary) => {
<a
href={tenant?.endpoints?.console}
target="_blank"
rel="noopener noreferrer"
rel="noopener"
className={`${classes.linkedSection} ${classes.autoGeneratedLink}`}
>
{tenant?.endpoints?.console || "-"}
@@ -322,7 +322,7 @@ const TenantSummary = ({ classes }: ITenantsSummary) => {
<a
href={tenant?.domains?.console || ""}
target="_blank"
rel="noopener noreferrer"
rel="noopener"
className={classes.linkedSection}
>
{tenant?.domains?.console || ""}
@@ -350,7 +350,7 @@ const TenantSummary = ({ classes }: ITenantsSummary) => {
<a
href={tenant?.endpoints?.minio}
target="_blank"
rel="noopener noreferrer"
rel="noopener"
className={`${classes.linkedSection} ${classes.autoGeneratedLink}`}
>
{tenant?.endpoints?.minio || "-"}
@@ -366,7 +366,7 @@ const TenantSummary = ({ classes }: ITenantsSummary) => {
<a
href={domain}
target="_blank"
rel="noopener noreferrer"
rel="noopener"
className={classes.linkedSection}
>
{domain}

View File

@@ -547,7 +547,7 @@ const Inspect = ({ classes }: { classes: any }) => {
<a
href="https://github.com/minio/minio/tree/master/docs/debugging?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -414,7 +414,7 @@ const ListUsers = ({ classes }: IUsersProps) => {
<a
href="https://min.io/docs/minio/kubernetes/upstream/administration/identity-access-management/minio-user-management.html?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
documentation
</a>

View File

@@ -498,14 +498,14 @@ const Login = () => {
form={loginComponent}
formFooter={
<Fragment>
<a href={docsURL} target="_blank" rel="noreferrer">
<a href={docsURL} target="_blank" rel="noopener">
Documentation
</a>
<span className={classes.separator}>|</span>
<a
href="https://github.com/minio/minio"
target="_blank"
rel="noreferrer"
rel="noopener"
>
Github
</a>
@@ -513,7 +513,7 @@ const Login = () => {
<a
href="https://subnet.min.io/?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
Support
</a>
@@ -521,7 +521,7 @@ const Login = () => {
<a
href="https://min.io/download/?ref=con"
target="_blank"
rel="noreferrer"
rel="noopener"
>
Download
</a>

View File

@@ -36,6 +36,7 @@ import editTenantMonitoringReducer from "./screens/Console/Tenants/TenantDetails
import editTenantAuditLoggingReducer from "./screens/Console/Tenants/TenantDetails/tenantAuditLogSlice";
import editTenantSecurityContextReducer from "./screens/Console/Tenants/tenantSecurityContextSlice";
import directPVReducer from "./screens/Console/DirectPV/directPVSlice";
import licenseReducer from "./screens/Console/License/licenseSlice";
const rootReducer = combineReducers({
system: systemReducer,
@@ -59,6 +60,7 @@ const rootReducer = combineReducers({
editTenantLogging: editTenantAuditLoggingReducer,
editTenantSecurityContext: editTenantSecurityContextReducer,
directPV: directPVReducer,
license: licenseReducer,
});
export const store = configureStore({