feat: New one-click Home Server, now in Labs. Launch your own self-hosted server instance with just 1 click from the Preferences window. (#2645)

This commit is contained in:
Karol Sójko
2023-11-30 18:31:45 +01:00
committed by GitHub
parent a928bcf359
commit 17039cbb80
321 changed files with 3758 additions and 205 deletions

View File

@@ -4,7 +4,6 @@ import { WebApplicationInterface } from '@standardnotes/ui-services'
export class DevMode {
constructor(private application: WebApplicationInterface) {
InternalFeatureService.get().enableFeature(InternalFeature.Vaults)
InternalFeatureService.get().enableFeature(InternalFeature.HomeServer)
}
/** Valid only when running a mock event publisher on port 3124 */

View File

@@ -4,7 +4,6 @@ import { PackageProvider } from '../Panes/Plugins/PackageProvider'
import { securityPrefsHasBubble } from '../Panes/Security/securityPrefsHasBubble'
import { PreferencePaneId, StatusServiceEvent } from '@standardnotes/services'
import { isDesktopApplication } from '@/Utils'
import { featureTrunkHomeServerEnabled } from '@/FeatureTrunk'
import { PreferencesMenuItem } from './PreferencesMenuItem'
import { SelectableMenuItem } from './SelectableMenuItem'
import { PREFERENCES_MENU_ITEMS, READY_PREFERENCES_MENU_ITEMS } from './MenuItems'
@@ -30,7 +29,7 @@ export class PreferencesSessionController {
menuItems.push({ id: 'vaults', label: 'Vaults', icon: 'safe-square', order: 5 })
}
if (featureTrunkHomeServerEnabled() && isDesktopApplication()) {
if (isDesktopApplication()) {
menuItems.push({ id: 'home-server', label: 'Home Server', icon: 'server', order: 5 })
}

View File

@@ -50,7 +50,17 @@ const OfflineSubscription: FunctionComponent<Props> = ({ application, onSuccess
return
}
const serverActivationResult = await homeServer.activatePremiumFeatures(signedInUser.email)
const parsedOfflineFeaturesCodeResult = application.features.parseOfflineEntitlementsCode(activationCode)
if (parsedOfflineFeaturesCodeResult instanceof ClientDisplayableError) {
await application.alerts.alert(parsedOfflineFeaturesCodeResult.text)
return
}
const serverActivationResult = await homeServer.activatePremiumFeatures(
signedInUser.email,
parsedOfflineFeaturesCodeResult.subscriptionId,
)
if (serverActivationResult.isFailed()) {
await application.alerts.alert(serverActivationResult.getError())

View File

@@ -1,7 +1,4 @@
import { isWindowsPlatform } from '@standardnotes/ui-services'
import { useApplication } from '@/Components/ApplicationProvider'
import { Pill, Subtitle, Text, Title } from '@/Components/Preferences/PreferencesComponents/Content'
import { Subtitle, Text, Title } from '@/Components/Preferences/PreferencesComponents/Content'
import PreferencesPane from '../../PreferencesComponents/PreferencesPane'
import PreferencesGroup from '../../PreferencesComponents/PreferencesGroup'
@@ -9,30 +6,6 @@ import PreferencesSegment from '../../PreferencesComponents/PreferencesSegment'
import HomeServerSettings from './HomeServerSettings'
const HomeServer = () => {
const application = useApplication()
if (isWindowsPlatform(application.platform)) {
return (
<PreferencesPane>
<PreferencesGroup>
<PreferencesSegment>
<div className="flex items-center justify-between">
<div className="flex items-start">
<Title>Home Server</Title>
<Pill style={'success'}>Labs</Pill>
</div>
</div>
<div className="flex items-center justify-between">
<div className="mr-10 flex flex-col">
<Subtitle>Windows support for home server is coming soon.</Subtitle>
</div>
</div>
</PreferencesSegment>
</PreferencesGroup>
</PreferencesPane>
)
}
return (
<PreferencesPane>
<PreferencesGroup>

View File

@@ -374,8 +374,8 @@ const HomeServerSettings = () => {
<h1 className="sk-h3 m-0 text-sm font-semibold">Activate Premium Features</h1>
</div>
<p className="col-start-1 col-end-3 m-0 mt-1 text-sm">
Enter your purchased offline subscription code to activate all the features offered by the home
server.
Enter your purchased offline subscription code to activate all the features offered by your home
server, likes files support and Super notes.
</p>
<Button
primary

View File

@@ -44,7 +44,7 @@ const StatusIndicator = ({ status, className, homeServerService }: Props) => {
const isUsingHomeServer = await application.isUsingHomeServer()
if (isUsingHomeServer) {
setSignInStatusMessage(`You are currently signed into your home server under ${signedInUser.email}`)
setSignInStatusClassName('bg-success')
setSignInStatusClassName('bg-success text-success-contrast')
setSignInStatusIcon('check')
} else {
setSignInStatusMessage(
@@ -52,14 +52,14 @@ const StatusIndicator = ({ status, className, homeServerService }: Props) => {
signedInUser.email
}, then sign in or register using ${await homeServerService.getHomeServerUrl()}.`,
)
setSignInStatusClassName('bg-warning')
setSignInStatusClassName('bg-warning text-warning-contrast')
setSignInStatusIcon('warning')
}
} else {
setSignInStatusMessage(
`You are not currently signed into your home server. To use your home server, sign in or register using ${await homeServerService.getHomeServerUrl()}`,
)
setSignInStatusClassName('bg-warning')
setSignInStatusClassName('bg-warning text-warning-contrast')
setSignInStatusIcon('warning')
}
}

View File

@@ -11,7 +11,3 @@ export function featureTrunkEnabled(trunk: FeatureTrunkName): boolean {
export function featureTrunkVaultsEnabled(): boolean {
return InternalFeatureService.get().isFeatureEnabled(InternalFeature.Vaults)
}
export function featureTrunkHomeServerEnabled(): boolean {
return InternalFeatureService.get().isFeatureEnabled(InternalFeature.HomeServer)
}