diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..e3491a7df1 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,6 @@ +# This is a managed file. Manual changes will be overwritten. +# If you need to add codeowners to the repository please add them to the CODEOWNERS file in the scripts/files directory at +# https://github.com/FusionAuth/fusionauth-public-repos/ + +* @fusionauth/owners @fusionauth/platform @FusionAuth/developer-relations-admins @FusionAuth/website-admins @FusionAuth/developer-relations @FusionAuth/developers @FusionAuth/customer-support @FusionAuth/marketing +.github/ @fusionauth/owners @fusionauth/platform @FusionAuth/website-admins diff --git a/.github/knownwords.txt b/.github/knownwords.txt deleted file mode 100644 index 0e2921a965..0000000000 --- a/.github/knownwords.txt +++ /dev/null @@ -1,3125 +0,0 @@ -AAD -ABAC -ACL -ACLs -ACS -ACl -ADFS -AES -AET -AICPA -AJP -AKS -AMI -APIs -API’s -AaaS -AaaS’s -ActionScript -Actioning -ActiveDirectory -ActiveRecord -Activision -AdCellerant -AdCellerant’s -AdoptOpenJDK -Akira -Alexa -Alfrick -Alphashot -Alternativeto -AlvMF -Ampio -Analytics -AngularDenver -Anonymization -ApacheBench -Apereo -Apigee -AppAuth -AppRouting -AppSec -AppleID -AppleTV -ApplicationController -Artifactory -Asciidoc -Atlassian -Audacy -Auth -AuthN -AuthNRequest -AuthNRequestIdTimeToLiveInSeconds -Authenticator -AuthorizedNotRegistered -Authy -Axios -BAAs -BCC -BCP -BCrypt -BLS -BSW -BSc -Bachman -Bachmanity -Backend -Balancer -Barden -Bas -Basecamp -Bcrypt -Becquel -Berberian -Billingsley -Biometric -Birthdate -Bitbucket -Blaise -BlazorServer -Blockchain -Blowfish -Boisseau -Boland -Bonhill -Boomtown -Botnyx -Breanne -BrieBug -BrokerNotes -Bshaffer’s -Bundesdatenschutzgesetz -CAPTCHA -CAS -CCAv -CCPA -CDN -CDNs -CFML -CIAM -CIO -CLI -CLIENTID -CMO -CMS -CN -COPPA -CORS -CPAs -CPUs -CRM -CSNC -CSP -CSR -CSRF -CSV -CTA -CTFd -CTO -CTOs -CTRL -CVE -CVEs -CYA -Canonicalization -Captcha -Capterra -Carribbean -CentOS -Centralise -Certbot -Cha -ChildRegistrationNotAllowed -ChildRegistrationNotAllowedComplete -CircleCI -CleanSpeak -ClientResponse -CloudFlare -CloudKarafka -Cloudfront -CockroachDB -Codebase -Cognito -Coldfusion -CompareCamp -CompleteRegistration -Config -Connect's -Contaim -Contaim's -Covid -Cracklib -Creedo -Cron -Cryptographic -CurrentDesk -CurrentDesk’s -Customizable -Customizations -Cyber -Cybercraft -Cyfe -DDL -DDOS -DDoS -DEBs -DFIR -DHCP -DIT -DIY -DN -DNS -DNT -DOM -DPA -DPAs -DPO -DPOP -DPoP -DSL -DSS -Da -DataStax -DataStax's -DataStax’s -Datacenter -Datadog -DateTimeFormatter -DaviddH -Davidmw -Dax -DeGroff -DeHashed -DecSecOps -Deduplicate -Deeplinking -Deliverables -Deployable -Deutsche -Dev -DevOps -DevSecOps -DevTools -DeviceComplete -Devs -DigitalOcean -Dockerfile -Docusign -Doherty -DolphinVC -DolphinVC’s -Dropdowns -Drud -Dwyer -EBOOK -ECC -ECDSA -ECMA -ECS -EIU -ELB -EMR -EPrivacy -ERM -ERP -ERPNext -ESET's -EU’s -Eames -EddieWhi -ElasticSearch -Encryptor -Encryptors -Endsession -EntityId -EntityType -EpicGames -Equifax -Erlich -Erlich’s -EventInfo -ExpressJS -ExternalJWT -FIDO’s -FISMA -FITT -FS -FUSIONAUTH -Fabiosimeoni -FaceID -Fairley -Fargate -FastPath -Fazlic -FedRamp -Filesystem -FireFox -Firewalling -Flickr -FormField -Formspree -Fortnite -FreeMarker -FreeMarker’s -Freemarker -Freshdesk -Frontdoor -Frontend -FursionAuth -FusionAUth -FusionAuth -FusionAuth's -FusionAuthClient -FusionAuths -FusionAuth’s -Fusionauth -GBM -GCP -GDPR -GDPR’s -GDRP -GH -GKE -GLUU -GMail -GNAP -GPL -GSuite -GUID -Gameboard -Gearo -Geoly -Getka -GhostProject -Giese -Giphy -Github -Gitlab -Gluu -Gmail -Gmork -GoDaddy -Golang -Gowie -GraafG -Gradle -GraphQL -Gravatar -Graviton -Graylog -Guice -Gumerman -HAProxy -HATEOAS -HAproxy -HCaptcha -HIPAA -HMAC -HRMatches -HTTPHeader -HTTPOnly -HTTPS -HYPR -HYPR’s -HashiCorp -Hasso -Hasura -Hawley -Hcaptcha -HelloWorld -Helpdesk -HikariCP -Hladky -Hmmm -HomeComponent -Homebrew -Hooli -Hooliphone -Hostname -Hotmail -Hotspot -HttpClient -HttpOnly -HttpServletRequest -HubSpot -Hulu -IAM -IANA -ICMP -ICT -IDaaS -IETF -IOPS -IPTable -IPTables -IPs -IPv -IP’s -IdP -IdPs -IdentityModel -Identiverse -Identiverses -Idp -Ilya -Imagescape -InfoSec -InfoSec’s -InfoWorld -Infosec -InnoDB -Instapage -Integra -Integrations -Integromat -Inversoft -IoT -JAMStack -JAMstack -JBoss -JDBC -JDK -JKS -JKU -JMX -JS -JSON -JSX -JUnit -JVM -JVMs -JVM’s -JWA -JWE -JWK -JWKS -JWS -JWT -JWTManager -JWTS -JWTs -JWT’s -JavaDoc -Javascript -JediSquirrel -JesperWe -Jian’s -Jira -JonasDoe -Joomla -Joomla’s -Jordi -JuliusPC -Jwt -KVM -Kaewsanmuang -Keanan -KeyCloak -KeyDescriptor -KeyInfo -KeyMaster -Keychain -Keycloak -Keymaster -Keystore -Kibana -Kickstart -Kicstart -Konga -Koppenhaver -Krissanawat -Kubernetes -Kwong -LDAP -LDAPS -LTS -Laravel -Laravel’s -Latacora -Lawgical -Lechu -LetsEncrypt -Lifecycle -Lightsail -LinkedIn -LinkedIn’s -Linode -LiveJournal -Localizable -LoginCmd’s -LoginId -LogoutRequest -LogoutRequests -LogoutResponse -Lohith -LohithBlaze -MAJEURE -MAU -MAUs -MBeanServerConnection -MDN -MENA -MERCHANTABILITY -MERN -MEVN -MSI -MTLS -MVCs -MVPs -MacBook -MacOS -Macbook -Maciej -Maia -Mailchimp -Mailgun -Majeure -MapperParsingException -MarTech -Maslow’s -Mathway -MeetingPlay -Mehamm -Mèlich -MetaData -Mgmt -Micha -Microservice -Microservices -MiddleWare -Middleware -Mihir -Minecraft -MiniOrange -Mirza -Mistyped -MobiStream -Mongo -Monit -MrChrisRodriguez -MultiFactor -Multibindings -Musyj -MyBatis -MysQL -NDA -NETCore -NGINX -NIST -NODEJS -NPE -NPM -NREL -Nada -NameID -NameId -NanoPi -Nashorn -Nechaev -Netcore -NextAuth -Nextcloud -NgRx -Nginx -Niehls -Nielson -Niklas -NikolayMetchev -NodeBB -NodeJS -Nodemon -Nokogiri -Noore -Nordstrom -Nrwl -NuGet -OAuth -OAuthController -OAuthError -OAuth’s -OAuuth -OGGEH -OIDC -OO -OOM -ORMs -OSTicket -OTE -OTP -OWASP -OWASP’s -Oauth -OauthServer -Obdam -Odoo -Ok -Okta -Okta's -Okta’s -Onboarding -OneLogin -Onelogin -Oooh -OpenFaaS -OpenIAM -OpenID -OpenIDConnect -OpenId -OpenIdConfiguration -OpenIdConnectOptions -OpenJDK -OpenLDAP -OpenNebula -OpenShift -OpenSource -Opidi -Orbitvu -Orbitvu’s -Oryx -Overengineering -O’Reilly -PBKDF -PCI -PCKE -PEM -PII -PIPEDA -PKCE -PKCS -PKCe -PLIST -POC -POCs -POSIX -POSTs -PPVC -PPVC’s -PREROUTING -PSN -PWA -PWD -Packagist -Parecki -Pasetos -PasswordEncryptor -Passwordless -Pavey -PendingIdPLink -PendingIdpLink -Percona -Photoshop -Php -PiedPiper -Pixy -Plaintext -Plattner -Playstation -Pluggable -Plunket -Plunkett -Plunkettscott -Polis -Polstra -Polynome -Ponemon -Pontarelli -PopulateId -Postgres -PostgresSQL -Postgresql -PowerEdge -PowerShell -Powershell -Pre -Preflight -Prem -Prepend -Primus -Propertyfinder -Proxying -Pssst -Ptacek -PyPI -QRCode -Qinship -QuickBooks -Quickstart -RBAC -RC’s -RDP -README -RESTful -RJ -RO -ROI -RPMs -RPM’s -RPs -RQ -RSA -RSASSA -RSS -Rackspace -Raghavsalotra -RailsAdmin -Raviga -ReCaptcha -ReactNative -React’s -Readme -Readymag -Readymag’s -Recaptcha -RedHat -Reddis -Rees -Reindex -Reindexing -Relicensing -Reschke -Resending -ResourceBundles -Richb -Ritchie -Roadmap -RocketChat -Roddy -Rodrigues -Rollup -Runtime -RxJS -SAAS -SAML -SAMLv -SAMl -SATA -SBC -SCIM -SCP -SCrypt -SDK -SDKs -SEO -SES -SHA -SHAs -SIMs -SLA -SLAs -SLF -SMBs -SMS -SMTP -SPAs -SPs -SRE -SSAE -SSD -SSL -SSO -STARTTLS -STDOUT -STV -SWAKS -SaaS -Saas -Scalability -Schramm -Schuchard -Screensteps -Scrypt -Seegno -Seegno’s -SendGrid -Sendgrid -Sergey -Serverless -Servlet -Severability -Sharding -ShayMoshe -Shuvalov -Signup -Silverman -SimplePass -Slyk -SnipeIT -SoR -Softozor -Softozor’s -Soluvas -Souza -Sparkpost -Sphero -Spiteri -StackOverflow -StackOverflow’s -Stackoverflow -StanislavKD -Starke -StartIdPLink -StartTLS -Stech -SteemHunt -Stormpath -StrategyCorp -StrategyCorps -Stylesheet -Sudo -SuiteCRM -Sunfinity -Sunfinity's -Sunshower -Superagent -SwitchToFusionAuth -Swoole -Symfony -Syncer -Sys -SystemConfiguration -Sytem -TCP -TLDR -TLS -TLSv -TOTP -TRUSTe's -TTL -TWGTL -TWGTL’s -TWitter -TZ -TanguyGiton -TechTarget -TenantId -Teplate -Terraform -TestNG -Thawte -TheHive -Themeable -Theming -Tintwo -ToDo -ToDos -Todo -TodoInc -Todos -TokenDecoder -Toptal -TphXOL -Traefik -Trauzzi -Trello -Tucan -Tucan's -Twilio -TwoFactor -TwoFactorMethod -TwoFactorMethods -TxAuth -TypeScript -UAE -UAT -UDP -UI -UIs -UML -UPN -URI -URIs -UTF -UUID -UUIDs -UX -Uber -Un -Uncheck -Unchecking -Uncomment -Unencoded -Unio -Unio’s -Unlink -Unmigrated -Unregister -Unsupervised’s -Upgradeable -Uptime -UserActions -UserConsent -UserId -UserInfo -UserRegistration -UserService -Userinfo -UsingSSL -Uvicore -VC -VCS -VENV -VENV’s -VLANs -VM -VMs -VPC -VPN -VSCode -Velociraptor -Vendio -Venkatesh -Verifiers -Verisign -Vilot -Vishang -Vonn -Vue -VueJS -Vultr -WEBAuth -WG -WPF -WSGI -WUPHF -WUPHFs -WUPHF’s -WWT -Wahlin -Walkthrough -WebAuthN -WebAuthn -WebService -Webapp -Webhook -Webhooks -Webhook’s -Welton -Whiskerch -Whitepaper -Whitespace -Wifi -Willemelis -Wisniowski -Wordpress -Workativ -Wortmann -XBox -XKCD -XMLHttpRequest -XSD -XSS -XYZ -Xan -Xbox -Xbox’s -Xcode -Xeon -Xero -Xkit -Xkit’s -YAML -YYYY -Yay -Yubico -Yubikey -Yubikeys -ZIPs -Zapier -Zendesk -Zuck -aaaaaa -abcd -accessTokenKeyId -accessTokenPopulateId -accountEdit -accountIndex -accountSID -accountTwoFactorDisable -accountTwoFactorEnable -accountTwoFactorIndex -accurateTotal -acl -acquirer’s -actionDuration -actionDurationUnit -actionId -actionRequired -actioned -actioneeUserId -actioner -actionerUserId -actioning -actioon -addon -addons -adminRegistrationFormId -adminUserFormId -administrivia -adminstrator -admin’s -adoliver -adtech -advancedIdentityProviders -advancedMultiFactorAuthentication -advancedRegistration -ai -airgapped -ajax -ajp -algorithmically -allLogoutURLs -allauth -allowChildRegistrations -allowCredentials -allowEmailChange -allowEmailChangeWhenGated -allowTokenRefresh -allowedHeaders -allowedMethods -allowedOrigins -amar -amongst -analytics -anbraten -ange -anonymization -anonymousResults -apache -api -apiKey -apiKeyId -apikey -apis -appId -appleUser -applicationConfiguration -applicationId -applicationIds -applicationName -applicationThemes -applicationTimeToLiveInSeconds -applicationTotals -applicationid -approximatly -appsec -architecting -arg -args -arni -arslanakhtar -arunmg -ascii -ashokgelal -assword -async -asynchrony -atrauzzi -aud -auditLog -auditLogConfiguration -auditLogs -auth -authToken -authentiationg -authenticationToken -authenticationTokenConfiguration -authenticationType -authenticationURL -authenticatium -authenticator -authenticators -authn -authorizationGrantIdTimeToLiveInSeconds -authorizedOriginURLs -authorizedRedirectURLs -autofilled -autogenerated -autoload -autoloader -availableMethods -availableMethodsMap -axios -backend -backends -backend’s -backplane -balancer -balancers -barebones -barrett -baseStructure -bb -bccAddresses -bcrypt -behaviour -benchmarking -bertiehub -bioinformatics -biologics -biometric -biometrics -birthDate -birthdate -birthdates -blanche -blockchain -blockedDomains -boolean -booleans -bradleykite -brainer -breachDetection -breachResult -breachedPasswordDetection -breachedPasswordMetrics -brennan -bundleId -bundler -bursty -burt -buttonImageURL -buttonText -cURL -calebfreeman -callbackURL -cancelEmailTemplateId -cancelled -caniuse -canonicalization -captcha -captchaConfiguration -captchaMethod -carte -catalogued -ccAddresses -cca -ceefour -centralised -centric -certificateInformation -changePasswordId -changePasswordIdGenerator -changePasswordIdTimeToLiveInSeconds -chargebacks -charset -checkboxes -checkmark -ching -chris -chrishare -ckolbeck -claimMap -classloader -classname -classpath -cleanSpeakConfiguration -cleanSpeakId -cleanspeak -cli -clientAuthenticationMethod -clientAuthenticationPolicy -clientId -clientSecret -cloudfront -cnf -cockroachdb -codeLength -codebase -codeless -cofounder -colingm -collectBirthDate -collectVerificationCode -colundrum -commenterId -comparision -completedLinks -config -configation -confirmChildEmailTemplateId -confirmPassword -connectTimeout -connectorId -connectorPolicies -consentEmailTemplateId -consentId -consumerKey -consumerSecret -contrib -corpuses -correcthorsebatterystaple -cors -corsConfiguration -counterintuitive -countryMinimumAgeForSelfConsent -covid -createApplication -createInstant -createRegistration -cron -crontab -crypto -cryptographic -cryptographically -css -currentPassword -currentUser -customisations -customise -customizability -customizable -customizations -cutover -cutovers -cyber -cybercraft -cybercriminals -cyberpower -cybersecurity -c’mon -da -dailyActiveUsers -damienherve -dan -dataMigrated -datacenter -datadir -dataset -datasets -datasource -datastore -datastores -dateTimeSecondsFormat -dateparser -davidmw -dba -de -dealbreaker -dealcloser -dealcloser’s -debian -decompile -decompiled -decompiling -decrypt -decrypting -decrypts -deeplinking -defaultFromEmail -defaultFromName -defaultHtmlTemplate -defaultMessages -defaultMinimumAgeForSelfConsent -defaultSubject -defaultTemplate -defaultTextTemplate -defaultTopic -defaultVerificationKeyId -deleteOrphanedAccounts -deleteOrphanedAccountsDays -deliverability -deliverables -dependant -deployability -deployable -dereference -deserialize -destigmatize -detections -dev -deviceCodeTimeToLiveInSeconds -deviceDescription -deviceName -devicePendingIdPLink -deviceTrustTimeToLiveInSeconds -deviceType -deviceUserCodeIdGenerator -deviceVerificationURL -deving -devs -dhait -dhudlow -differentiator -differentiators -disableDomainBlock -discoverable -displayName -django -dockerfile -doctype -dogfood -dotenv -dotnetcore -dowload -downagain -downstreams -dpkg -dropdown -dropdowns -dryRun -dtokarz -duplicateEmail -duplicateUsername -durations -eb -ebook -eg -eirikur -elasticsearch -else’s -emailClaim -emailComplete -emailConfiguration -emailPlus -emailSend -emailSent -emailTemplate -emailTemplateId -emailTemplates -emailUser -emailUserOnEnd -emailVerificationEmailTemplateId -emailVerificationId -emailVerificationIdGenerator -emailVerificationIdTimeToLiveInSeconds -emailVerificationOneTimeCodeGenerator -emailVerificationRequired -emailVerify -emailedUser -enabledGrants -encodedJWT -encryptionScheme -encryptionSchemeFactor -encryptor -encryptors -endEmailTemplateId -endEventSent -endIPAddress -engineertdog -entityId -entityManagement -entityType -entityTypeId -entityTypes -enum -env -epically -errorMessages -errortype -esign -eventConfiguration -eventLog -eventLogConfiguration -eventLogs -eventing -eventsEnabled -executation -expirationInstant -expirations -explainer -exposedHeaders -extensibility -externalAuthenticationIdTimeToLiveInSeconds -externalIdentifierConfiguration -fabiojvalente -fabiosimeoni -facto -failedAuthenticationConfiguration -failedLogin -failover -fallbacks -familyConfiguration -familyId -familyMember -familyRequestEmailTemplateId -favicon -favicons -fe -featureful -fido -fieldErrors -fieldId -fieldMessages -fieldName -filesystem -financials -firebase -firstName -flangfeldt -footguns -forecasted -forgotPassword -forgotPasswordEmailTemplateId -formConfiguration -formConfigured -formId -forumula -fred -freemarker -free’ish -frictionless -fromEmail -fromPhoneNumber -frontdoorhome -frontend -fullName -func -fusionAuth -fusionapps -fusionauth -fusionauthsearch -gRBAC -gapped -gatling -geekery -generalErrors -generateAuthenticationToken -generateRefreshTokens -getWUPHF -getgif -geting -getter -gettext -getwuphf -gif -gifs -giphy -github -gitlab -giverUserId -globalRegistrations -gmail -gmpreussner -godoc -golang -gordody -gpg -granularly -graphql -groupId -guice -gurupras -gz -hCaptcha -haproxy -hardDelete -hardcode -hardcoded -hardcoding -hardwon -hasDomainBasedIdentityProviders -hasPrivateKey -hasher -hasura -hbonow -headerColor -headerKeyParameter -healthcase -healthcheck -helpdesk -heros -heterogenous -hideBirthDate -historyItem -historyItems -hkolbeck -hmac -horcrux -hostingadvice -hostname -hostnames -hotspot -hourlyCounts -href -html -http -httpAuthenticationPassword -httpAuthenticationUsername -httpSessionMaxInactiveInterval -https -iCloud -iat -idTokenKeyId -idTokenPopulateId -identifyingAttribute -identityProvider -identityProviderId -identityProviderLink -identityProviderLinks -identityProviderName -identityProviderUserId -identityProviders -idp -idpEndpoint -ified -iframe -iframes -imageUrl -implementor -inResponseTo -inaba -incentivizes -incidentId -includeEmailInEventJSON -influencers -infographic -ing -inhouse -init -insertInstant -insertUser -installable -instanceId -instantiations -integratable -integrations -integrators -interchangably -interoperable -invalidations -io -ip -ipAccessControlList -ipAccessControlListId -ipAccessControlLists -ipAddress -iptables -ipv -irgapping -irzhywau -isDefault -isSuperRole -isn -iss -isssue -issueInstant -iteratively -jQuery -jandillmann -javascript -jdbc -jegger -jekyll -jerryhopper -jinja -jlink -jm -jmeter -johan -johnmaia -joshuaavalon -joydeb -jq -js -json -jti -judgement -jwks -jwt -jwtConfiguration -kafka -karice -karrer -keller -keyId -keyManager -keycard -keychain -keycloak -keycodes -keyname -keypair -keypairs -keystore -keystores -kickstart -kong -kubernetes -kyvrfuntpsp -labelled -labelling -lambdaConfiguration -lambdaId -lamuertepeluda -lastAccessedAddress -lastAccessedInstant -lastLoginInstant -lastNBytes -lastName -lastUpdateInstant -lastUsed -latently -lavavel -leafknode -licensable -licenseId -lifecycle -lifecycles -linkingStrategy -linter -lliu -localhost -localizable -localizations -localizedAction -localizedDuration -localizedFromNames -localizedHtmlTemplates -localizedMessages -localizedNames -localizedOption -localizedReason -localizedSubjects -localizedTemplates -localizedTextTemplates -localizedTexts -localstorage -logId -loginConfiguration -loginId -loginIdAttribute -loginIdType -loginIds -loginMethod -loginProvider -loginRecordConfiguration -loginTheme -logoURL -logoutBehavior -logoutURL -logoutUrl -lookups -loopback -lossy -macOS -mailcatcher -mao -masse -matchMode -matchedCommonPasswordCount -matchedExactCount -matchedPasswordCount -matchedSubAddressCount -maths -maurobennici -maxLength -maximumChildAge -maximumPasswordAge -maximumTimeToSendEmailInHours -mb -mcs -md -meatspace -memberId -memberIds -menuFontColor -messageTemplate -messageTemplateId -messageTemplates -messagingServiceSid -messagingServicesSid -messengerId -metaData -methodId -mgetka -michael -microservice -microservices -middleName -middleware -mikerees -minLength -miniOrange -minified -minimumOwnerAge -minimumPasswordAge -minimumTimeToSendEmailInHours -minjup -mis -misconfiguration -misconfigure -misconfigured -mobilePhone -modelling -modifyEmailTemplateId -modifyEncryptionSchemeOnLogin -mojo -mongodb -monthlyActiveUsers -morgan -mortem -motzel -mreschke -multiFactorAvailable -multiFactorConfiguration -multipleValuesAllowed -multiservice -mvc -myApp -mycompany -mysql -nMethod -nalyses -nameID -namespace -nat -natively -naughtly -nav -nd -netcore -newValue -ngGirls -ngModel -nginx -ngrok -nicholasbutlin -nikos -nitty -noJWT -noLink -nodebb -nodejs -nodemon -nonconformance -notAuthenticated -notAuthorized -notBefore -notOnOrAfter -notifyUser -notifyUserEmailTemplateId -notifyUserOnEnd -npm -nscarlson -nulian -numberOfDaysToRetain -numberOfDigits -numberOfResults -numberToRetain -oauth -oauthConfiguration -oauthJSONError -occured -offboarding -oidc -ok -oldValue -oliver -onLogin -onLoginPrevented -onPasswordChanged -onboarded -onboarding -oneTimeCode -oneTimePassword -oneTimePasswordTimeToLiveInSeconds -ons -oottinger -openid -orderBy -organisations -orgs -orrett -orrett’s -os -osquery -overrride -ovrdoz -packshots -pakomp -pamcpd -parentEmail -parentEmailRequired -parentRegistrationEmailTemplateId -parseErrors -parsers -paseto -passcode -passthrough -passwordChange -passwordChangeReason -passwordChangeRequired -passwordComplete -passwordEncryptionConfiguration -passwordForgot -passwordLastUpdateInstant -passwordSent -passwordValidationRules -passwordless -passwordlessConfiguration -passwordlessEmailTemplateId -passwordlessEnabled -passwordlessLoginGenerator -passwordlessLoginTimeToLiveInSeconds -passwordsCheckedCount -paulspencerwilliams -pawpro -paypal -pbkdf -peasy -pendingIdPLinkId -pendingIdpLink -pentested -pentesting -performant -perl -permissionId -persistant -personalization -petechungtuyco -php -piedpiper -pixy -plaintext -plist -plunkettscott -polyfill -postMethod -postRequest -postgres -postgresql -prabhakarreddy -prasanna -pre -prebuilt -prebundled -preferredLanguage -preferredLanguages -preflightMaxAgeInSeconds -prem -premailer -prepend -prepended -prepopulates -preventLogin -preventingLogin -previousEmail -privateKey -programatically -programmatically -prometheus -proofKeyForCodeExchangePolicy -protcol -proto -prover -provisionary -proxied -proxying -pseudonymization -pseudonymize -publicKey -publicKeys -pushEnabled -pushPreferred -pushback -py -pythonapp -qa -qj -queryString -radicaljohan -rateLimitConfiguration -rb -readTimeout -readme -realtime -realtor -reasonCode -reasonId -reauthentication -recieve -recieves -recipientEntityId -reconcileId -recoverCodesAvailable -recoveryCodes -redirectURL -redis -refreshToken -refreshTokenExpirationPolicy -refreshTokenRevocationPolicy -refreshTokenTimeToLiveInMinutes -refreshTokenUsagePolicy -refreshTokens -registeredLogoutURLs -registrationComplete -registrationConfiguration -registrationDeletePolicy -registrationEnabled -registrationSend -registrationSent -registrationVerificationId -registrationVerificationIdGenerator -registrationVerificationIdTimeToLiveInSeconds -registrationVerificationOneTimeCodeGenerator -registrationVerificationRequired -registrationVerify -reimagined -reimagining -reimplement -reimplementing -reindex -reindexing -relicensing -relyingPartyApplicationId -relyingPartyURL -rememberDevice -rememberOAuthScopeConsentChoiceTimeToLiveInSeconds -rememberPreviousPasswords -renderErrors -replicable -repo -reportTimezone -repos -repurpose -reputational -reputationally -requestData -requestId -requestSigningKeyId -requestedAttributes -requireAuthentication -requireClientAuthentication -requireMixedCase -requireNonAlpha -requireNumber -requireRegistration -requireSignedRequests -reseller's -resendCode -resetCountInSeconds -respository -resposne -retrieveTotal -rhofland -roadmap -roadmaps -roleId -roleIds -rollercoaster -rollout -rollouts -ruckc -rulesets -runtime -safelist -samlResponse -samlv -sandboxed -satazor -satisify -scalability -scalable -schemas -scriptage -seanadkinson -secretBase -secretKey -secretbirthdays -secretbirthdaysapp -securityMethod -sedough -sellings -sendEmailVerification -sendEndEvent -sendForgotPasswordEmail -sendPasswordless -sendRegistrationVerification -sendSetPasswordEmail -sendTwoFactor -sendVerifyEmail -sendVerifyRegistrationEmail -serialNumber -serializer -serverTimezone -serverless -servicebridge -servicesId -setPasswordEmailTemplateId -setupPasswordIdGenerator -setupPasswordIdTimeToLiveInSeconds -sha -sharding -shodan -shortcodes -shortname -shortstack -showCaptcha -showPasswordField -showResendOrSelectMethod -signRequest -signin -signon -signup -siloed -singleLogout -siteKey -skillset -skinnable -skipRegistrationVerification -skipVerification -smcoll -smoorsausje -sms -snmed -softozor -sortFields -sortable -soullivaneuh -sourceTenantId -sourceThemeId -specialised -specialises -spi -src -srothery -ssh’s -ssl -sslCertificate -sslCertificateId -sso -ssoConfiguration -standads -stardard -startEmailTemplateId -startIPAddress -startInstant -startRow -stateful -stdout -stevenrombauts -streem -stringifies -stringify -stylesheet -stylesheets -subdirectory -sublicensable -sublicense -subnet -subnets -suboptimal -substring -sudo -sudoers -superset -sym -symlink -symlinked -symlinking -systemAccountDN -systemAccountPassword -systemConfiguration -systemd -tauinger -teamId -techcentric -telehealth -templateId -templated -templating -tenantId -tera -terraform -testbed -textMessage -textarea -th -thegrugq -thekoding -themable -themeId -themeability -themeable -theming -there’d -there’ll -threatsDetected -ths -timePeriodInSeconds -timeStep -timeToLiveInSeconds -timebound -timeframe -timeframes -timezones -tldr -toAddresses -todo -todos -tokenId -tombeany -tooManyAttempts -toolset -tooltip -totalGlobalRegistrations -totalRegistrations -tradeoff -tradeoffs -transactionType -transactional -travelling -trevorr -triaging -trialling -trustComputer -truststore -tst -tvcode -twilio -twoFactor -twoFactorDelivery -twoFactorEnabled -twoFactorId -twoFactorIdTimeToLiveInSeconds -twoFactorOneTimeCodeIdGenerator -twoFactorOneTimeCodeIdTimeToLiveInSeconds -twoFactorSecret -twoFactorTrustId -twoFactorTrustIdTimeToLiveInSeconds -über -uiConfiguration -ulybu -un -unapologetically -uncheck -uncledent -uncomment -uncommenting -uncompromised -undesireable -unencoded -unencrypted -unescaped -unexamined -unicode -uniqueIdentityClaim -unix -unkis -unlink -unmigrated -untoggled -upsert -upstreaming -uptime -upvote -uri -url -urlpatterns -urls -useNameIdForEmail -userAction -userActionId -userActionReason -userActionReasonId -userActionReasons -userActions -userAgent -userCanReceivePush -userCodeLength -userComment -userComments -userConsent -userConsentId -userConsents -userDeletePolicy -userEmailingEnabled -userId -userIds -userNotificationsEnabled -userState -userbases -userdata -userinfo -usernameConfiguration -usernameModeration -usernameStatus -userspace -userstands -usr -utf -validFrom -validTo -validateDbConstraints -validateOnLogin -validator -validators -varchar -vburghelea -venv -verif -verificationEmailTemplateId -verificationId -verificationOneTimeCode -verificationStrategy -verifier -verifiers -verifyEmail -verifyEmailWhenChanged -verifyRegistration -vibranium -virginijus -virtualized -vlade -walkthrough -wasdennnoch -webAPIKey -webapp -webapps -webapp’s -webauthn -webAuthnAuthenticationChallengeTimeToLiveInSeconds -webAuthnConfiguration -webAuthnRegistrationChallengeTimeToLiveInSeconds -webhook -webhookId -webhookIds -webhooks -webhook’s -webpage -webroot -webserver -webservice -webtask -webview -webviews -whiskerch -whitepaper -whitepapers -wifi -wil -wildcarding -wishlist -ws -www -xCPU -xkcd -xml -xmlSignatureC -xmlSignatureLocation -xyz -yaml -yml -youtube -yrammos -zbruhnke -zipcode -zoneId -zsh -AaaS/Simpson -Ashutosh -Connect/Simpson -EU/Simpson -Erlich/Simpson -Eze -FIDO's -GDPR's -JVM's -JWT's -Kleier -LinkedIn's -OWASP's -PPVC's -Preusler -RPM's -TWGTL's -WUPHF's -Webhook's -Xbox's -acquirer's -backend's -else's -webapp's -Erlich's -Connect's -OAuth's -AaaS's -EU's -pendingAccountLinkTimeToLiveInSeconds -uiIPAccessControlListId -selfServiceFormId -twoFactorMethodRemoveEmailTemplateId -twoFactorMethodAddEmailTemplateId -passwordUpdateEmailTemplateId -passwordResetSuccessEmailTemplateId -loginSuspiciousEmailTemplateId -loginNewDeviceEmailTemplateId -loginIdInUseOnUpdateEmailTemplateId -loginIdInUseOnCreateEmailTemplateId -emailVerifiedEmailTemplateId -emailUpdateEmailTemplateId -BDR -SRD -accessControlConfiguration -walkthroughs -voiceprints -OOB -KBA -cyberattacks -SDR -breachedPasswordLastCheckedInstant -RyanDennis -NullPointerException -NumberFormatExceptions -Johpie -samesite -sslCertificateKeyId -clientCredentialsAccessTokenPopulateLambdaId -generateSalt -validateSalt -Minikube -minikube -EKS -aks -az -bitnami -kubectl -eksctl -autoscaling -vpc -subnet's -gcloud -routable -GCP's -subnet’s -Kubeconfig -sql -CloudFormation -kube -dns -postgresqlPassword -replicaCount -ReplicaSet -Bergal -cpus -WeRoad -WeRoad's -Danilo -Polani -Cognito -miaucl -rscheuermann -jasonaowen -Thammada -NextToken -Cloudwatch -CDK -minifier -minify -looooong -UserPool -GetUser -IAC -AppSync -Cognito's -Bhattacharyea -Aniket -bonify -rollup -Oceanswave -Logback -Omedym -additionalHeaders -tenantConfiguration -limitUserLinkCount -maximumLinks -linkLimitExceeded -Atakan -Circleboom -Eser -identityProviderType -DKIM -CodeMash -Sandusky -FLoC -Forrester -Statista -Chakraborty -Kuntal -Cerbos -PINs -Shopify -CRMs -OpenAPI -Streebog -FSB -SWIFFT -Reddit -Quicktime -Screencasting -DevRel -upsell -Kerberos -Flickr's -AuthSub -implementers -Pinterest -Hashesh -GAAP -fintech -tokenExpirationInstant -phoneNumber -trustTokenTimeToLiveInSeconds -TimVanHerwijnen -dmitryzan -Maila -Telecom -OpenStack -trustChallenge -trustToken -kristianvld -pseudocode -Grolnick -Param -alg -MGF -PSS -Caddy -IIS -Cloudflare -CloudFront -Cybanetix -gkrothammer -pablomadrigal -GraalJS -esports -esport -Gamers -gamers -Esports -engineType -ECMAScript -GDC -Konik -SAML’s -SAML's -RCE -WebFlux -BioTech -getOptionalMessage -UMA -RPT -Dhillon -Ravgeet -OpenTelemetry -HoneyComb -matthewhartstonge -unlinked -CAPTCHAs -SIEM -browserless -ietf -params -uma -EnterpriseUser -tid -scim -ResourceTypes -schemaId -ServiceProviderConfig -EnterpriseUsers -authorizers -kubelets -Istio -Linkerd -Kasper -Siig -RBA -deprovision -deprovisioning -Oxley -Sarbanes -istiod -exfiltrated -ReverseProxy -Req -uberjar -buttonColor -customElements -headspace -extraContainers -scrypt -FirebaseUI -UID -scimUserRequestConverterId -Firestore -GroupResponse -Schema's -scimServerConfiguration -serverEntityTypeId -clientEntityTypeId -scimUserResponseConverterId -scimGroupResponseConverterId -scimGroupRequestConverterId -scimEnterpriseUserResponseConverterId -scimEnterpriseUserRequestConverterId -usernameClaim -uniqueIdClaim -typ -gty -superadmin -untrusted -Broomfield -Gluecon -combinatorial -VPNs -BloodyStealer -Kaspersky -FinancesOnline -GBP -USD -ePremier -Bature -Rabo -sponsorships -gamer's -ZanoCloud -Dmitry -Zanozin -chimericdream -atakane -Dup -Convtr -ClearSpend -gnarlium -wget -sid -getCredentials -createUser -Kealan -Parr -MailCatcher -startIndex -playability -IaaS -gameplay -MOBA -RTS -Psyonix -CSPs -DDOSed -userbase -topologies -ISPs -SSDs -MTU -epbensimpson -Netty -theogravity -darkeagle -matthew -WSL -JLyne -rabshire -ric -sapasap -kevcube -Ritter -sinqinc -tenantIds -scimServer -licenseAttributes -refreshTokenId -loginPolicy -Pulumi -hooli -piedpier -Ologunsua -LogRocket -JMeter -Fastly -DCell -Ullah -Yasoob -KCDC -Ákos -MMO -clownwear -gameday -unchecks -unchecking -unselect -adambowen -paul -silvacom -ResourceType -resourceTypeId -excludedAttributes -Hubspot -EIAM -WIAM -offboarded -Hackfests -fedex -hackathons -hackfests -hackfest -devrel -untar -contentType -ROPC -backoff -ceo -sessionTicket -dialogs -relyingPartyName -reauthenticationWorkflow -userVerificationRequirement -registrable -relyingPartyId -authenticatorAttachmentPreference -bootstrapWorkflow -reauth -WebAuthnReauthEnable -WebAuthnReauth -accountWebAuthnIndex -accountWebAuthnDelete -accountWebAuthnAdd -rpId -ArrayBuffer -authenticatorData -clientDataJSON -userHandle -reauthenticating -credentialId -clientExtensionResults -credProps -rk -COSE -pubKeyCredParams -signCount -lastUseInstant -authenticatorSupportsUserVerification -BLE -RelayState -EAP -yuezhou -deserialization -vtcdanh -sidejacking -querystring -there'd -Reauth -DoS -uuid -CNAME -CNAMEs -Dechant -Aakinyemi -Ikeh -Aardt -scaffolded -Neward -Komuves -MySQLHelper -NoClassDefFoundError -inversoft -lang -interoperate -userName -CRUDL -YubiKey -cosmosclownstore -Cosmo's -CTAP -Doh -HaveIBeenPwned -AAL -attestationObject -userVerification -allowlist -excludeCredentials -authenticatorAttachment -authenticatorSelection -attestationType -synonymously -webAuthnCredentials -WebAuthn's -showWebAuthnReauthLink -bootStrapWebauthnEnabled -Pipedream -reauthenticate -YubiKeys -deduplication -Jlintonjr -OpenSearch -API's -isUserVerifyingPlatformAuthenticatorAvailable -useFusionAuth -withFusionAuth -unmount -SDKs -legos -lego -HOC -Anish -Devasia -Ibeabuchi -FusionAuthContext -includeArchived -FusionClient -BuiltinDenver -Rajkumar -Venkatasamy -LFI -WebSocket -Authorizer -mjs -FormValidationResult -SREs -jsonwebtoken -scalably -mozilla -Jank -SeanStayn -alessandrojcm -dystopiandev -huysentruitw -mdnadm -sjmog -leesmith -sujkattimani -Brunom -lancegliser -sixhobbits -advarra -jon -timyourivh -konvergence -initiatedLogin -sourceApplicationId -nameIdFormat -gzip -Tos -PagerDuty -nameIDs -PagerDuty's -isNativeApp -quickstart -Moodley -Shivan -undecillion -xxxx -xxxxxxxx -xxxxxxxxxxxx -GUIDs -nextjs -loginHintConfiguration -idpInitiatedConfiguration -parameterName -assertionConfiguration -TwoFactorEnableComplete -TwoFactorEnable -onMultiFactorEnable -actionCancelPolicy -onPasswordReset -forteilgmbh -harishreddy -Vinicius -Campitelli -SVB -authorizedURLValidationPolicy -Heptio -Oppen -VMWare -apiMode -selfServiceRegistrationValidationId -Theo -Sutor -signups -OmniAuth -Slackbot -NIST's -passé -Quickstarts -omniauth -wordle -Gemfile -initializer -tooltips -phpass -ansonallard -Rodman -Octoverse -Github's -SendGrid's -idt -NextJS -vite -Frick -baseEmailURL -selfServiceFormConfiguration -reCAPTCHA -requireCurrentPasswordOnPasswordChange -SetupFusionauth -npx -Ubyft -ChatGPT -Ewalt -rideshare -Duende -IdentityServer -Aiven -refreshTokenSlidingWindowConfiguration -maximumTimeToLiveInMinutes -pendingIdPLink -identityProviderTenantConfiguration -pendingLinkId -DaisyUI -Pycnomerus -RTL -deviceGrantStatus -autojoin -IdentityStore -originalId -connectionString -subkey -deviceInfo -beezerk -MarekUniq -reCAPTCHA -linkCount -SetupDotnet -dotnet -Contenda -Deme -Salzman -Tamás -JavaMail -HAProxy's -XSLT -XSLTC -Xalan -bytecode -geoalexidis -sjswami -Kosovo -annismckenzie -assertionEncryptionConfiguration -encryptionAlgorithm -Laravel's -AuthnRequest -keyTransportEncryptionKeyId -maskGenerationFunction -keyTransportAlgorithm -GCM -keyLocation -DES -sourceKeyId -patricknwn -pigletto -GC -digestAlgorithm -Supabase -psql -avitsrimer -quickstarts -FusionDesk -WebApp -SessionId -PingOne -ForgeRock -ForgeRock's -OneLogin's -TikTok -Xing -Wuphf -Adleman -Rivest -Shamir -keyholder -onwards -Timestamping -Thymeleaf -Changebank -Initializr -BigDecimal -timestamping -CoreOS -txt -authlib -fusionAuthBaseUrl -autowire -OSS -VCs -legaltech -dealcloser's -underserved -GetClaimsFromUserInfoEndpoint -RequireHttpsMetadata -ResponseType -unhandled -cshtml -menubar -admin's -PKI -bugfix -LLM -asciidoc -LangChain -Kapa -Avoka -Confio -SolarWinds -Temenos -LinuxOne -ExampleGame -Trezors -LastPass -athleisure -favoriting -wicking -SLO -Bshaffer's -O'Reilly -Codemash -FusionAuthModule -RTO -RPO -FusionAuthService -activationComplete -ChangeBank -ExampleApp -Robustelli -Dickison -Treefort -free'ish -freemium -Oculus -Unio's -reInventParties -TopGolf -waitlist -Joomla's -LoginCmd's -GitLab -NoSQL -Hathcock's -Vins -transformative -ALBs -AZs -EFS -WAF -Bottlerocket -SSHD -gamified -Gamification -FOBLO -FOMO -Pai -dogfooding -O'Bannon -FreeMarker's -Orbitvu's -Berners -Netlify -Pendo -Contenda's -Softozor's -there'll -InfoSec's -requester's -CodeMashing -ChatOps -Comms -Observability -CAGR -HelloAuth -conformant -duplicative -acousticians -YouTuber -collectables -DM -clickops -Wikipedia -LLMs -Cometh -sergiodxa's -changelog -Remix's -KV -RabbitMQ -Cass -millennials -Hathcock -ClusterRole -ClusterRoles -Krew -ClusterRoleBindings -VirtualBox -overcomplicate -FaceBook -EI -DS -flyctl -sanitization -Initialzr -tesserarius -CTSS -Corbató -Scherr -Thinkset -quintillion -passwording -Grammarly's -Hacktoberfest -Updata -Gartner -LogRhythm -Fairwinds -Inversoft's -intercorporate -ChatGPT's -recognitions -Pham -yay -authsome -Stihl -Zenni -CurrentDesk's -GDCing -IM -edtech -PDFs -Spotify -clientID -redirectURI -applicationID -React's -timesheet -eCommerce -Xkit's -OAuthing -unlinks -jarfiles -gamification -webhook's -StackOverflow's -wildcarded -Jian's -physicalmailaddress -IP's -VENV's -TOML -LinuxONE -Aposphere -Cyrill -Lippuner -recipientEntity -targetEntities -composable -Blazor -Actionee -nextResults -AuthenticatorAttestationResponse -ArrayBuffers -PublicKeyCredential -architected -unguessable -backport -firewalled -Entra -AuthenticatorAssertionResponse -OpenTofu -SVG -namespaces -JWTBearer -AuthSession -PanicController -MakeChangeController -sqlite -exfiltration -wproffitt -LoginQueue -deserializers -webauthnAvailable -enabledInstant -ASC -DESC -trustPolicy -implicitEmailVerificationAllowed -verifiedInstant -webAuthnPlatformAuthenticators -advancedLambdas -applicationMultiFactorAuthentication -threatDetection -webAuthn -webAuthnRoamingAuthenticators -Aitken -Centre -SATAC -modernising -centre -analysed -SATAC's -audiobooks -monetization -boto -ebooks -sunsetting -Nuxt -nuxt -Vue's -typedoc -Vercel -SSR -injectable -observables -Actix -vue -DockerHub -Forgerock -Stytch -premade -actionee -MailDev -unscoped -scopeHandlingPolicy -GIS -playtronics -unknownScopePolicy -userinfoPopulateLambda -defaultConsentDetail -defaultConsentMessage -ldapsearch -forgerock -DBeaver -DaVinci -passcodes -backfill -overridable -unconfigured -awoodobvio -ashutoshningot -mou -charlesericjs -badaz -themobi -JNDI -CIDR -fuzzers -ATest -AwesomeCRM -CRO -ClownShoes -NetSuite -WebhookTransactionException -PRs -HCL -Hashicorp -Provisioners -provisioners -deletable -randomBytes -randomAlphaNumeric -randomDigits -OnCollision -crossPlatform -signatureConfiguration -asc -redirectUri -registrationVerificationOneTimeCode -CreatePendingLink -UseRedirect diff --git a/.github/vale/styles/config/vocabularies/FusionAuth/accept.txt b/.github/vale/styles/config/vocabularies/FusionAuth/accept.txt deleted file mode 100644 index b37d60146d..0000000000 --- a/.github/vale/styles/config/vocabularies/FusionAuth/accept.txt +++ /dev/null @@ -1,131 +0,0 @@ -[Aa]utoscaling -Aiven -anonymization -API -authorizer -Bachman -Basecamp -[Bb]crypt -Boolean -boolean -CAPTCHA -[Cc]yber -[Cc]yberattack -[Cc]ybercriminal -[Cc]ybersecurity -Cognito -CRM -cron -crypto -CSP -cutover -CVE -datacenter -datastore -[Dd]ev -defragmentation -deprovision -deserialize -Dinoch -Dockerfile -Equifax -Erlich -esport -failover -Fastly -FIDO -[Ff]intech -[Ff]usion[Aa]uth -gameplay -Guice -HAProxy -Hashicorp -Hathcock -Hooli -hostname -Hubspot -Id -Infosec -initializer -interoperate -Inversoft -ISP -Istio -jinja -Jens -JMeter -[Jj][Ww][Tt] -Kaspersky -Kerberos -Keycloak -keypair -Laravel -Linkerd -Linode -lossy -Metasploit -middleware -minifier -namespace -nginx -ngrok -npm -Nuxt -OAuth -Okta -onboarded -[Oo]ffboarding -[Oo]nboarding -Packagist -passcode -pentesting -performant -Pinterest -plaintext -Postgres -[Pp]asswordless -pretexting -prototype -pseudocode -pseudonymization -pseudonymize -Psyonix -Pulumi -[Qq]uickstart -reauthenticate -reauthentication -repo -[Rr]eindex -[Rr]elicensing -[Rr]oadmap -Schaefer -SDK -SHA -Shopify -signup -SLA -[Ss]crypt -SSD -[Ss]erverless -[Ss]harding -Splunk -Stytch -Supabase -Tangany -themeable -Twilio -URI -virtualized -VPN -Vue -WebAuthn -webview -Wordpress -WUPHF -[Ww]ebapp -Xbox -Xcode -xkcd -Yubico -YubiKey -Zendesk diff --git a/.github/workflows/apicheck.yml b/.github/workflows/apicheck.yml index c8a4c6abc1..4d1bbcf5d7 100644 --- a/.github/workflows/apicheck.yml +++ b/.github/workflows/apicheck.yml @@ -2,11 +2,14 @@ name: check_apis # Controls when the action will run. on: + # run when api docs change + pull_request: + paths: + - 'astro/src/content/docs/apis/**' + - '.github/workflows/apicheck.yml' # Triggers the workflow once a day schedule: - cron: '31 18 * * *' - # don't run on every push - #push: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: diff --git a/.github/workflows/closedissues.yml b/.github/workflows/closedissues.yml new file mode 100644 index 0000000000..3e44e8a12c --- /dev/null +++ b/.github/workflows/closedissues.yml @@ -0,0 +1,32 @@ +name: check_closed_github_issues + +# this checks to see what issues are closed in GH but still in our doc. +# we should update doc to reflect closed issues + +# Controls when the action will run. +on: + # Triggers the workflow once a day + schedule: + - cron: '31 18 * * *' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + check_closed_github_issues: + # The type of runner that the job will run on + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ github.token }} + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v4 + - name: Check for closed issues referenced in documentation + run: | + # check docs for references to closed issues + count=`src/scripts/check-for-closed-github-issues-in-docs.sh` + exit $count + shell: bash diff --git a/.github/workflows/contentcheck.yml b/.github/workflows/contentcheck.yml index ed47d6e42a..63f99c7610 100644 --- a/.github/workflows/contentcheck.yml +++ b/.github/workflows/contentcheck.yml @@ -2,10 +2,6 @@ name: content_check on: pull_request: - # run once a day - schedule: - - cron: '13 19 * * *' - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel @@ -18,60 +14,33 @@ jobs: - uses: actions/checkout@v4 - name: Check for blog posts that have incorrect categories run: | - find astro/src/content/blog/ -type f -name "*.md*" |grep -v swp | xargs grep '^categories:'|sed 's/.*categories: //'|sed 's/, /\n/g'|sort -u > out - RES=`diff out .github/known-blog-categories.txt` - exit $RES + exit `src/scripts/check-for-incorrect-categories.sh` shell: bash - - name: Grep for absolute URLs referencing FusionAuth.io - continue-on-error: true - # we ignore 'open your browser and navigate to https://fusionauth.io/docs' because it is part of command output - # we ignore 'homepage "https://fusionauth.io"' because it is part of the homebrew formula - # we ignore "Learn how this app works." because it is part of a react tutorial - # we use continue-on-error because grep -v exits with code 1 if it doesn't find anything, but that's what we want. + - name: No absolute URLs referencing FusionAuth.io run: | - find astro/src/content/ -type f -name "*.md*" | xargs grep 'https://fusionauth.io' | grep -v 'homepage "https://fusion' | grep -v 'open your browser and navigate to https://fusionauth.io/docs' |grep -v "Learn how this app works." > absolute.out - shell: bash - - name: Check for absolute URLs referencing FusionAuth.io from file. Keep this next to 'Grep for absolute URLs referencing FusionAuth.io' - run: | - cat absolute.out - exit `cat absolute.out | wc -l | sed 's/[ ]*//g'` - shell: bash - - name: Check for old asciidoc styling syntax - run: | - exit `find astro/src/content/docs/ -type f | xargs grep ']#'| wc -l |sed 's/[ ]*//g'` - shell: bash - - name: Check for old asciidoc code import - run: | - exit `find astro/src/content/docs/ -type f | xargs grep '++++'| wc -l |sed 's/[ ]*//g'` - shell: bash - - name: Check for old doc nav url references - run: | - exit `find astro/src/content/ -type f | xargs grep 'docs/v1/tech'| wc -l |sed 's/[ ]*//g'` + exit `src/scripts/check-for-absolute-urls.sh` shell: bash - name: Check for erroneous markdown references run: | - exit `find astro/src/content/ -type f -name "*.md*" | xargs grep ']()'| wc -l |sed 's/[ ]*//g'` + exit `src/scripts/check-for-incorrect-markdown-references.sh` shell: bash - name: Make sure all docs have a full sentence in their description. run: | - exit `find astro/src/content/docs/ -type f -print|grep -v '/_' |xargs grep '^description: '|grep -v '\.$'|wc -l |sed 's/[ ]*//g'` + exit `src/scripts/check-for-full-sentences-in-docs-descriptions.sh` + shell: bash + - name: check for APIFields with no name + run: | + exit `src/scripts/check-for-api-fields-no-name.sh` shell: bash - - name: Make sure docs don't use old asciidoc icon references + - name: check for the word 'edition' which we don't use any more, excluding files it is okay to have 'edition' in run: | - exit `find astro/src/content/docs/ -type f -print|xargs grep -l 'icon:[a-z]'| wc -l |sed 's/[ ]*//g'` + exit `src/scripts/check-for-use-of-word-edition.sh` shell: bash - - name: check for APIFields with no name + - name: check for the proper casing of word 'plan' which should always be lowercase when prefixed by Community, Starter, Enterprise or Essentials run: | - echo `grep -R \ + body: "Linkcheck failed, https://github.com/FusionAuth/fusionauth-site/actions/workflows/linkcheck.yml has more." diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000000..d5464cefd0 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,35 @@ +# Runs the linter on the changed files in the PR +name: Run ESLint on changed files +on: + pull_request: + workflow_dispatch: + +jobs: + run_lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + # I want to lint only the files that have changed in the PR + # This is a bit tricky because we need to fetch the main branch to compare against + # Instead I am using the GitHub cli to fetch the changes in the PR + - name: Install GitHub CLI + run: sudo apt-get install gh + + - name: Authenticate GitHub CLI + run: echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token + + - name: Set Pull Request Number + run: echo "PR_NUMBER=${{ github.event.pull_request.number }}" >> $GITHUB_ENV + + - name: NPM Install + run: | + cd astro + npm ci + shell: bash + + - name: ESLint + run: | + cd astro + bash ../src/scripts/lint-recent-files.sh + shell: /usr/bin/bash -e -o pipefail {0} \ No newline at end of file diff --git a/.github/workflows/shrink-images.yml b/.github/workflows/shrink-images.yml index 38a61a1c2d..5d2889c826 100644 --- a/.github/workflows/shrink-images.yml +++ b/.github/workflows/shrink-images.yml @@ -5,7 +5,12 @@ on: branches-ignore: - main paths: - - 'astro/public/**' + - 'astro/public/img/**/*.png' + pull_request: + branches-ignore: + - main + paths: + - 'astro/public/img/**/*.png' jobs: shrink: diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml deleted file mode 100644 index c9eed43564..0000000000 --- a/.github/workflows/spellcheck.yml +++ /dev/null @@ -1,30 +0,0 @@ -# This is workflow for spell checking using PySpelling lib (https://pypi.org/project/pyspelling/) -name: spellcheck_website -on: - # run 2 weekdays at ~noon MT - schedule: - - cron: '31 17 * * 2,4' - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - - uses: actions/checkout@v4 - - name: Install astro modules - run: cd astro && npm ci - # commenting these out because for now we aren't using compress to compress images. When we go back to that, we'll need to uncomment these - #- name: Uninstall astro-compress to reduce build time , saves about 66% of time - #run: cd astro && npm uninstall astro-compress - #- name: Unconfigure compress - #run: sed '/import compress from "astro-compress";/d' astro/astro.config.mjs |sed '/compress(),/d' > tmpconfig && mv tmpconfig astro/astro.config.mjs - - name: Build astro site - run: cd astro && npm run build - # Spellcheck - - uses: igsekor/pyspelling-any@v0.0.2 - name: Spellcheck diff --git a/.github/workflows/updatesitemap.yml b/.github/workflows/updatesitemap.yml index bd688856cc..a555538b1d 100644 --- a/.github/workflows/updatesitemap.yml +++ b/.github/workflows/updatesitemap.yml @@ -21,11 +21,11 @@ jobs: with: node-version: 20 cache: 'npm' - cache-dependency-path: '.github/scripts/publish_sitemap/package-lock.json' + cache-dependency-path: '.src/scripts/publish_sitemap/package-lock.json' - name: Install dependencies - run: cd .github/scripts/publish_sitemap && npm install + run: cd src/scripts/publish_sitemap && npm install - name: Update sitemap env: GOOGLE_SEARCH_CONSOLE_JSON_KEY: ${{ secrets.GOOGLE_SEARCH_CONSOLE_JSON_KEY }} - run: node .github/scripts/publish_sitemap/publish_sitemap.js + run: node src/scripts/publish_sitemap/publish_sitemap.js shell: bash diff --git a/.github/workflows/vale.yml b/.github/workflows/vale.yml index e8bdef6667..3c158191be 100644 --- a/.github/workflows/vale.yml +++ b/.github/workflows/vale.yml @@ -4,10 +4,10 @@ on: [pull_request] jobs: vale: name: runner / vale - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: errata-ai/vale-action@reviewdog with: - files: '["astro/src/content"]' - fail_on_error: false + files: '["astro/src/components","astro/src/content"]' + fail_on_error: true diff --git a/.spellcheck.yaml b/.spellcheck.yaml deleted file mode 100644 index 044f01c7bc..0000000000 --- a/.spellcheck.yaml +++ /dev/null @@ -1,21 +0,0 @@ -matrix: -- name: Markdown - sources: - - '_site/**/*.html|!_site/*at89us2r9qj7kyvrfuntpsp524fe5m*' - - 'astro/dist/**/*.html|!astro/dist/blog/tag*' - default_encoding: utf-8 - spellchecker: hunspell - dictionary: - encoding: utf-8 - wordlists: - - .github/knownwords.txt - pipeline: - - pyspelling.filters.url: - - pyspelling.filters.html: - comments: false - ignores: - - :matches(code, pre) - - :matches(.spellcheck-ignore) - - :matches(.blog-tag) - - :matches(button[data-widget]) - - :matches(.mermaid-diagram) diff --git a/.vale.ini b/.vale.ini index 13be19eb30..d7ab007dff 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,4 +1,4 @@ -StylesPath = .github/vale/styles +StylesPath = config/vale/styles Vocab = FusionAuth MinAlertLevel = error @@ -11,14 +11,31 @@ astro = md BasedOnStyles = Vale, write-good BlockIgnores = ]+)?/> TokenIgnores = (?m)^import .+ from [^\n]+$, \ -(?m)^export const .+, \ +(?m)^export const.*, \ +(?m)^image: .*oauth.*, \ +(?m)^tags: .*oauth.*, \ +(?m)^tags: .*ciam.*, \ +(?m)\[[^]]*\]\(.*/apis/.*\), \ +(?m)\[[^]]*\]\(.*-apis-.*\), \ +(?m)\[[^]]*\]\(.*/oauth/.*\), \ +class="[^"]*", \ +img src=\{.*supabase.*\}, \ ]+)?>, \ , \ [^<]+<\/InlineField>, \ [^<]+<\/InlineUIElement>, \ ]+)?/>, \ ]+)?/>, \ +]+)?/>, \ +]+)?/>, \ +]+)?/>, \ ]+)?/>, \ ]+)?/>, \ ]+)?>[^<]+<\/APIField>, \ +{[^}]+}, \ +\s\s+mtls:.*, \ +```[^`]*```, \ +(+?), \ ]+)?>[^<]+<\/APIURI> + + diff --git a/DocsDevREADME.md b/DocsDevREADME.md index 07dd8c40ab..02b58bb3c8 100644 --- a/DocsDevREADME.md +++ b/DocsDevREADME.md @@ -1,4 +1,4 @@ -## Running builds +# Running builds Almost all of the content for site now lives under the [astro](./astro) directory and is built by astro. You can run the site by cd-ing into the astro directory and running npm scripts from there or by running savant targets from the top level. The build targets are @@ -36,6 +36,7 @@ Here are some guidelines to follow when writing documentation (everything under - Headers should have the first letter of every word capitalized: `This Is The Header Text`. This is true for all headers (h1, h2, h3, h4). This is also known as [Start Case](https://en.wikipedia.org/wiki/Letter_case). - When writing, you have access to Asides. Here's an [example blog post using an Aside](https://github.com/FusionAuth/fusionauth-site/blob/main/astro/src/content/blog/log4j-fusionauth.mdx). You can assign the following values to the type: `tip` for tips. `note` for things for the user to be aware of. `important` for things the user should pay attention to. `warn` for dangerous actions like deleting a tenant. - For links, don't use the absolute URL for the FusionAuth website (https://fusionauth.io), only relative URLs. This allows us to deploy to our local and staging environments and not get sent over to prod. +- If you have a list element containing more than one paragraph, indent the second paragraph by the same amount as the start of the text in the first paragraph to make sure that it renders correctly. ## Docs - Don't use complex breadcrumbs styling in docs. Use `->`. Use the [Breadcrumb](astro/src/components/Breadcrumb.astro) component. Breadcrumbs should look like this `foo -> bar -> baz`. @@ -80,14 +81,17 @@ Review [the component for all options and icons](astro/src/components/icon/Icon. ### Docs Navigation -If you want a page to float to the top of the navigation, because it is an overview page, use this attribute: +Make descriptions full sentences. + +If you want to order pages within a section, use `navOrder`. The default value for every page is [defined here](https://github.com/FusionAuth/fusionauth-site/blob/main/astro/src/content/config.js#L61). + +Pages are ordered in the nav within a section in descending order. ``` -topOfNav: true +navorder: 0 ``` -Make descriptions full sentences. - +If you want to sort a category to the top of its section, you need to add it to `astro/src/tools/docs/categoriesToFloatToTop.json`. ### Including files - If you are building a file to include across multiple sections of documentation, make sure you preface the filename with `_` and use dashes to separate words: `_login-api-integration` not `_login_api_integration`. @@ -175,7 +179,7 @@ Follow everything in the `Content Style Guidelines` section. - For site navigation, use Breadcrumb: Navigate to Tenants and then to the Password tab. - For field names, use double quotes: "Login Identifier Attribute". - For values, use back ticks: `userPrincipalName`. -- Put each blog post into one or more of the known categories. [Here's the list](https://github.com/FusionAuth/fusionauth-site/blob/main/.github/known-blog-categories.txt). You can separate categories with commas. +- Put each blog post into one or more of the known categories. [Here's the list](https://github.com/FusionAuth/fusionauth-site/blob/main/config/contentcheck/known-blog-categories.txt). You can separate categories with commas. - Use tags. They are separated with commas. These are freeform, so feel free to add multiple and choose what works. The first one is what is used to show related posts, unless there's a `featuredTag` value in the front matter. You can [learn more about the logic by reviewing the layout](https://github.com/FusionAuth/fusionauth-site/blob/main/astro/src/layouts/Blog.astro). - You can use the `get-images-from-markdown.rb` script to extract images from markdown and store them in a directory. - All references to `stackoverflow.com` should be updated and direct to the community forum at `https://fusionauth.io/community/forum/` @@ -452,14 +456,15 @@ The main configuration file is located at [`.vale.ini`](./.vale.ini), where we s ### Rules -- The rules _(or, as Vale calls them, "styles")_ are located at [`.github/vale/styles`](./.github/vale/styles). -- Right now, we're using [`write-good`](./.github.vale/styles/write-good), a collection of simple rules to avoid common mistakes and awkward sentences. -- We also have a custom vocabulary at [`.github/vale/styles/config/vocabularies/FusionAuth/accept.txt`](./.github/vale/styles/config/vocabularies/FusionAuth/accept.txt) with known words. +- The rules _(or, as Vale calls them, "styles")_ are located at [`config/vale/styles`](./config/vale/styles). +- Right now, we're using [`write-good`](./config/vale/styles/write-good), a collection of simple rules to avoid common mistakes and awkward sentences. +- We also have a custom vocabulary at [`config/vale/styles/config/vocabularies/FusionAuth/accept.txt`](./config/vale/styles/config/vocabularies/FusionAuth/accept.txt) with known words. - Note that this file can use regular expressions to match words in a case-insensitive manner, as described [in their docs](https://vale.sh/docs/topics/vocab/). +- Anything marked as code (with backticks) is ignored, so if you have a UUID or config string, surrounding it with backticks is a good way to satisfy vale. ### GitHub Actions -There's [a GitHub Action](./.github/workflows/vale.yml) that runs Vale on added/modified files when opening a pull request. It'll only cover files located at `astro/src/content`, but it won't block merging the PR, as we currently have lots of errors to fix. So, use it as a guide to improve what you are writing. +There's [a GitHub Action](./.github/workflows/vale.yml) that runs Vale on added/modified files when opening a pull request. It'll only cover files located at `astro/src/content` and `astro/src/components`. It will block merging the PR. ### Running locally @@ -488,7 +493,7 @@ $ vale --filter=".Name == 'Vale.Spelling'" astro/path/to/file Whenever you receive an error, you need to determine if you should: - Actually fix the word (e.g. if you received an error like _"Use 'Id' instead of 'ID'."_); or -- Add a known word to [`the vocabulary`](./.github/vale/styles/config/vocabularies/FusionAuth/accept.txt) if it's a language, library, company name, etc. But make sure you have the correct capitalization to avoid having duplicates there; or +- Add a known word to [`the vocabulary`](./config/vale/styles/config/vocabularies/FusionAuth/accept.txt) if it's a language, library, company name, etc. But make sure you have the correct capitalization to avoid having duplicates there; or - In case of custom Astro components, you'd probably need to add a new `TokenIgnores` item in [`.vale.ini`](./.vale.ini). ## Pull request review process @@ -497,3 +502,4 @@ Whenever you receive an error, you need to determine if you should: * Typo fixes don't need review. * If a piece of content is significant (blog post, guide, article) give it the label `content` and it will be published to a slack channel for marketing awareness. + diff --git a/README.md b/README.md index 3eae8dcaf4..952502b661 100644 --- a/README.md +++ b/README.md @@ -138,5 +138,3 @@ This is the state of things as of Nov 2023. The sitemap is generated during the Astro build by [@astrojs/sitemap](https://docs.astro.build/en/guides/integrations-guide/sitemap/). As of today, we still have static sitemaps that were generated by Jekyll, located in [astro/public](astro/public). These static sitemaps reference the sitemap generated by Astro. - - diff --git a/astro/.remarkrc.js b/astro/.remarkrc.js new file mode 100644 index 0000000000..45d8020803 --- /dev/null +++ b/astro/.remarkrc.js @@ -0,0 +1,38 @@ +import remarkLint from 'remark-lint'; +import remarkPresetLintRecommended from 'remark-preset-lint-recommended'; +import { lintRule } from 'unified-lint-rule'; +import { visitParents } from 'unist-util-visit-parents'; + +const noHtml = lintRule( + { + origin: 'remark-lint:no-html', + }, + + function (tree, file) { + visitParents(tree, 'mdxJsxFlowElement', function (node, parents) { + if (!node.position) return + + if (/^[\t ]* + {/* TODO: Implement favicons by following this blog post https://dev.to/masakudamatsu/favicon-nightmare-how-to-maintain-sanity-3al7 */} - { canonicalUrl && } + { canonical && } @@ -32,7 +48,7 @@ const isProd = import.meta.env.PROD as boolean; - + { hasDark && } diff --git a/astro/src/components/api/API.astro b/astro/src/components/api/API.astro index 2a25e15ecc..2df1958ea9 100644 --- a/astro/src/components/api/API.astro +++ b/astro/src/components/api/API.astro @@ -91,12 +91,12 @@ const authenticationTypes = { { uri && parts.map(part => - { part.value } + { part.value } ) }{ parameters && { parameters } } + -->{ parameters && { parameters } } diff --git a/astro/src/components/api/APIField.astro b/astro/src/components/api/APIField.astro index ba20331dde..c9981da0f4 100644 --- a/astro/src/components/api/APIField.astro +++ b/astro/src/components/api/APIField.astro @@ -31,7 +31,7 @@ const { name, description, type, required, optional, since, defaults, deprecated { deprecated && DEPRECATED } { readonly && } -
+
diff --git a/astro/src/components/api/AvailableSince.astro b/astro/src/components/api/AvailableSince.astro index 0804c9574d..755f36d4da 100644 --- a/astro/src/components/api/AvailableSince.astro +++ b/astro/src/components/api/AvailableSince.astro @@ -1,12 +1,11 @@ --- interface Props { - since: string; + since: string } const { since }: Props = Astro.props; - if (!since) { throw new Error("No since field"); } --- -Available since {since} +Available since {since} diff --git a/astro/src/components/api/BeforeVersion.astro b/astro/src/components/api/BeforeVersion.astro new file mode 100644 index 0000000000..1e31352d58 --- /dev/null +++ b/astro/src/components/api/BeforeVersion.astro @@ -0,0 +1,18 @@ +--- +interface Props { + version: string; +} + +const { version }: Props = Astro.props; +if (!version) { + throw new Error("No version field"); +} +const hasContent = Astro.slots.has("default"); +--- +{ version && Before version {version} + + {hasContent && +
+ } +
+} diff --git a/astro/src/components/api/DeprecatedSince.astro b/astro/src/components/api/DeprecatedSince.astro index e517a295e6..d0d0018699 100644 --- a/astro/src/components/api/DeprecatedSince.astro +++ b/astro/src/components/api/DeprecatedSince.astro @@ -1,8 +1,15 @@ --- interface Props { - since: string; + since: string } const { since }: Props = Astro.props; +const hasContent = Astro.slots.has("default"); --- -{ since && Deprecated since {since} } +{ since && Deprecated since {since} + + {hasContent && +
+ } +
+} diff --git a/astro/src/components/api/RemovedSince.astro b/astro/src/components/api/RemovedSince.astro index 1ac1255e28..13a1d3d621 100644 --- a/astro/src/components/api/RemovedSince.astro +++ b/astro/src/components/api/RemovedSince.astro @@ -1,8 +1,15 @@ --- interface Props { - since: string; + since: string } const { since }: Props = Astro.props; +const hasContent = Astro.slots.has("default"); --- -{ since && Removed in {since} } +{ since && Removed in {since} + +{hasContent && +
+} +
+} diff --git a/astro/src/components/docs/reference/ConfigurationOptions.astro b/astro/src/components/docs/reference/ConfigurationOptions.astro index cc6fa1e977..d76fc4d202 100644 --- a/astro/src/components/docs/reference/ConfigurationOptions.astro +++ b/astro/src/components/docs/reference/ConfigurationOptions.astro @@ -1,12 +1,10 @@ --- import Aside from 'src/components/Aside.astro'; -import APIBlock from 'src/components/api/APIBlock.astro'; -import APIField from 'src/components/api/APIField.astro'; + import InlineField from 'src/components/InlineField.astro'; import PropertyMemory from 'src/content/docs/reference/_property-memory.mdx'; import ConfigurationLimits from 'src/content/docs/get-started/core-concepts/_configuration-limits.mdx'; - -const addlJavaArgsText = 'Any additional arguments that you want to pass to the Java VM where this service will run.'; +import ConfigProps from './_configuration-properties.mdx' ---

