Tutorial 26
Write some static content.
Example
// Copyright (c) 2025 worldiety GmbH
//
// This file is part of the NAGO Low-Code Platform.
// Licensed under the terms specified in the LICENSE file.
//
// SPDX-License-Identifier: Custom-License
// #[go.permission.generateTable]
package main
import (
"fmt"
"github.com/worldiety/option"
"go.wdy.de/nago/application"
"go.wdy.de/nago/application/consent"
"go.wdy.de/nago/application/permission"
"go.wdy.de/nago/application/settings"
"go.wdy.de/nago/application/user"
cfgusercircle "go.wdy.de/nago/application/usercircle/cfg"
"go.wdy.de/nago/auth"
"go.wdy.de/nago/pkg/std"
"go.wdy.de/nago/pkg/xreflect"
"go.wdy.de/nago/presentation/core"
"go.wdy.de/nago/presentation/ui"
"go.wdy.de/nago/web/vuejs"
"time"
)
var myPermission = permission.Declare[SayHello]("de.worldiety.tutorial.say_hello", "Jeden Grüßen", "Diese Erlaubnis muss dem Nutzer zugewiesen werden.")
// SayHello greets everyone who has been authenticated.
type SayHello func(auth auth.Subject) string
func NewSayHello() SayHello {
return func(auth auth.Subject) string {
if err := auth.Audit(myPermission); err != nil {
return fmt.Sprintf("invalid: %v", err)
}
return "hello " + auth.Name()
}
}
func main() {
application.Configure(func(cfg *application.Configurator) {
cfg.SetApplicationID("de.worldiety.tutorial")
cfg.Serve(vuejs.Dist())
cfg.SetName("Tutorial")
std.Must(cfg.Authentication())
cfg.SetDecorator(cfg.NewScaffold().Decorator())
option.MustZero(cfg.StandardSystems())
option.Must(cfgusercircle.Enable(cfg))
std.Must(std.Must(cfg.UserManagement()).UseCases.EnableBootstrapAdmin(time.Now().Add(time.Hour), "%6UbRsCuM8N$auy"))
configureGDPRConsents(cfg)
sayHello := NewSayHello()
// remember to update your user.Settings to use the matching regex like ^(Kaufmann|Informatiker)$
xreflect.SetFieldTagFor[user.Settings]("ProfessionalGroup", "supportingText", "Die Berufsgruppe muss Kaufmann oder Informatiker sein.")
xreflect.SetFieldTagFor[user.Settings]("MobilePhone", "supportingText", "Wir benötigen die Telefonnummer, um Ihnen Buchungsbestätigungen zu schicken.")
cfg.RootViewWithDecoration(".", func(wnd core.Window) core.View {
return ui.VStack(
//uiuser.PasswordStrengthView(wnd, user.PasswordStrengthIndicator{}),
ui.Text(fmt.Sprintf("%s", sayHello(wnd.Subject()))),
).Gap(ui.L16).Frame(ui.Frame{}.MatchScreen())
})
}).Run()
}
func configureGDPRConsents(cfg *application.Configurator) {
usrSettings := settings.ReadGlobal[user.Settings](std.Must(cfg.SettingsManagement()).UseCases.LoadGlobal)
// do not append, just clear it
usrSettings.Consents = []user.ConsentOption{
{
ID: consent.DataProtectionProvision,
Register: user.ConsentText{Label: "Ja, ich habe die [Datenschutzbestimmungen](/page/datenschutz) gelesen und akzeptiert."},
Required: true,
},
{
ID: consent.Newsletter,
Register: user.ConsentText{
Label: "Ja, ich melde mich zum Newsletter an. Eine Abbestellung ist jederzeit möglich.",
SupportingText: "Ein Widerspruch ist jederzeit in den Einstellungen Ihres Benutzerkontos/über Abmeldelink in den E-Mails möglich, ohne dass weitere (Übermittlungs-)Kosten als die nach den Basistarifen entstehen.",
},
Profile: user.ConsentText{
Label: "Newsletter",
SupportingText: "Regelmäßig Email Updates erhalten",
},
},
{
ID: consent.GeneralTermsAndConditions,
Register: user.ConsentText{Label: "Ja, ich habe die [Geschäftsbedingungen](/page/agb) gelesen und akzeptiert."},
Required: true,
},
{
ID: consent.TermsOfUse,
Register: user.ConsentText{
Label: "Ja, ich habe die [Nutzungsbedingungen](/page/nutzungsbedingungen) gelesen und akzeptiert.",
},
Required: true,
},
{
ID: consent.MinAge,
Register: user.ConsentText{
Label: "Ja, ich bestätige, dass ich mindestens 16 Jahre alt bin.",
},
Required: true,
},
{
ID: consent.SMS,
Register: user.ConsentText{
Label: "Ja, ich melde mich zum SMS Versand an, um kurzfristige Benachrichtigungen zu erhalten. Eine Abbestellung ist jederzeit möglich.",
SupportingText: "Ein Widerspruch ist jederzeit in den Einstellungen Ihres Benutzerkontos möglich.",
},
Profile: user.ConsentText{
Label: "SMS Versand",
SupportingText: "kurzfristige Updates zu Veranstaltungen erhalten.",
},
Required: false,
},
{
ID: "my.custom.consent",
Register: user.ConsentText{
Label: "Accept something completely different.",
},
Profile: user.ConsentText{
Label: "Accept something completely different.",
},
Required: false,
},
}
// apply settings
option.MustZero(option.Must(cfg.SettingsManagement()).UseCases.StoreGlobal(user.SU(), usrSettings))
}
Info
More static content.
Image