### Firebase Setup Guides Source: https://firebase.google.com/docs/app-check/web/recaptcha-enterprise-provider Provides links to setup guides for integrating Firebase into various development platforms. Covers Apple platforms, Android, Web, Flutter, C++, Unity, and server environments. ```APIDOC Firebase Setup: - Apple platforms (iOS+): https://firebase.google.com/docs/ios/setup - Android: https://firebase.google.com/docs/android/setup - Web: https://firebase.google.com/docs/web/setup - Flutter: https://firebase.google.com/docs/flutter/setup - C++: https://firebase.google.com/docs/cpp/setup - Unity: https://firebase.google.com/docs/unity/setup - Server environments: https://firebase.google.com/docs/admin/setup ``` -------------------------------- ### FireCMS Project Development Commands Source: https://context7_llms Commands to navigate into a newly created FireCMS project directory, install dependencies, and start the development server. These steps are essential for running and testing the FireCMS application locally. ```bash cd my-cms yarn yarn dev ``` -------------------------------- ### Button with Start Icon Example Source: https://context7_llms Illustrates adding an icon before the button's content using the `startIcon` prop, enhancing visual cues for actions. ```tsx import React from "react"; import { AddIcon, Button } from "@firecms/ui"; export default function StartIconButtonDemo() { return (
); } ``` -------------------------------- ### FireCMS Custom Storage Configuration Example Source: https://context7_llms This example demonstrates how to configure and use a custom storage source within a FireCMS application. It shows the setup of `CustomStorageSourceProps` with API credentials and region, and its integration into the main `FireCMS` component using the `useCustomStorageSource` hook. It also includes placeholders for authentication and data source delegates. ```tsx const customStorageConfig: CustomStorageSourceProps = { apiKey: "your-api-key", apiSecret: "your-api-secret", region: "your-region", defaultBucket: "your-bucket-name" // ... other necessary properties }; const CustomStorageApp: React.FC = () => { const name = "My Custom Storage FireCMS App"; const modeController = useBuildModeController(); const userConfigPersistence = useBuildLocalConfigurationPersistence(); const storageSource = useCustomStorageSource(customStorageConfig); // const authController = useFirebaseAuthController(); // your auth controller // const dataSourceDelegate = {}; // Your data source delegate implementation const navigationController = useBuildNavigationController({ collections: [productsCollection], // authController, // dataSourceDelegate }); // if (authLoading) { // return ; // } return ( {({ context, loading }) => { if (loading || authLoading) { return ; } if (!canAccessMainView) { return {notAllowedError}; } return ( ); }} ); }; export default CustomStorageApp; ``` -------------------------------- ### FireCMS User Management Setup Source: https://context7_llms Demonstrates the initial setup of user management in a FireCMS application. It shows how to initialize the user management system, authenticate users, and configure navigation controllers, integrating various FireCMS hooks. ```jsx function App() { // .. rest of your configuration, including the `authController` and `firestoreDelegate` const userManagementPlugin = useUserManagementPlugin({ userManagement }); const userManagement = useBuildUserManagement({ dataSourceDelegate: firestoreDelegate, usersPath: "__FIRECMS/config/users", rolesPath: "__FIRECMS/config/roles", usersLimit: 100, canEditRoles: true, allowDefaultRolesCreation: true, includeCollectionConfigPermissions: true, }); const { authLoading, canAccessMainView, notAllowedError } = useValidateAuthenticator({ disabled: userManagement.loading, authController, authenticator: userManagement.authenticator, dataSourceDelegate: firestoreDelegate, storageSource }); const navigationController = useBuildNavigationController({ collections, views, adminViews: userManagementAdminViews, collectionPermissions: userManagement.collectionPermissions, // Optional, link collection permissions to user management authController, dataSourceDelegate: firestoreDelegate }); return ( // ..components and providers ); } export default App; ``` -------------------------------- ### FireCMS UI Icons Example Source: https://context7_llms Placeholder for an example demonstrating icon usage in FireCMS, potentially related to migrating from Material-UI. ```tsx // No code provided in the source text for this snippet. ``` -------------------------------- ### FireCMS Main App Component Setup Source: https://context7_llms Demonstrates the core structure of a FireCMS application, initializing Firebase, setting up authentication, data sources, and plugins, and handling loading and access states. It uses various custom hooks to manage different aspects of the FireCMS setup. ```jsx function App() { const { firebaseApp, firebaseConfigLoading, configError } = useInitialiseFirebase({ firebaseConfig }); const firestoreDelegate = useFirestoreDelegate({ firebaseApp }); const authController = useFirebaseAuthController({ firebaseApp, signInOptions: ["google.com", "password"] }); const collectionConfigController = useFirestoreCollectionsConfigController({ firebaseApp }); const collectionEditorPlugin = useCollectionEditorPlugin({ collectionConfigController, configPermissions: customPermissionsBuilder, reservedGroups: ["admin"], extraView: { View: CustomCollectionView, icon: } }); const userManagement = useBuildUserManagement({ dataSourceDelegate: firestoreDelegate, authController: authController }); const userManagementPlugin = useUserManagementPlugin({ userManagement }); const collectionsBuilder = useCallback(() => { // Define your own collections const collections = [ productsCollection, // Add other collections here ]; // Merge with collections defined via the Collection Editor UI return mergeCollections(collections, collectionConfigController.collections ?? []); }, [collectionConfigController.collections]); const navigationController = useBuildNavigationController({ collections: collectionsBuilder(), views: customViews, adminViews: userManagementAdminViews, collectionPermissions: collectionEditorPlugin.collectionPermissions, authController, dataSourceDelegate: firestoreDelegate }); const { authLoading, canAccessMainView, notAllowedError } = useValidateAuthenticator({ disabled: collectionEditorPlugin.loading, authController: authController, authenticator: customAuthenticator, dataSourceDelegate: firestoreDelegate, storageSource }); if (firebaseConfigLoading) { return ; } if (configError) { return ; } return ( {({ context, loading }) => { if (loading || authLoading) { return ; } if (!canAccessMainView) { return ; } return ; }} ); } export default App; ``` -------------------------------- ### Basic File Upload Example Source: https://context7_llms A simple FileUpload component example with minimal configuration. It demonstrates how to accept image files and handle the addition of files via the 'onFilesAdded' callback. ```tsx import React from "react"; import { FileUpload } from "@firecms/ui"; export default function FileUploadBasicDemo() { const onFilesAdded = (files: File[]) => { console.log(files); }; return ( ); } ``` -------------------------------- ### Install MUI Dependencies Source: https://context7_llms Instructions for installing Material UI (MUI) core components and icons, which may be needed if continuing to use MUI components within FireCMS. ```bash yarn add @mui/material @emotion/react @emotion/styled ``` ```bash yarn add @mui/icons-material ``` -------------------------------- ### Basic Collapse Example Source: https://context7_llms A simple example of the Collapse component, which is used to show and hide content with React animations. It requires managing an 'isOpen' state. ```tsx import React, { useState } from ""; import { Button, Collapse, Paper } from "@firecms/ui"; export default function CollapseBasicDemo() { const [isOpen, setIsOpen] = useState(true); return (
Content to show or hide
); } ``` -------------------------------- ### Basic IconButton Example Source: https://context7_llms A simple IconButton example demonstrating its basic usage with a 'filled' variant and an 'AddIcon'. It shows how to attach an onClick handler for user interaction. ```tsx import React from "react"; import { AddIcon, IconButton } from "@firecms/ui"; export default function IconButtonBasicDemo() { return ( console.log("Clicked!")}> ); } ``` -------------------------------- ### FireCMS MongoDB Integration Example Source: https://context7_llms This example demonstrates the complete implementation of a FireCMS component integrating MongoDB Atlas. It covers initialization of Firebase and MongoDB, setting up controllers for authentication and data persistence, configuring storage, and rendering the FireCMS application with navigation and authentication flows. ```jsx import React from 'react'; import { CircularProgressCenter } from '@firecms/core'; import { CenteredView } from '@firecms/core'; import { SnackbarProvider } from '@firecms/snackbar'; import { ModeControllerProvider } from '@firecms/mode_controller'; import { FireCMS, Scaffold, AppBar, Drawer, NavigationRoutes, SideDialogs } from '@firecms/core'; import { MongoLoginView } from './MongoLoginView'; // Assuming this component exists // Assuming these hooks and types are imported from FireCMS and MongoDB integration packages import { useInitialiseFirebase } from '@firecms/firebase_integration'; import { useInitRealmMongodb } from '@firecms/mongodb_integration'; import { useBuildModeController } from '@firecms/mode_controller'; import { useBuildLocalConfigurationPersistence } from '@firecms/user_config_persistence'; import { useMongoDBAuthController, MongoAuthController } from '@firecms/mongodb_auth'; import { useMongoDBDelegate } from '@firecms/mongodb_datasource'; import { useFirebaseStorageSource } from '@firecms/firebase_storage'; import { useValidateAuthenticator } from '@firecms/authenticator'; import { useBuildNavigationController } from '@firecms/navigation'; // Placeholder for external configurations and collections const firebaseConfig = { /* ... your firebase config ... */ }; const atlasConfig = { /* ... your atlas config ... */ }; const productsCollection = { /* ... your collection definition ... */ }; const MongoDBApp = () => { const name = "My FireCMS App"; // Initialize Firebase const { firebaseApp, firebaseConfigLoading, configError } = useInitialiseFirebase({ firebaseConfig }); // Initialize MongoDB const { app } = useInitRealmMongodb(atlasConfig); // Setup controllers and delegates const modeController = useBuildModeController(); const userConfigPersistence = useBuildLocalConfigurationPersistence(); const authController: MongoAuthController = useMongoDBAuthController({ app }); const mongoDataSourceDelegate = useMongoDBDelegate({ app, cluster: "mongodb-atlas", database: "todo" }); const storageSource = useFirebaseStorageSource({ firebaseApp }); // Authenticator validation const { authLoading, canAccessMainView, notAllowedError } = useValidateAuthenticator({ authController, authenticator: () => true, // Replace with your actual authentication logic dataSourceDelegate: mongoDataSourceDelegate, storageSource }); // Navigation controller const navigationController = useBuildNavigationController({ collections: [productsCollection], authController, dataSourceDelegate: mongoDataSourceDelegate }); // Loading and error handling for Firebase initialization if (firebaseConfigLoading || !firebaseApp) { return ; } if (configError) { return {configError}; } // Render the FireCMS application return ( {({ context, loading }) => { // Loading state for FireCMS and authentication if (loading || authLoading) { return ; } // Handle unauthorized access if (!canAccessMainView) { return ( ); } // Render the main application layout return ( ); }} ); }; export default MongoDBApp; ``` -------------------------------- ### Menubar Example - React/TypeScript Source: https://context7_llms This example demonstrates a comprehensive menubar component built with React and TypeScript, utilizing the @firecms/ui library. It showcases nested menus, keyboard shortcuts, radio group selection, checkbox items, and disabled menu items, providing a template for interactive navigation elements. ```tsx import React from ""; import { FiberManualRecordIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarItem, MenubarItemIndicator, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarSubTriggerIndicator, MenubarTrigger } from "@firecms/ui"; const RADIO_ITEMS = ["Andy", "Benoît", "Luis"]; const CHECK_ITEMS = ["Always Show Bookmarks Bar", "Always Show Full URLs"]; export default function MenubarDemo() { const [checkedSelection, setCheckedSelection] = React.useState([CHECK_ITEMS[1]]); const [radioSelection, setRadioSelection] = React.useState(RADIO_ITEMS[2]); return ( File New Tab{" "} ⌘ T New Window{" "} ⌘ N New Incognito Window Share Email Link Messages Notes Print…{" "} ⌘ P Edit Undo{" "} ⌘ Z Redo{" "} ⇧ ⌘ Z Find Search the web… Find… Find Next Find Previous ``` -------------------------------- ### Example: Archive Product Action with Backend Call Source: https://context7_llms An example showing how to implement a custom 'Archive' entity action that calls a backend endpoint (e.g., Google Cloud Function) via `fetch` and uses the FireCMS `snackbarController` for user feedback. The action can be configured to be visible in the menu or form. ```tsx export const productsCollection = buildCollection({ id: "products", path: "products", // other properties entityActions: [ { icon: , name: "Archive", collapsed: false, onClick({ entity, collection, context, }) { const snackbarController = context.snackbarController; return fetch("[YOUR_ENDPOINT]/archiveProduct", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ productId: entity.id }) }).then(() => { snackbarController.open({ message: "Product archived", type: "success" }); }).catch((error) => { snackbarController.open({ message: "Error archiving product", type: "error" }); }); } } ], }); ``` -------------------------------- ### FireCMS UI Sheet from Top Example Source: https://context7_llms Demonstrates configuring the Sheet component to slide in from the top of the screen. This example uses the 'side="top"' prop to change the sheet's entry point. ```tsx import React, { useState } from ""; import { Button, Sheet } from "@firecms/ui"; export default function SheetTopDemo() { const [open, setOpen] = useState(false); return (
Sheet Content
); } ``` -------------------------------- ### Set up Amplify Storage Source: https://docs.amplify.aws/react/build-a-backend/storage/ Guides on how to set up Amplify Storage for your React project, enabling cloud-based file storage capabilities. ```bash amplify add storage # Follow the prompts to configure storage ``` ```javascript import { Amplify } from 'aws-amplify'; import awsExports from './aws-exports'; Amplify.configure(awsExports); // Now you can use Amplify Storage APIs ``` -------------------------------- ### Loading Button with Start Icon Source: https://context7_llms Shows how to enhance the LoadingButton by including a start icon. The icon is displayed when the button is not in a loading state, providing visual cues to the user. The example uses the AddIcon component. ```tsx import React from "react"; import { AddIcon, LoadingButton } from "@firecms/ui"; export default function LoadingButtonWithIconDemo() { const [loading, setLoading] = React.useState(false); const onClick = () => { setLoading(true); setTimeout(() => { setLoading(false); }, 2000); }; return ( } loading={loading} onClick={onClick}> Click Me ); } ``` -------------------------------- ### FireCMS Project Initialization Source: https://context7_llms Commands to create a new FireCMS project using the PRO starter template, available via npx or yarn. ```bash npx create-firecms-app --pro ``` ```bash yarn create firecms-app --pro ``` -------------------------------- ### Firebase App Loader Script Source: https://firebase.google.com/docs/app-check/web/recaptcha-provider This JavaScript snippet is used to load the Firebase App SDK and initialize it for the web application. It dynamically creates a script tag and appends it to the document's head. ```javascript (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/va786e79970aec04a12496606282a334acd24e2232e80173e6a239f5c02ccbb7e/firebase/js/app_loader.js', '[4,"ca",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/va786e79970aec04a12496606282a334acd24e2232e80173e6a239f5c02ccbb7e","https://www.gstatic.com/devrel-devsite/prod/va786e79970aec04a12496606282a334acd24e2232e80173e6a239f5c02ccbb7e/firebase","https://firebase-dot-devsite-v2-prod.appspot.com",null,null,[\"/_pwa/firebase/manifest.json\",\"https://www.gstatic.com/devrel-devsite/prod/va786e79970aec04a12496606282a334acd24e2232e80173e6a239f5c02ccbb7e/images/video-placeholder.svg\",\"https://www.gstatic.com/devrel-devsite/prod/va786e79970aec04a12496606282a334acd24e2232e80173e6a239f5c02ccbb7e/firebase/images/favicon.png\",\"https://www.gstatic.com/devrel-devsite/prod/va786e79970aec04a12496606282a334acd24e2232e80173e6a239f5c02ccbb7e/firebase/images/lockup.svg\",\"https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap\"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","firebase.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["Profiles__enable_developer_profiles_callout","MiscFeatureFlags__enable_llms_txt","MiscFeatureFlags__enable_variable_operator_index_yaml","Profiles__require_profile_eligibility_for_signin","DevPro__enable_cloud_innovators_plus","DevPro__enable_firebase_workspaces_card","DevPro__enable_developer_subscriptions","DevPro__enable_google_payments","Cloud__enable_llm_concierge_chat","MiscFeatureFlags__enable_firebase_utm","Profiles__enable_page_saving","Profiles__enable_stripe_subscription_management","MiscFeatureFlags__enable_explicit_template_dependencies","Concierge__enable_pushui","Concierge__enable_concierge","MiscFeatureFlags__enable_variable_operator","Significatio__enable_by_tenant","Analytics__enable_clearcut_logging","CloudShell__cloud_code_overflow_menu","TpcFeatures__enable_unmirrored_page_left_nav","TpcFeatures__proxy_prod_host","Search__enable_suggestions_from_borg","CloudShell__cloud_shell_button","Profiles__enable_recognition_badges","Cloud__enable_cloud_dlp_service","MiscFeatureFlags__enable_view_transitions","Profiles__enable_dashboard_curated_recommendations","MiscFeatureFlags__developers_footer_dark_image","DevPro__enable_enterprise","MiscFeatureFlags__enable_explain_this_code","EngEduTelemetry__enable_engedu_telemetry","Search__enable_ai_search_summaries_for_all","MiscFeatureFlags__enable_project_variables","Profiles__enable_profile_collections","Search__enable_dynamic_content_confidential_banner","MiscFeatureFlags__developers_footer_image","Cloud__enable_cloudx_experiment_ids","DevPro__enable_nvidia_credits_card","MiscFeatureFlags__emergency_css","Cloud__enable_legacy_calculator_redirect","Concierge__enable_actions_menu","Search__enable_page_map","Profiles__enable_completecodelab_endpoint","MiscFeatureFlags__enable_appearance_cookies","Profiles__enable_completequiz_endpoint","Profiles__enable_public_developer_profiles","MiscFeatureFlags__enable_dark_theme","DevPro__enable_devpro_offers","Cloud__enable_cloud_shell_fte_user_flow","DevPro__enable_free_benefits","Profiles__enable_playlist_community_acl","Search__enable_ai_search_summaries","Profiles__enable_join_program_group_endpoint","Cloud__fast_free"]) ``` -------------------------------- ### Initialize Firestore and Deploy Rules Source: https://firebase.google.com/docs/firestore/security/get-started This snippet demonstrates the process of initializing Firestore in a project directory, editing the security rules file, and deploying the rules for all configured databases using the Firebase CLI. ```bash firebase init firestore # Edit the generated .rules file to your desired security rules # ... firebase deploy --only firestore ``` -------------------------------- ### Example: Build Property for Tag Preview Source: https://context7_llms Demonstrates configuring an array of strings where each string element is previewed as a tag using buildProperty. ```tsx const property = buildProperty({ name: "Tags", description: "Example of generic array", dataType: "array", of: { dataType: "string", previewAsTag: true } }); ``` -------------------------------- ### FireCMS Cloud App Configuration Source: https://context7_llms Configures a FireCMS application for cloud deployment, defining custom views and collections. It uses `@firecms/core` and `@firecms/cloud` for setup. The example shows how to integrate a custom React component as a view and define a product collection. ```tsx import { buildCollection, CMSView } from "@firecms/core"; import { ExampleCMSView } from "./ExampleCMSView"; import { FireCMSAppConfig, FireCMSCloudApp } from "@firecms/cloud"; const projectId = "YOUR_PROJECT_ID"; const customViews: CMSView[] = [{ path: "additional", name: "Additional view", description: "This is an example of an additional view that is defined by the user", // This can be any React component view: }]; const productCollection = buildCollection({ name: "Product", id: "products", path: "products", properties: { name: { name: "Name", validation: { required: true }, dataType: "string" } } }); const appConfig: FireCMSAppConfig = { version: "1", collections: ({ user }) => [ productCollection ], views: customViews }; export default function App() { return ; } ``` -------------------------------- ### FireCMS App Initialization and Rendering Source: https://context7_llms Sets up the core FireCMS application by initializing various controllers and plugins, handling loading and authentication states, and rendering the main application layout. It includes dependencies like authentication, data sources, and navigation. ```javascript const { useValidateAuthenticator } = require("@firecms/core"); const { useBuildNavigationController } = require("@firecms/core"); const { useUserManagementPlugin } = require("@firecms/user_management"); const { useImportPlugin } = require("@firecms/import_export"); const { useExportPlugin } = require("@firecms/import_export"); const { useCollectionEditorPlugin } = require("@firecms/collection_editor"); const { CircularProgressCenter } = require("@firecms/ui"); const { FirebaseLoginView } = require("@firecms/firebase_ui"); const { FireCMS } = require("@firecms/core"); const { Scaffold } = require("@firecms/ui"); const { AppBar } = require("@firecms/ui"); const { Drawer } = require("@firecms/ui"); const { NavigationRoutes } = require("@firecms/ui"); const { SideDialogs } = require("@firecms/ui"); const { SnackbarProvider } = require("@firecms/ui"); const { ModeControllerProvider } = require("@firecms/ui"); // ... other imports and setup function MyApp({ firebaseConfigLoading, firebaseApp, configError, authController, userManagement, firestoreDelegate, storageSource, userConfigPersistence, signInOptions, notAllowedError, modeController }) { const { authenticator, loading: userManagementLoading, collectionPermissions } = userManagement; const authLoading = userManagement.loading; const canAccessMainView = !authLoading && authenticator; const { useValidateAuthenticator } = useValidateAuthenticator({ disabled: userManagement.loading, authenticator: userManagement.authenticator, authController, dataSourceDelegate: firestoreDelegate, storageSource }); const collectionsBuilder = useCallback(() => { const collections = [ booksCollection ]; return mergeCollections(collections, collectionConfigController.collections ?? []); }, [collectionConfigController.collections]); const navigationController = useBuildNavigationController({ basePath: "/", collections: collectionsBuilder, collectionPermissions: userManagement.collectionPermissions, adminViews: userManagementAdminViews, authController, dataSourceDelegate: firestoreDelegate }); const userManagementPlugin = useUserManagementPlugin({ userManagement }); const importPlugin = useImportPlugin(); const exportPlugin = useExportPlugin(); const collectionEditorPlugin = useCollectionEditorPlugin({ collectionConfigController }); if (firebaseConfigLoading || !firebaseApp) { return <>; } if (configError) { return <>{configError}; } return ( {({ context, loading }) => { if (loading || authLoading) { return ; } if (!canAccessMainView) { return ; } return ; }} ); } ``` -------------------------------- ### App Check Debug Provider for Web Apps Source: https://firebase.google.com/docs/app-check/web/recaptcha-provider This snippet outlines the concept of using a debug provider for App Check in web applications. It's intended for development and testing scenarios where standard attestation might not be feasible. Refer to the official documentation for implementation details. ```APIDOC App Check Debug Provider: Purpose: Enables App Check functionality in debug environments (e.g., local development, CI) by bypassing standard attestation checks. Usage: Typically involves configuring your web app to use a specific debug provider during development builds. Reference: See [Use App Check with the debug provider in web apps](/docs/app-check/web/debug-provider). Limitations: Not intended for production environments; relies on pre-shared keys or other debug-specific mechanisms. ``` -------------------------------- ### AWS SDK for Java: Manage S3 Bucket CORS Configuration Source: https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html This Java code snippet demonstrates managing S3 bucket CORS configurations using the AWS SDK. It includes examples for setting, retrieving, modifying, and deleting CORS rules, handling multiple rules and origins. ```Java import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.BucketCrossOriginConfiguration; import com.amazonaws.services.s3.model.CORSRule; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class CORS { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; // Create two CORS rules. List rule1AM = new ArrayList(); rule1AM.add(CORSRule.AllowedMethods.PUT); rule1AM.add(CORSRule.AllowedMethods.POST); rule1AM.add(CORSRule.AllowedMethods.DELETE); CORSRule rule1 = new CORSRule().withId("CORSRule1").withAllowedMethods(rule1AM) .withAllowedOrigins(Arrays.asList("http://*.example.com")); List rule2AM = new ArrayList(); rule2AM.add(CORSRule.AllowedMethods.GET); CORSRule rule2 = new CORSRule().withId("CORSRule2").withAllowedMethods(rule2AM) .withAllowedOrigins(Arrays.asList("*")).withMaxAgeSeconds(3000) .withExposedHeaders(Arrays.asList("x-amz-server-side-encryption")); List rules = new ArrayList(); rules.add(rule1); rules.add(rule2); // Add the rules to a new CORS configuration. BucketCrossOriginConfiguration configuration = new BucketCrossOriginConfiguration(); configuration.setRules(rules); try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Add the configuration to the bucket. s3Client.setBucketCrossOriginConfiguration(bucketName, configuration); // Retrieve and display the configuration. configuration = s3Client.getBucketCrossOriginConfiguration(bucketName); printCORSConfiguration(configuration); // Add another new rule. List rule3AM = new ArrayList(); rule3AM.add(CORSRule.AllowedMethods.HEAD); CORSRule rule3 = new CORSRule().withId("CORSRule3").withAllowedMethods(rule3AM) .withAllowedOrigins(Arrays.asList("http://www.example.com")); rules = configuration.getRules(); rules.add(rule3); configuration.setRules(rules); s3Client.setBucketCrossOriginConfiguration(bucketName, configuration); // Verify that the new rule was added by checking the number of rules in the // configuration. configuration = s3Client.getBucketCrossOriginConfiguration(bucketName); printCORSConfiguration(configuration); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a reason other than the server // being down or offline. These exceptions are rare, but could happen if // there is a network issue; the SDK itself is unable to connect to S3. e.printStackTrace(); } } // Helper method to print CORS configuration public static void printCORSConfiguration(BucketCrossOriginConfiguration configuration) { if (configuration == null || configuration.getRules() == null || configuration.getRules().isEmpty()) { System.out.println("No CORS configuration found."); return; } System.out.println("CORS Configuration:"); for (CORSRule rule : configuration.getRules()) { System.out.println(" Rule ID: " + rule.getId()); System.out.println(" Allowed Methods: " + rule.getAllowedMethods()); System.out.println(" Allowed Origins: " + rule.getAllowedOrigins()); System.out.println(" Exposed Headers: " + rule.getExposedHeaders()); System.out.println(" Max Age Seconds: " + rule.getMaxAgeSeconds()); System.out.println(" Allowed Headers: " + rule.getAllowedHeaders()); System.out.println("---"); } }} ``` -------------------------------- ### Initialize Firebase App Check with reCAPTCHA v3 Source: https://firebase.google.com/docs/app-check/web/recaptcha-provider Initializes Firebase App Check for a web application using the reCAPTCHA v3 provider. This involves importing necessary modules, configuring the Firebase app, and activating App Check with your reCAPTCHA site key. It also covers enabling automatic token refresh. ```javascript import { initializeApp } from "firebase/app"; import { initializeAppCheck, ReCaptchaV3Provider } from "firebase/app-check"; const app = initializeApp({ // Your firebase configuration object }); // Pass your reCAPTCHA v3 site key (public key) to activate(). Make sure this // key is the counterpart to the secret key you set in the Firebase console. const appCheck = initializeAppCheck(app, { provider: new ReCaptchaV3Provider('abcdefghijklmnopqrstuvwxy-1234567890abcd'), // Optional argument. If true, the SDK automatically refreshes App Check // tokens as needed. isTokenAutoRefreshEnabled: true }); ``` ```javascript firebase.initializeApp({ // Your firebase configuration object }); const appCheck = firebase.appCheck(); // Pass your reCAPTCHA v3 site key (public key) to activate(). Make sure this // key is the counterpart to the secret key you set in the Firebase console. appCheck.activate( 'abcdefghijklmnopqrstuvwxy-1234567890abcd', // Optional argument. If true, the SDK automatically refreshes App Check // tokens as needed. true); // Alternatively, enable auto-refresh separately: // firebase.appCheck().setTokenAutoRefreshEnabled(true); ``` -------------------------------- ### Initialize Navigation Controller Source: https://context7_llms Demonstrates the initialization of a navigation controller using the `useBuildNavigationController` hook. It requires configurations for collections, views, admin views, collection permissions, an authentication controller, and a data source delegate. ```jsx const navigationController = useBuildNavigationController({ collections: customCollections, views: customViews, adminViews: userManagementAdminViews, collectionPermissions: collectionEditorPlugin.collectionPermissions, authController, dataSourceDelegate: firestoreDelegate }); ```