@@ -23,541 +21,7 @@ Display configuration values in format: - - - This ensures that the average time it takes FusionAuth to get a database connection from the connection pool does not go above the specified value. If this value is exceeded, then the /api/status API will return a non-200 status code. This usually means that the database is under heavy load or is having issues. - - - - The number of milliseconds that FusionAuth will attempt to connect to the database before failing. - - - - The number of milliseconds that FusionAuth will leave an idle database connection in its connection pool before recreating it. - - - - The number of milliseconds that FusionAuth will allow a database connection to live before it is destroyed and recreated. - - - - The minimum number of idle connections that FusionAuth will keep in the connection pool. This ensures that the pool always has that number of connections. By default, this is not set, so the connection pool will be a fixed size of the value of the maximum-pool-size configuration option. - - - - The maximum number of database connections that FusionAuth will keep in the connection pool. - - - -

- When set to true and using MySQL, a 4 byte UTF compatible character set configuration is enforced at startup. -

-

- If this validation is not desired or not it is not possible to modify your MySQL configuration to satisfy the validation, disable this check by setting this value to false. If this is false, any attempt to store a 4 byte unicode character will cause the INSERT or UPDATE request to fail. The initial MySQL UTF-8 implementation only supported up to characters up to 3 bytes in length; utf8mb4 extends this to 4 byte characters. -

-
- - -

- The password that FusionAuth will use to connect to the database. If you are using Silent Mode or Setup Wizard, then this password might be used when the database.user is automatically created for you, depending on your database server and configuration options. -

- -

- This password must be secure (long, lots of different characters, high entropy, all the characteristics of a good password) if you let FusionAuth create the database user for you. -

-
- - -

- The password that FusionAuth will use to connect to the database server as part of Silent Mode or Setup Wizard if it cannot connect using the database.username and database.password values. This should be the password for a user that has superuser privileges to the database. For example, many PostgreSQL servers will provide you with a password for the postgres user. Similarly, MySQL servers sometimes leave the password blank for the mysql user. -

- -

- This configuration option allows FusionAuth to create its own database and schema and also create the user specified by database.username with the password specified by database.password. This setting is useful for Docker and other containers where FusionAuth needs to bootstrap itself without any user interaction. -

-
- - -

- The password that FusionAuth will use to connect to the database server as part of Silent Mode or Setup Wizard if it cannot connect using the database.username and database.password values. This should be the username that has superuser privileges to the database. For example, many PostgreSQL servers use the username of postgres for the superuser account. Similarly, MySQL servers often use the username mysql for the superuser account. -

- -

- This configuration option allows FusionAuth to create its own database and schema and also create the user specified by database.username with the password specified by database.password. This setting is useful for Docker and other containers where FusionAuth needs to bootstrap itself without any user interaction. -

- -

- Deprecated names: -

- - -
- - -

- The JDBC URL that FusionAuth can use to connect to the configured database. -

- -

- Consider the examples below and review each part of the URL string as you may need to adjust it for your configuration. -

- -
jdbc:postgresql://db:5432/fusionauth
- - -

- In the example above, notice we have specified the PostgreSQL jdbc type, a host of db, a port 5432 and a database name of fusionauth. The host is the service name of the database configuration, in this case it is named db. -

- -
jdbc:mysql://db:3306/fusionauth?serverTimezone=UTC
- - -

- In the example above, notice we have specified the MySQL jdbc type, a host of db, a port 3306, a database name of fusionauth, and the server timezone UTC. -

- -

- If you are using MySQL, you must include the serverTimezone=UTC parameter in the URL. The ? character is the same as a standard URL parameter, so if you have additional parameters, you should only have a single ? and parameters should be separated by &. -

- -

- You may also wish to connect to a remote database, in that case you will provide your own JDBC string URL specifying the remote database host and port. -

- -

- Some MySQL services such as Microsoft Azure may require a specific version of TLS to connect successfully. At the time of writing this note, the MySQL connector will not attempt to utilize TLSv1.2 by default, so when connecting to a service that requires this version you will need to explicitly request this version of TLS on the connection string. For example, appending this enabledTLSProtocols=TLSv1.2 to the connection string will allow you to successfully connect to an Azure managed MySQL database. See MySQL Connector : Connecting Securely UsingSSL for additional information. -

-
- - -

- The database user that FusionAuth will use to connect to the database. If you are using Silent Mode or Setup Wizard, then this user might be automatically created for you, depending on your database server and configuration options. If this user is created as part of Silent Mode or Setup Wizard, it will also be the owner of the database and schema for FusionAuth. -

- - Deprecated names: - - -
- - -

- {addlJavaArgsText} -

- - Deprecated names: - - -
- - -

- The port number that FusionAuth will use to accept AJP requests. - -

Deprecated names:

- - - - Deprecated in version 1.37.0. -
- - - -

- The value to use in the Same-Site cookie attribute for cookies set by FusionAuth. Possible values are: -

- - - - Deprecated names: - - - Deprecated in version 1.37.0. -
- - - The name of the Elasticsearch index that will be created by FusionAuth to index entities. - - - -

- The port number that FusionAuth will use to make HTTP requests to itself over localhost. This is port is only used by FusionAuth itself, when making an API call, or using any browser based connections to FusionAuth, please use the port configured by fusionauth-app.http.port. -

-
- - -

- The maximum size of the HTTP header in bytes. -

- - Deprecated names: - - - - Deprecated in version 1.37.0, the default value is now 64k. -
- - -

- The port number that FusionAuth will use to accept HTTP requests. -

- - Deprecated names: - - -
- - -

- Set to true to enable the HTTPS server. When enabled, a certificate chain and private key set as either filenames or content as described below. -

- - See fusionauth-app.https.certificate, fusionauth-app.https.certificate-file, fusionauth-app.https.private-key and fusionauth-app.https.private-key-file. -
- - -

- The port number that FusionAuth will use to accept HTTPS requests. -

- - Deprecated names: - - -
- - - The fully-qualified filename containing the certificate chain of the HTTPS server, in PEM format. Ensure that this file contains the server certificate and all intermediate certificates up to, but not including, the root CA certificate. - - - - The fully-qualified filename containing the private key corresponding to the HTTPS server certificate, in PKCS#8 PEM format. Keys in this format are wrapped inside of a -----BEGIN PRIVATE KEY----- block. - - - -

- The raw content of the certificate chain of the HTTPS server, in PEM format. Ensure that this contains the server certificate and all intermediate certificates up to, but not including, the root CA certificate. -

- -

- Note, this property will take precedence over fusionauth-app.https.certificate-file if both values are set. -

- -

- When specifying this in the fusionauth.properties file, ensure each line ends with an escaped newline character (\n) and a continuation character (\). For example: -

- - fusionauth.properties -
-        
-        text title="fusionauth.properties"
-        fusionauth-app.https.certificate=-----BEGIN CERTIFICATE-----\n\
-        MIIF0DCCA7igAwIBAgIIJ4oFgYxh2howDQYJKoZIhvcNAQELBQAwYTELMAkGA1UE\n\
-        <snip>
-        Ma1apQ==\n\
-        -----BEGIN CERTIFICATE-----\n\
-        <snip>
-        -----END CERTIFICATE-----\n
-        
-    
-
- - -

- The raw PKCS#8 PEM-formatted private key content. Keys in this format are wrapped inside of a -----BEGIN PRIVATE KEY----- block. -

- -

- Note, this property will take precedence over fusionauth-app.https.private-key-file if both values are set. -

- -

- When specifying this in the fusionauth.properties file, ensure each line ends with an escaped newline character (\n) and a continuation character (\). For example: -

- - fusionauth.properties -
-      
-      fusionauth-app.https.private-key=-----BEGIN PRIVATE KEY-----\n\
-      MIIYnyo8ePdRyOzBExOrJMfUpDnShAoGBAJKYYqYNdtbOsv2INOIxjcDlQa90tb\n\
-      <snip>
-      MV1fpQ==\n\
-      
-    
-
- - - The HTTP read timeout in milliseconds that the server will wait to read data from an incoming request. - - - -

- The path to the FusionAuth Kickstart JSON file. -

- - Deprecated environment variable names: - -
- - -

- Set to true to allow unauthenticated access to /api/prometheus/metrics and /api/status from localhost. This can be used to allow the scraping of health and metrics data by local collector agents without the need to provide an API key. -

-
- - -

- The port number used for internal Tomcat administration. -

- - Deprecated names: - - - Deprecated in version 1.37.0. -
- - - - - Deprecated names: - - - - - - The number of users to process per batch for a reindex operation. - - - - The number of threads to process batches of users on for a reindex operation. - - - -

- The FusionAuth runtime mode. The runtime mode causes some features to be modified based upon this configuration. -

- -

- The possible values are: -

- - - -

- When in the development runtime mode, maintenance mode will interactively assist you configuring the database and connecting to Elasticsearch if configured. Once you move FusionAuth into production, it is recommended that you modify the runtime mode to production. When in production runtime mode maintenance mode will no longer be available to you which means you can be certain that your end users will not find themselves on the database upgrade panel during an Upgrade. When in production mode you will either need to leverage Silent Mode to automatically apply database migrations or you will need to apply the database migrations yourself (either by hand or via a script of some sort). -

- - Deprecated names: - -
- - - The default search index refresh_interval. Bulk operations (bulk user import and reindex) may temporarily relax this value for better performance and then set it back to this value. This value specifies the delay before updated User and Entity data are available to search requests. Must be a valid Elasticsearch Date/Time Interval Value, however setting this variable is not recommended. - - - - Determines if FusionAuth should use [Silent Mode] during the startup process. Previous to version 1.19.0, Silent Mode was only available when the fusionauth-app.runtime-mode was development. This has been changed so that FusionAuth can now automatically apply database migrations during the startup process. - - - - The FusionAuth App URL that is used to communicate with other FusionAuth nodes. This value is defaulted if not specified to use a localhost address or a site local if available. Unless you have multiple FusionAuth nodes the generated value should always work. You may need to manually specify this value if you have multiple FusionAuth nodes and the only way the nodes can communicate is on a public network. - - - - The name of the Elasticsearch index that will be created by FusionAuth to index users. - - - -

- {addlJavaArgsText} -

- - Deprecated names: - - -
- - -

- The location on disk where FusionAuth Search will store its data. This value is defaulted if not specified and generally should not be modified. -

- - Deprecated names: - - -
- - -

- This parameter indicates which address or network interfaces to bind during service startup. The default value will cause the service to bind any loopback address on the system such as 127.0.0.1. -

- -

- This default value is sufficient for running FusionAuth and the Search Engine on the same server. If you run FusionAuth Search on a separate system than FusionAuth App you will need to modify this value. You may specify a single hostname or IP address or one of the special values in any combination. -

- -

- Special values include: -

- - - -

- The following is an example to bind to localhost as well as any site local addresses on the system such as 192.168.1.42. -

- -
- fusionauth-search.hosts=\_local_,\_site_ -
- - Deprecated names: - - -
- - -

- The port number that the Search Engine will use to accept HTTP requests. This value is also utilized by FusionAuth to make HTTP requests to the FusionAuth Search. -

- - Deprecated names: - - -
- - - - - Deprecated names: - - - - - -

- A comma separated list of stand-alone search engine servers that will be used by FusionAuth. The port specified on the server should be the Search Engine Transport port, not the HTTP port. -

- -

- The following is an example of a configuration for two separate search engines, one running on localhost and the other on a remote system. -

- -
- fusionauth-search.servers=localhost:9020,search2.example.com:9020 -
- -

- This configuration value is used by the FusionAuth Search and the FusionAuth App services. Even when running FusionAuth App without FusionAuth Search on the same server this configuration value will need to be provided. -

- - Deprecated in version 1.16.0. -
- - -

- The port that the search engine will use for optimized TCP communications instead of HTTP communications. This port is used internally by the search engine to communicate between clustered nodes. -

- - Deprecated names: - - -
- - -

- The hostname of your HTTP proxy. -

- -

This option configures an egress HTTP proxy for any connections FusionAuth makes.

-
- - - The port number of your HTTP proxy. This value is required when setting proxy.host. - - - - The username used to authenticate. If your proxy does not require authentication you may omit this value. - - - - The password used to authenticate to your HTTP proxy. This value is required when setting proxy.username. - - - -

- A comma separated list of URLs that will be used by FusionAuth to connect to the search engine. The port specified on the URL should be the Search Engine HTTP port. (see fusionauth-search.http-port) It is not recommended to ever run the FusionAuth Search open to the public internet. -

- -

- The following is an example of a configuration for two separate search engines, one running on localhost and the other is on a remote system. -

- -
- search.servers=http://localhost:9021,http://search2.example.com:9021 -
- - The following is an example of a configuration using basic auth for authentication with the search engine. - -
- search.servers=https://user:password@search.example.com:9021 -
- - Deprecated names: - - -
- - -

- Set to true if you want to use the Elasticsearch sniffer configuration. If you are using a managed Elasticsearch service, or running Elasticsearch inside of a container, you should leave this value set to false. -

- -

- This configuration can be helpful to allow FusionAuth to use a single connection to localhost and then allow the Elasticsearch REST client to discover all other nodes in the Elasticsearch cluster. -

-
- - -

- The search engine type. The possible values are: -

- - - -

- When configuring the search engine type to elasticsearch, you must configure the search.servers property as well. -

- - Deprecated names: - - -
- - + + \ No newline at end of file diff --git a/astro/src/components/mermaid/SequenceDiagram.astro b/astro/src/components/mermaid/SequenceDiagram.astro index ae998b5bb5..3274386b42 100644 --- a/astro/src/components/mermaid/SequenceDiagram.astro +++ b/astro/src/components/mermaid/SequenceDiagram.astro @@ -48,7 +48,7 @@ props.infoBoxes.forEach(i => { { cache[uniqueKey] && ( -
+
) @@ -56,4 +56,4 @@ props.infoBoxes.forEach(i => { { props.alt &&

{props.alt}

} - \ No newline at end of file diff --git a/astro/src/diagrams/quickstarts/resource-server.astro b/astro/src/diagrams/quickstarts/resource-server.astro index 635b598361..c73e201cc2 100644 --- a/astro/src/diagrams/quickstarts/resource-server.astro +++ b/astro/src/diagrams/quickstarts/resource-server.astro @@ -10,7 +10,7 @@ const diagram = ` participant FusionAuth Client ->> App : GET /resource - App ->> Client : 404 Not Authorized + App ->> Client : 401 Not Authorized Client ->> FusionAuth : POST /api/login FusionAuth ->> Client : 200 Ok
(token) Client ->> App : GET /resource diff --git a/astro/src/layouts/Blog.astro b/astro/src/layouts/Blog.astro index 153f4ea275..1b9ed5e765 100644 --- a/astro/src/layouts/Blog.astro +++ b/astro/src/layouts/Blog.astro @@ -77,7 +77,7 @@ const markdownStyles = [