mirror of
https://github.com/zitadel/zitadel.git
synced 2025-07-30 10:23:43 +00:00
chore(console): remove first and lastName fallback from user (#5629)
* chore(console): remove first and lastName fallback from user * use display name and ensure it's set without required name fields * add user type to user grant and memberships responses * contributor, members * fix avatar display checks --------- Co-authored-by: Livio Spring <livio.a@gmail.com>
This commit is contained in:
parent
8bf36301ed
commit
1c1d66cbe8
@ -554,7 +554,7 @@ DefaultInstance:
|
||||
Title: Zitadel - User initialisieren
|
||||
PreHeader: User initialisieren
|
||||
Subject: User initialisieren
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Dieser Benutzer wurde soeben im Zitadel erstellt. Mit dem Benutzernamen <br><strong>{{.PreferredLoginName}}</strong><br> kannst du dich anmelden. Nutze den untenstehenden Button, um die Initialisierung abzuschliessen <br>(Code <strong>{{.Code}}</strong>).<br> Falls du dieses Mail nicht angefordert hast, kannst du es einfach ignorieren.
|
||||
ButtonText: Initialisierung abschliessen
|
||||
- MessageTextType: PasswordReset
|
||||
@ -562,7 +562,7 @@ DefaultInstance:
|
||||
Title: Zitadel - Passwort zurücksetzen
|
||||
PreHeader: Passwort zurücksetzen
|
||||
Subject: Passwort zurücksetzen
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Wir haben eine Anfrage für das Zurücksetzen deines Passwortes bekommen. Du kannst den untenstehenden Button verwenden, um dein Passwort zurückzusetzen <br>(Code <strong>{{.Code}}</strong>).<br> Falls du dieses Mail nicht angefordert hast, kannst du es ignorieren.
|
||||
ButtonText: Passwort zurücksetzen
|
||||
- MessageTextType: VerifyEmail
|
||||
@ -570,7 +570,7 @@ DefaultInstance:
|
||||
Title: Zitadel - Email verifizieren
|
||||
PreHeader: Email verifizieren
|
||||
Subject: Email verifizieren
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Eine neue E-Mail Adresse wurde hinzugefügt. Bitte verwende den untenstehenden Button um diese zu verifizieren <br>(Code <strong>{{.Code}}</strong>).<br> Falls du deine E-Mail Adresse nicht selber hinzugefügt hast, kannst du dieses E-Mail ignorieren.
|
||||
ButtonText: Email verifizieren
|
||||
- MessageTextType: VerifyPhone
|
||||
@ -578,7 +578,7 @@ DefaultInstance:
|
||||
Title: Zitadel - Telefonnummer verifizieren
|
||||
PreHeader: Telefonnummer verifizieren
|
||||
Subject: Telefonnummer verifizieren
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Eine Telefonnummer wurde hinzugefügt. Bitte verifiziere diese in dem du folgenden Code eingibst (Code {{.Code}})
|
||||
ButtonText: Telefon verifizieren
|
||||
- MessageTextType: DomainClaimed
|
||||
@ -586,7 +586,7 @@ DefaultInstance:
|
||||
Title: Zitadel - Domain wurde beansprucht
|
||||
PreHeader: Email / Username ändern
|
||||
Subject: Domain wurde beansprucht
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Die Domain {{.Domain}} wurde von einer Organisation beansprucht. Dein derzeitiger User {{.Username}} ist nicht Teil dieser Organisation. Daher musst du beim nächsten Login eine neue Email hinterlegen. Für diesen Login haben wir dir einen temporären Usernamen ({{.TempUsername}}) erstellt.
|
||||
ButtonText: Login
|
||||
- MessageTextType: PasswordChange
|
||||
@ -594,7 +594,7 @@ DefaultInstance:
|
||||
Title: ZITADEL - Passwort von Benutzer wurde geändert
|
||||
PreHeader: Passwort Änderung
|
||||
Subject: Passwort von Benutzer wurde geändert
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Das Password vom Benutzer wurde geändert. Wenn diese Änderung von jemand anderem gemacht wurde, empfehlen wir die sofortige Zurücksetzung ihres Passworts.
|
||||
ButtonText: Login
|
||||
- MessageTextType: InitCode
|
||||
@ -602,7 +602,7 @@ DefaultInstance:
|
||||
Title: Zitadel - Initialize User
|
||||
PreHeader: Initialize User
|
||||
Subject: Initialize User
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: This user was created in Zitadel. Use the username {{.PreferredLoginName}} to login. Please click the button below to finish the initialization process. (Code {{.Code}}) If you didn't ask for this mail, please ignore it.
|
||||
ButtonText: Finish initialization
|
||||
- MessageTextType: PasswordReset
|
||||
@ -610,7 +610,7 @@ DefaultInstance:
|
||||
Title: Zitadel - Reset password
|
||||
PreHeader: Reset password
|
||||
Subject: Reset password
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: We received a password reset request. Please use the button below to reset your password. (Code {{.Code}}) If you didn't ask for this mail, please ignore it.
|
||||
ButtonText: Reset password
|
||||
- MessageTextType: VerifyEmail
|
||||
@ -618,7 +618,7 @@ DefaultInstance:
|
||||
Title: Zitadel - Verify email
|
||||
PreHeader: Verify email
|
||||
Subject: Verify email
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: A new email has been added. Please use the button below to verify your mail. (Code {{.Code}}) If you din't add a new email, please ignore this email.
|
||||
ButtonText: Verify email
|
||||
- MessageTextType: VerifyPhone
|
||||
@ -626,7 +626,7 @@ DefaultInstance:
|
||||
Title: Zitadel - Verify phone
|
||||
PreHeader: Verify phone
|
||||
Subject: Verify phone
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: A new phonenumber has been added. Please use the following code to verify it {{.Code}}.
|
||||
ButtonText: Verify phone
|
||||
- MessageTextType: DomainClaimed
|
||||
@ -634,7 +634,7 @@ DefaultInstance:
|
||||
Title: Zitadel - Domain has been claimed
|
||||
PreHeader: Change email / username
|
||||
Subject: Domain has been claimed
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: The domain {{.Domain}} has been claimed by an organisation. Your current user {{.UserName}} is not part of this organisation. Therefore you'll have to change your email when you login. We have created a temporary username ({{.TempUsername}}) for this login.
|
||||
ButtonText: Login
|
||||
- MessageTextType: PasswordChange
|
||||
@ -642,7 +642,7 @@ DefaultInstance:
|
||||
Title: ZITADEL - Password of user has changed
|
||||
PreHeader: Change password
|
||||
Subject: Password of user has changed
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: The password of your user has changed. If this change was not done by you, please be advised to immediately reset your password.
|
||||
ButtonText: Login
|
||||
|
||||
|
@ -1,16 +1,12 @@
|
||||
<div class="accounts-card">
|
||||
<cnsl-avatar
|
||||
(click)="editUserProfile()"
|
||||
*ngIf="user && user.human?.profile && user.human?.profile?.displayName"
|
||||
*ngIf="user"
|
||||
class="avatar"
|
||||
[ngClass]="{ 'iam-user': iamuser }"
|
||||
[forColor]="user.preferredLoginName"
|
||||
[avatarUrl]="user.human?.profile?.avatarUrl || ''"
|
||||
[name]="
|
||||
user.human && user.human.profile && user.human.profile.displayName
|
||||
? user.human.profile.displayName
|
||||
: user.human?.profile?.firstName + ' ' + user.human?.profile?.lastName
|
||||
"
|
||||
[name]="user.human?.profile?.displayName ?? ''"
|
||||
[size]="80"
|
||||
>
|
||||
</cnsl-avatar>
|
||||
|
@ -13,10 +13,10 @@
|
||||
data-e2e="member-avatar"
|
||||
>
|
||||
<cnsl-avatar
|
||||
*ngIf="member && member.displayName && member.firstName && member.lastName; else cog"
|
||||
*ngIf="member && member.userType === UserType.TYPE_HUMAN; else cog"
|
||||
class="contributor-avatar dontcloseonclick"
|
||||
[avatarUrl]="member.avatarUrl || ''"
|
||||
[name]="member.displayName ? member.displayName : member.firstName + ' ' + member.lastName"
|
||||
[name]="member.displayName"
|
||||
[forColor]="member.preferredLoginName"
|
||||
[size]="32"
|
||||
>
|
||||
|
@ -2,6 +2,7 @@ import { animate, animateChild, keyframes, query, stagger, style, transition, tr
|
||||
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
import { Member } from 'src/app/proto/generated/zitadel/member_pb';
|
||||
import { Type } from 'src/app/proto/generated/zitadel/user_pb';
|
||||
|
||||
@Component({
|
||||
selector: 'cnsl-contributors',
|
||||
@ -36,6 +37,8 @@ export class ContributorsComponent {
|
||||
@Output() showDetailClicked: EventEmitter<void> = new EventEmitter();
|
||||
@Output() refreshClicked: EventEmitter<void> = new EventEmitter();
|
||||
|
||||
public UserType: any = Type;
|
||||
|
||||
public emitAddMember(): void {
|
||||
this.addClicked.emit();
|
||||
}
|
||||
|
@ -197,9 +197,7 @@
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ng-container
|
||||
*ngIf="user && (user.human?.profile?.displayName || (user.human?.profile?.firstName && user.human?.profile?.lastName))"
|
||||
>
|
||||
<ng-container *ngIf="user">
|
||||
<div class="account-card-wrapper">
|
||||
<button
|
||||
cdkOverlayOrigin
|
||||
@ -214,11 +212,7 @@
|
||||
[active]="showAccount"
|
||||
[avatarUrl]="user.human?.profile?.avatarUrl || ''"
|
||||
[forColor]="user.preferredLoginName || ''"
|
||||
[name]="
|
||||
user.human?.profile?.displayName
|
||||
? user.human?.profile?.displayName ?? ''
|
||||
: user.human?.profile?.firstName + ' ' + user.human?.profile?.lastName
|
||||
"
|
||||
[name]="user.human?.profile?.displayName ?? ''"
|
||||
[size]="38"
|
||||
>
|
||||
</cnsl-avatar>
|
||||
|
@ -36,7 +36,7 @@
|
||||
[checked]="selection.isSelected(row)"
|
||||
>
|
||||
<cnsl-avatar
|
||||
*ngIf="row?.displayName && row.firstName && row.lastName; else cog"
|
||||
*ngIf="row?.userType === UserType.TYPE_HUMAN; else cog"
|
||||
class="avatar"
|
||||
[name]="row.displayName"
|
||||
[avatarUrl]="row.avatarUrl || ''"
|
||||
|
@ -10,6 +10,7 @@ import { ProjectGrantMembersDataSource } from 'src/app/pages/projects/owned-proj
|
||||
import { Member } from 'src/app/proto/generated/zitadel/member_pb';
|
||||
import { getMembershipColor } from 'src/app/utils/color';
|
||||
|
||||
import { Type } from 'src/app/proto/generated/zitadel/user_pb';
|
||||
import { AddMemberRolesDialogComponent } from '../add-member-roles-dialog/add-member-roles-dialog.component';
|
||||
import { PageEvent, PaginatorComponent } from '../paginator/paginator.component';
|
||||
import { ProjectMembersDataSource } from '../project-members/project-members-datasource';
|
||||
@ -43,6 +44,7 @@ export class MembersTableComponent implements OnInit, OnDestroy {
|
||||
|
||||
private destroyed: Subject<void> = new Subject();
|
||||
public displayedColumns: string[] = ['select', 'userId', 'displayName', 'loginname', 'email', 'roles'];
|
||||
public UserType: any = Type;
|
||||
|
||||
constructor(private dialog: MatDialog) {
|
||||
this.selection.changed.pipe(takeUntil(this.destroyed)).subscribe((_) => {
|
||||
|
@ -2,14 +2,7 @@
|
||||
<div class="found-user-row" *ngFor="let user of users; index as i">
|
||||
<div class="circle">
|
||||
<cnsl-avatar
|
||||
*ngIf="
|
||||
user.human &&
|
||||
user.human.profile &&
|
||||
user.human.profile.displayName &&
|
||||
user.human.profile.firstName &&
|
||||
user.human.profile.lastName;
|
||||
else cog
|
||||
"
|
||||
*ngIf="user.human && user.human.profile; else cog"
|
||||
class="avatar"
|
||||
[name]="user.human.profile.displayName"
|
||||
[avatarUrl]="user.human.profile.avatarUrl || ''"
|
||||
@ -76,14 +69,7 @@
|
||||
<div class="user-option" data-e2e="user-option">
|
||||
<div class="circle">
|
||||
<cnsl-avatar
|
||||
*ngIf="
|
||||
user.human &&
|
||||
user.human.profile &&
|
||||
user.human.profile.displayName &&
|
||||
user.human.profile.firstName &&
|
||||
user.human.profile.lastName;
|
||||
else cog
|
||||
"
|
||||
*ngIf="user.human && user.human.profile; else cog"
|
||||
class="avatar"
|
||||
[name]="user.human.profile.displayName"
|
||||
[avatarUrl]="user.human.profile.avatarUrl || ''"
|
||||
|
@ -77,7 +77,7 @@
|
||||
[checked]="selection.isSelected(row)"
|
||||
>
|
||||
<cnsl-avatar
|
||||
*ngIf="row && row?.displayName && row.firstName && row.lastName; else cog"
|
||||
*ngIf="row && row.userType === Type.TYPE_HUMAN; else cog"
|
||||
class="avatar"
|
||||
[name]="row.displayName"
|
||||
[avatarUrl]="row.avatarUrl || ''"
|
||||
|
@ -68,7 +68,6 @@ export class UserGrantsComponent implements OnInit, AfterViewInit {
|
||||
@Input() public type: Type | undefined = undefined;
|
||||
|
||||
public filterOpen: boolean = false;
|
||||
|
||||
constructor(
|
||||
private authService: GrpcAuthService,
|
||||
private userService: ManagementService,
|
||||
|
@ -11,10 +11,10 @@
|
||||
<i class="las la-camera"></i>
|
||||
</div>
|
||||
<cnsl-avatar
|
||||
*ngIf="user && user.profile?.displayName && user.profile?.firstName && user.profile?.lastName"
|
||||
*ngIf="user && user.profile"
|
||||
class="avatar"
|
||||
[name]="user.profile?.displayName ?? ''"
|
||||
[avatarUrl]="user.profile?.avatarUrl || ''"
|
||||
[name]="user.profile.displayName"
|
||||
[avatarUrl]="user.profile.avatarUrl || ''"
|
||||
[forColor]="preferredLoginName"
|
||||
[size]="80"
|
||||
>
|
||||
|
@ -92,17 +92,11 @@
|
||||
[checked]="selection.isSelected(user)"
|
||||
>
|
||||
<cnsl-avatar
|
||||
*ngIf="
|
||||
user.human &&
|
||||
user.human.profile.displayName &&
|
||||
user.human?.profile.firstName &&
|
||||
user.human?.profile.lastName;
|
||||
else cog
|
||||
"
|
||||
*ngIf="user.human && user.human.profile; else cog"
|
||||
class="avatar"
|
||||
[name]="user.human.profile.displayName"
|
||||
[avatarUrl]="user.human?.profile?.avatarUrl || ''"
|
||||
[forColor]="user?.preferredLoginName"
|
||||
[avatarUrl]="user.human.profile.avatarUrl || ''"
|
||||
[forColor]="user.preferredLoginName"
|
||||
[size]="32"
|
||||
>
|
||||
</cnsl-avatar>
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
|
||||
"github.com/zitadel/zitadel/internal/api/authz"
|
||||
"github.com/zitadel/zitadel/internal/api/grpc/object"
|
||||
"github.com/zitadel/zitadel/internal/api/grpc/user"
|
||||
"github.com/zitadel/zitadel/internal/query"
|
||||
auth_pb "github.com/zitadel/zitadel/pkg/grpc/auth"
|
||||
)
|
||||
@ -53,5 +54,6 @@ func UserGrantToPb(grant *query.UserGrant) *auth_pb.UserGrant {
|
||||
ProjectName: grant.ProjectName,
|
||||
ProjectGrantId: grant.GrantID,
|
||||
RoleKeys: grant.Roles,
|
||||
UserType: user.TypeToPb(grant.UserType),
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package member
|
||||
|
||||
import (
|
||||
"github.com/zitadel/zitadel/internal/api/grpc/object"
|
||||
"github.com/zitadel/zitadel/internal/api/grpc/user"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
"github.com/zitadel/zitadel/internal/errors"
|
||||
"github.com/zitadel/zitadel/internal/query"
|
||||
@ -33,6 +34,7 @@ func MemberToPb(assetAPIPrefix string, m *query.Member) *member_pb.Member {
|
||||
LastName: m.LastName,
|
||||
DisplayName: m.DisplayName,
|
||||
AvatarUrl: domain.AvatarURL(assetAPIPrefix, m.ResourceOwner, m.AvatarURL),
|
||||
UserType: user.TypeToPb(m.UserType),
|
||||
Details: object.ToViewDetailsPb(
|
||||
m.Sequence,
|
||||
m.CreationDate,
|
||||
|
@ -254,3 +254,16 @@ func ExternalIDPViewsToExternalIDPs(externalIDPs []*query.IDPUserLink) []*domain
|
||||
}
|
||||
return idps
|
||||
}
|
||||
|
||||
func TypeToPb(userType domain.UserType) user_pb.Type {
|
||||
switch userType {
|
||||
case domain.UserTypeHuman:
|
||||
return user_pb.Type_TYPE_HUMAN
|
||||
case domain.UserTypeMachine:
|
||||
return user_pb.Type_TYPE_MACHINE
|
||||
case domain.UserTypeUnspecified:
|
||||
return user_pb.Type_TYPE_UNSPECIFIED
|
||||
default:
|
||||
return user_pb.Type_TYPE_UNSPECIFIED
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ func UserGrantToPb(assetPrefix string, grant *query.UserGrant) *user_pb.UserGran
|
||||
ProjectName: grant.ProjectName,
|
||||
AvatarUrl: domain.AvatarURL(assetPrefix, grant.UserResourceOwner, grant.AvatarURL),
|
||||
PreferredLoginName: grant.PreferredLoginName,
|
||||
UserType: TypeToPb(grant.UserType),
|
||||
Details: object.ToViewDetailsPb(
|
||||
grant.Sequence,
|
||||
grant.CreationDate,
|
||||
|
@ -272,7 +272,15 @@ func (h *AddHuman) ensureDisplayName() {
|
||||
if strings.TrimSpace(h.DisplayName) != "" {
|
||||
return
|
||||
}
|
||||
h.DisplayName = h.FirstName + " " + h.LastName
|
||||
if strings.TrimSpace(h.FirstName) != "" && strings.TrimSpace(h.LastName) != "" {
|
||||
h.DisplayName = h.FirstName + " " + h.LastName
|
||||
return
|
||||
}
|
||||
if strings.TrimSpace(string(h.Email.Address)) != "" {
|
||||
h.DisplayName = string(h.Email.Address)
|
||||
return
|
||||
}
|
||||
h.DisplayName = h.Username
|
||||
}
|
||||
|
||||
// shouldAddInitCode returns true for all added Humans which:
|
||||
@ -464,7 +472,7 @@ func (c *Commands) createHuman(ctx context.Context, orgID string, human *domain.
|
||||
human.AggregateID = userID
|
||||
}
|
||||
|
||||
human.SetNamesAsDisplayname()
|
||||
human.EnsureDisplayName()
|
||||
if human.Password != nil {
|
||||
if err := human.HashPasswordIfExisting(pwPolicy, c.userPasswordAlg, human.Password.ChangeRequired); err != nil {
|
||||
return nil, nil, err
|
||||
|
@ -1,6 +1,7 @@
|
||||
package domain
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/zitadel/zitadel/internal/crypto"
|
||||
@ -89,10 +90,16 @@ func (u *Human) CheckDomainPolicy(policy *DomainPolicy) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *Human) SetNamesAsDisplayname() {
|
||||
func (u *Human) EnsureDisplayName() {
|
||||
if u.Profile != nil && u.DisplayName == "" && u.FirstName != "" && u.LastName != "" {
|
||||
u.DisplayName = u.FirstName + " " + u.LastName
|
||||
return
|
||||
}
|
||||
if u.Email != nil && strings.TrimSpace(string(u.Email.EmailAddress)) != "" {
|
||||
u.DisplayName = string(u.Email.EmailAddress)
|
||||
return
|
||||
}
|
||||
u.DisplayName = u.Username
|
||||
}
|
||||
|
||||
func (u *Human) HashPasswordIfExisting(policy *PasswordComplexityPolicy, passwordAlg crypto.HashAlgorithm, onetime bool) error {
|
||||
|
@ -2,48 +2,48 @@ InitCode:
|
||||
Title: ZITADEL - User initialisieren
|
||||
PreHeader: User initialisieren
|
||||
Subject: User initialisieren
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Dieser Benutzer wurde soeben in ZITADEL erstellt. Mit dem Benutzernamen <br><strong>{{.PreferredLoginName}}</strong><br> kannst du dich anmelden. Nutze den untenstehenden Button, um die Initialisierung abzuschliessen <br>(Code <strong>{{.Code}}</strong>).<br> Falls du dieses Mail nicht angefordert hast, kannst du es einfach ignorieren.
|
||||
ButtonText: Initialisierung abschliessen
|
||||
PasswordReset:
|
||||
Title: ZITADEL - Passwort zurücksetzen
|
||||
PreHeader: Passwort zurücksetzen
|
||||
Subject: Passwort zurücksetzen
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Wir haben eine Anfrage für das Zurücksetzen deines Passwortes bekommen. Du kannst den untenstehenden Button verwenden, um dein Passwort zurückzusetzen <br>(Code <strong>{{.Code}}</strong>).<br> Falls du dieses Mail nicht angefordert hast, kannst du es ignorieren.
|
||||
ButtonText: Passwort zurücksetzen
|
||||
VerifyEmail:
|
||||
Title: ZITADEL - Email verifizieren
|
||||
PreHeader: Email verifizieren
|
||||
Subject: Email verifizieren
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Eine neue E-Mail Adresse wurde hinzugefügt. Bitte verwende den untenstehenden Button um diese zu verifizieren <br>(Code <strong>{{.Code}}</strong>).<br> Falls du deine E-Mail Adresse nicht selber hinzugefügt hast, kannst du dieses E-Mail ignorieren.
|
||||
ButtonText: Email verifizieren
|
||||
VerifyPhone:
|
||||
Title: ZITADEL - Telefonnummer verifizieren
|
||||
PreHeader: Telefonnummer verifizieren
|
||||
Subject: Telefonnummer verifizieren
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Eine Telefonnummer wurde hinzugefügt. Bitte verifiziere diese in dem du folgenden Code eingibst<br>(Code <strong>{{.Code}}</strong>).<br>
|
||||
ButtonText: Telefon verifizieren
|
||||
DomainClaimed:
|
||||
Title: ZITADEL - Domain wurde beansprucht
|
||||
PreHeader: Email / Username ändern
|
||||
Subject: Domain wurde beansprucht
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Die Domain {{.Domain}} wurde von einer Organisation beansprucht. Dein derzeitiger User {{.Username}} ist nicht Teil dieser Organisation. Daher musst du beim nächsten Login eine neue Email hinterlegen. Für diesen Login haben wir dir einen temporären Usernamen ({{.TempUsername}}) erstellt.
|
||||
ButtonText: Login
|
||||
PasswordlessRegistration:
|
||||
Title: ZITADEL - Passwortlosen Login hinzufügen
|
||||
PreHeader: Passwortlosen Login hinzufügen
|
||||
Subject: Passwortlosen Login hinzufügen
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Wir haben eine Anfrage für das Hinzufügen eines Token für den passwortlosen Login erhalten. Du kannst den untenstehenden Button verwenden, um dein Token oder Gerät hinzuzufügen.
|
||||
ButtonText: Passwortlosen Login hinzufügen
|
||||
PasswordChange:
|
||||
Title: ZITADEL - Passwort von Benutzer wurde geändert
|
||||
PreHeader: Passwort Änderung
|
||||
Subject: Passwort von Benutzer wurde geändert
|
||||
Greeting: Hallo {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hallo {{.DisplayName}},
|
||||
Text: Das Password vom Benutzer wurde geändert, wenn diese Änderung von jemand anderem gemacht wurde, empfehlen wir die sofortige Zurücksetzung ihres Passworts.
|
||||
ButtonText: Login
|
||||
ButtonText: Login
|
||||
|
@ -2,48 +2,48 @@ InitCode:
|
||||
Title: ZITADEL - Initialize User
|
||||
PreHeader: Initialize User
|
||||
Subject: Initialize User
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: This user was created in ZITADEL. Use the username {{.PreferredLoginName}} to login. Please click the button below to finish the initialization process. (Code {{.Code}}) If you didn't ask for this mail, please ignore it.
|
||||
ButtonText: Finish initialization
|
||||
PasswordReset:
|
||||
Title: ZITADEL - Reset password
|
||||
PreHeader: Reset password
|
||||
Subject: Reset password
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: We received a password reset request. Please use the button below to reset your password. (Code {{.Code}}) If you didn't ask for this mail, please ignore it.
|
||||
ButtonText: Reset password
|
||||
VerifyEmail:
|
||||
Title: ZITADEL - Verify email
|
||||
PreHeader: Verify email
|
||||
Subject: Verify email
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: A new email has been added. Please use the button below to verify your mail. (Code {{.Code}}) If you didn't add a new email, please ignore this email.
|
||||
ButtonText: Verify email
|
||||
VerifyPhone:
|
||||
Title: ZITADEL - Verify phone
|
||||
PreHeader: Verify phone
|
||||
Subject: Verify phone
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: A new phone number has been added. Please use the following code to verify it {{.Code}}
|
||||
ButtonText: Verify phone
|
||||
DomainClaimed:
|
||||
Title: ZITADEL - Domain has been claimed
|
||||
PreHeader: Change email / username
|
||||
Subject: Domain has been claimed
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: The domain {{.Domain}} has been claimed by an organization. Your current user {{.Username}} is not part of this organization. Therefore you'll have to change your email when you login. We have created a temporary username ({{.TempUsername}}) for this login.
|
||||
ButtonText: Login
|
||||
PasswordlessRegistration:
|
||||
Title: ZITADEL - Add Passwordless Login
|
||||
PreHeader: Add Passwordless Login
|
||||
Subject: Add Passwordless Login
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: We received a request to add a token for passwordless login. Please use the button below to add your token or device for passwordless login.
|
||||
ButtonText: Add Passwordless Login
|
||||
PasswordChange:
|
||||
Title: ZITADEL - Password of user has changed
|
||||
PreHeader: Change password
|
||||
Subject: Password of user has changed
|
||||
Greeting: Hello {{.FirstName}} {{.LastName}},
|
||||
Greeting: Hello {{.DisplayName}},
|
||||
Text: The password of your user has changed, if this change was not done by you, please be advised to immediately reset your password.
|
||||
ButtonText: Login
|
||||
ButtonText: Login
|
||||
|
@ -2,48 +2,48 @@ InitCode:
|
||||
Title: ZITADEL - Initialiser l'utilisateur
|
||||
PreHeader: Initialiser l'utilisateur
|
||||
Subject: Initialiser l'utilisateur
|
||||
Greeting: Bonjour {{.FirstName}} {{.LastName}},
|
||||
Greeting: Bonjour {{.DisplayName}},
|
||||
Text: Cet utilisateur a été créé dans ZITADEL. Utilisez le nom d'utilisateur {{.PreferredLoginName}} pour vous connecter. Veuillez cliquer sur le bouton ci-dessous pour terminer le processus d'initialisation. (Code {{.Code}}) Si vous n'avez pas demandé ce courrier, veuillez l'ignorer.
|
||||
ButtonText: Terminer l'initialisation
|
||||
PasswordReset:
|
||||
Title: ZITADEL - Réinitialiser le mot de passe
|
||||
PreHeader: Réinitialiser le mot de passe
|
||||
Subject: Réinitialiser le mot de passe
|
||||
Greeting: Bonjour {{.FirstName}} {{.LastName}},
|
||||
Greeting: Bonjour {{.DisplayName}},
|
||||
Text: Nous avons reçu une demande de réinitialisation du mot de passe. Veuillez utiliser le bouton ci-dessous pour réinitialiser votre mot de passe. (Code {{.Code}}) Si vous n'avez pas demandé cet e-mail, veuillez l'ignorer.
|
||||
ButtonText: Réinitialiser le mot de passe
|
||||
VerifyEmail:
|
||||
Title: ZITADEL - Vérifier l'email
|
||||
PreHeader: Vérifier l'email
|
||||
Subject: Vérifier l'email
|
||||
Greeting: Bonjour {{.FirstName}} {{.LastName}},
|
||||
Greeting: Bonjour {{.DisplayName}},
|
||||
Text: Un nouveau courriel a été ajouté. Veuillez utiliser le bouton ci-dessous pour vérifier votre e-mail. (Code {{.Code}}) Si vous n'avez pas ajouté de nouvelle adresse e-mail, veuillez ignorer cet e-mail.
|
||||
ButtonText: Vérifier l'email
|
||||
VerifyPhone:
|
||||
Title: ZITADEL - Vérifier le téléphone
|
||||
PreHeader: Vérifier le téléphone
|
||||
Subject: Vérifier le téléphone
|
||||
Greeting: Bonjour {{.FirstName}} {{.LastName}},
|
||||
Greeting: Bonjour {{.DisplayName}},
|
||||
Text: Un nouveau numéro de téléphone a été ajouté. Veuillez utiliser le code suivant pour le vérifier {{.Code}}
|
||||
ButtonText: Vérifier le téléphone
|
||||
DomainClaimed:
|
||||
Title: ZITADEL - Le domaine a été réclamé
|
||||
PreHeader: Modifier l'email / le nom d'utilisateur
|
||||
Subject: Le domaine a été réclamé
|
||||
Greeting: Bonjour {{.FirstName}} {{.LastName}},
|
||||
Greeting: Bonjour {{.DisplayName}},
|
||||
Text: Le domaine {{.Domain}} a été revendiqué par une organisation. Votre utilisateur actuel {{.Username}} ne fait pas partie de cette organisation. Par conséquent, vous devrez changer votre adresse électronique lors de votre connexion. Nous avons créé un nom d'utilisateur temporaire ({{.TempUsername}}) pour cette connexion.
|
||||
ButtonText: Connexion
|
||||
PasswordlessRegistration:
|
||||
Title: ZITADEL - Ajouter une connexion sans mot de passe
|
||||
PreHeader: Ajouter une connexion sans mot de passe
|
||||
Subject: Ajouter une connexion sans mot de passe
|
||||
Greeting: Bonjour {{.FirstName}} {{.LastName}},
|
||||
Greeting: Bonjour {{.DisplayName}},
|
||||
Text: Nous avons reçu une demande d'ajout d'un jeton pour la connexion sans mot de passe. Veuillez utiliser le bouton ci-dessous pour ajouter votre jeton ou dispositif pour la connexion sans mot de passe.
|
||||
ButtonText: Ajouter une connexion sans mot de passe
|
||||
PasswordChange:
|
||||
Title: ZITADEL - Le mot de passe de l'utilisateur a changé
|
||||
PreHeader: Modifier le mot de passe
|
||||
Subject: Le mot de passe de l'utilisateur a changé
|
||||
Greeting: Bonjour {{.FirstName}} {{.LastName}},
|
||||
Greeting: Bonjour {{.DisplayName}},
|
||||
Text: Le mot de passe de votre utilisateur a changé, si ce changement n'a pas été fait par vous, nous vous conseillons de réinitialiser immédiatement votre mot de passe.
|
||||
ButtonText: Login
|
||||
|
@ -2,48 +2,48 @@ InitCode:
|
||||
Title: ZITADEL - Inizializzare l'utente
|
||||
PreHeader: Inizializzare l'utente
|
||||
Subject: Inizializzare l'utente
|
||||
Greeting: 'Ciao {{.FirstName}} {{.LastName}},'
|
||||
Greeting: 'Ciao {{.DisplayName}},'
|
||||
Text: Questo utente è stato creato in ZITADEL. Usa il nome utente {{.PreferredLoginName}} per accedere. Per favore, clicca il pulsante per finire il processo di inizializzazione. (Codice {{.Codice}}) Se non hai richiesto questa mail, per favore ignorala.
|
||||
ButtonText: Termina
|
||||
PasswordReset:
|
||||
Title: ZITADEL - Ripristina la password
|
||||
PreHeader: Ripristina la password
|
||||
Subject: Ripristina la password
|
||||
Greeting: 'Ciao {{.FirstName}} {{.LastName}},'
|
||||
Greeting: 'Ciao {{.DisplayName}},'
|
||||
Text: Abbiamo ricevuto una richiesta di reimpostazione della password. Per favore clicca il pulsante per resettare la tua password. (Codice {{.Codice}}) Se non hai richiesto questa mail, ignorala.
|
||||
ButtonText: Ripristina
|
||||
VerifyEmail:
|
||||
Title: ZITADEL - Verifica l'e-mail
|
||||
PreHeader: Verifica l'e-mail
|
||||
Subject: Verifica l'e-mail
|
||||
Greeting: 'Ciao {{.FirstName}} {{.LastName}},'
|
||||
Greeting: 'Ciao {{.DisplayName}},'
|
||||
Text: È stata aggiunta una nuova email. Per favore fai clic sul pulsante per verificare la tua mail. (Codice {{.Codice}}) Se non hai aggiunto una nuova email, ignora questa email.
|
||||
ButtonText: Verifica
|
||||
VerifyPhone:
|
||||
Title: ZITADEL - Verifica il telefono
|
||||
PreHeader: Verifica il telefono
|
||||
Subject: Verifica il telefono
|
||||
Greeting: 'Ciao {{.FirstName}} {{.LastName}},'
|
||||
Greeting: 'Ciao {{.DisplayName}},'
|
||||
Text: È stato aggiunto un nuovo numero di telefono. Usa il seguente codice per verificarlo {{.Code}}
|
||||
ButtonText: Verifica
|
||||
DomainClaimed:
|
||||
Title: ZITADEL - Il dominio è stato rivendicato
|
||||
PreHeader: Cambiare email / nome utente
|
||||
Subject: Il dominio è stato rivendicato
|
||||
Greeting: 'Ciao {{.FirstName}} {{.LastName}},'
|
||||
Greeting: 'Ciao {{.DisplayName}},'
|
||||
Text: Il dominio {{.Domain}} è stato rivendicato da un'organizzazione. Il tuo attuale utente {{.Username}} non fa parte di questa organizzazione. Perciò dovrai cambiare la tua email quando farai il login. Abbiamo creato un nome utente temporaneo ({{.TempUsername}}) per questo login.
|
||||
ButtonText: Accedi
|
||||
PasswordlessRegistration:
|
||||
Title: ZITADEL - Aggiungere autenticazione passwordless
|
||||
PreHeader: Aggiungi l'autenticazione passwordless
|
||||
Subject: Aggiungi l'autenticazione passwordless
|
||||
Greeting: 'Ciao {{.FirstName}} {{.LastName}},'
|
||||
Greeting: 'Ciao {{.DisplayName}},'
|
||||
Text: Abbiamo ricevuto una richiesta per aggiungere l'autenticazione passwordless. Usa il pulsante qui sotto per aggiungere il tuo token o dispositivo per il login senza password.
|
||||
ButtonText: Attiva passwordless
|
||||
PasswordChange:
|
||||
Title: ZITADEL - La password dell'utente è stata modificata
|
||||
PreHeader: Modifica della password
|
||||
Subject: La password dell'utente è stata modificata
|
||||
Greeting: Ciao {{.FirstName}} {{.LastName}},
|
||||
Greeting: Ciao {{.DisplayName}},
|
||||
Text: La password del vostro utente è cambiata; se questa modifica non è stata fatta da voi, vi consigliamo di reimpostare immediatamente la vostra password.
|
||||
ButtonText: Login
|
||||
ButtonText: Login
|
||||
|
@ -2,48 +2,48 @@ InitCode:
|
||||
Title: ZITADEL - ユーザーの初期セットアップ
|
||||
PreHeader: ユーザーの初期セットアップ
|
||||
Subject: ユーザーの初期セットアップ
|
||||
Greeting: こんにちは {{.LastName}} {{.FirstName}} さん、
|
||||
Greeting: こんにちは {{.DisplayName}} さん、
|
||||
Text: このユーザーはZITADELで作成されました。ユーザー名 {{.PreferredLoginName}} を使用してログインします。以下のボタンから、初期セットアップを完了してください。(コード {{.Code}})このメールの受信を希望していない場合は、無視してください。
|
||||
ButtonText: 初期セットアップを完了する
|
||||
PasswordReset:
|
||||
Title: ZITADEL - パスワードをリセットします
|
||||
PreHeader: パスワードの再設定
|
||||
Subject: パスワードの再設定
|
||||
Greeting: こんにちは {{.LastName}} {{.FirstName}} さん、
|
||||
Greeting: こんにちは {{.DisplayName}} さん、
|
||||
Text: パスワードリセットのリクエストを受け取りました。以下のボタンから、パスワードをリセットしてください。(コード {{.Code}})このメールの受信を希望していない場合は、無視してください。
|
||||
ButtonText: パスワードを再設定
|
||||
VerifyEmail:
|
||||
Title: ZITADEL - メールアドレスの認証
|
||||
PreHeader: メールアドレスの認証
|
||||
Subject: メールアドレスの認証
|
||||
Greeting: こんにちは {{.LastName}} {{.FirstName}} さん、
|
||||
Greeting: こんにちは {{.DisplayName}} さん、
|
||||
Text: 新しいメールアドレスが追加されました。以下のボタンから、メールアドレスを認証してください。(コード {{.Code}})新しいメールアドレスを追加していない場合は、このメールを無視してください。
|
||||
ButtonText: メールアドレスを認証
|
||||
VerifyPhone:
|
||||
Title: ZITADEL - 電話番号の認証
|
||||
PreHeader: 電話番号の認証
|
||||
Subject: 電話番号の認証
|
||||
Greeting: こんにちは {{.LastName}} {{.FirstName}} さん、
|
||||
Greeting: こんにちは {{.DisplayName}} さん、
|
||||
Text: 新しい電話番号が追加されました。次のコードを使用してを認証してください {{.Code}}
|
||||
ButtonText: 電話番号を認証
|
||||
DomainClaimed:
|
||||
Title: ZITADEL - ドメインの登録
|
||||
PreHeader: メールアドレス・ユーザー名の変更
|
||||
Subject: ドメインの登録
|
||||
Greeting: こんにちは {{.LastName}} {{.FirstName}} さん、
|
||||
Greeting: こんにちは {{.DisplayName}} さん、
|
||||
Text: ドメイン {{.Domain}} が組織によって登録されました。現在のユーザー {{.Username}} はこの組織のメンバーでないため、ログイン時にメールアドレスを変更する必要があります。一時的なユーザー名({{.TempUsername}})を使用してログインし、設定を進めてください。
|
||||
ButtonText: ログイン
|
||||
PasswordlessRegistration:
|
||||
Title: ZITADEL - パスワードレスログインの追加
|
||||
PreHeader: パスワードレスログインの追加
|
||||
Subject: パスワードレスログインの追加
|
||||
Greeting: こんにちは {{.LastName}} {{.FirstName}} さん、
|
||||
Greeting: こんにちは {{.DisplayName}} さん、
|
||||
Text: パスワードレスログイン用のトークンを追加するリクエストを受け取りました。以下のボタンから、パスワードレスログイン用のトークンやデバイスを追加してください。
|
||||
ButtonText: パスワードレスログインを追加
|
||||
PasswordChange:
|
||||
Title: ZITADEL - ユーザーのパスワードが変更されました
|
||||
PreHeader: パスワードの変更
|
||||
Subject: ユーザーのパスワードが変更されました
|
||||
Greeting: こんにちは {{.LastName}} {{.FirstName}} さん、
|
||||
Greeting: こんにちは {{.DisplayName}} さん、
|
||||
Text: ユーザーのパスワードが変更されました。この変更があなたによって行われなかった場合は、すぐにパスワードをリセットすることをお勧めします。
|
||||
ButtonText: ログイン
|
||||
|
@ -2,48 +2,48 @@ InitCode:
|
||||
Title: ZITADEL - Inicjalizacja użytkownika
|
||||
PreHeader: Inicjalizacja użytkownika
|
||||
Subject: Inicjalizacja użytkownika
|
||||
Greeting: Witaj {{.FirstName}} {{.LastName}},
|
||||
Greeting: Witaj {{.DisplayName}},
|
||||
Text: Ten użytkownik został utworzony w ZITADEL. Aby się zalogować, użyj nazwy użytkownika {{.PreferredLoginName}}. Kliknij poniższy przycisk, aby zakończyć proces inicjalizacji. (Kod {{.Code}}) Jeśli nie wystąpiła prośba o ten e-mail, proszę go zignorować.
|
||||
ButtonText: Zakończ inicjalizację
|
||||
PasswordReset:
|
||||
Title: ZITADEL - Resetowanie hasła
|
||||
PreHeader: Resetowanie hasła
|
||||
Subject: Resetowanie hasła
|
||||
Greeting: Witaj {{.FirstName}} {{.LastName}},
|
||||
Greeting: Witaj {{.DisplayName}},
|
||||
Text: Otrzymaliśmy prośbę o resetowanie hasła. Kliknij poniższy przycisk, aby zresetować swoje hasło. (Kod {{.Code}}) Jeśli nie wystąpiła prośba o ten e-mail, proszę go zignorować.
|
||||
ButtonText: Zresetuj hasło
|
||||
VerifyEmail:
|
||||
Title: ZITADEL - Weryfikacja adresu e-mail
|
||||
PreHeader: Weryfikacja adresu e-mail
|
||||
Subject: Weryfikacja adresu e-mail
|
||||
Greeting: Witaj {{.FirstName}} {{.LastName}},
|
||||
Greeting: Witaj {{.DisplayName}},
|
||||
Text: Został dodany nowy adres e-mail. Użyj poniższego przycisku, aby zweryfikować swój adres e-mail. (Kod {{.Code}}) Jeśli nie dodałeś nowego adresu e-mail, proszę zignoruj ten e-mail.
|
||||
ButtonText: Zweryfikuj adres e-mail
|
||||
VerifyPhone:
|
||||
Title: ZITADEL - Weryfikacja numeru telefonu
|
||||
PreHeader: Weryfikacja numeru telefonu
|
||||
Subject: Weryfikacja numeru telefonu
|
||||
Greeting: Witaj {{.FirstName}} {{.LastName}},
|
||||
Greeting: Witaj {{.DisplayName}},
|
||||
Text: Został dodany nowy numer telefonu. Użyj następującego kodu, aby go zweryfikować {{.Code}}
|
||||
ButtonText: Zweryfikuj numer telefonu
|
||||
DomainClaimed:
|
||||
Title: ZITADEL - Domena została zarejestrowana
|
||||
PreHeader: Zmiana adresu e-mail / nazwy użytkownika
|
||||
Subject: Domena została zarejestrowana
|
||||
Greeting: Witaj {{.FirstName}} {{.LastName}},
|
||||
Greeting: Witaj {{.DisplayName}},
|
||||
Text: Domena {{.Domain}} została zarejestrowana przez organizację. Twój obecny użytkownik {{.Username}} nie jest członkiem tej organizacji. Dlatego będziesz musiał zmienić swój adres e-mail podczas logowania. Stworzyliśmy tymczasową nazwę użytkownika ({{.TempUsername}}) dla tego logowania.
|
||||
ButtonText: Zaloguj się
|
||||
PasswordlessRegistration:
|
||||
Title: ZITADEL - Dodaj logowanie bez hasła
|
||||
PreHeader: Dodaj logowanie bez hasła
|
||||
Subject: Dodaj logowanie bez hasła
|
||||
Greeting: Witaj {{.FirstName}} {{.LastName}},
|
||||
Greeting: Witaj {{.DisplayName}},
|
||||
Text: Otrzymaliśmy prośbę o dodanie tokenu do logowania bez hasła. Użyj poniższego przycisku, aby dodać swój token lub urządzenie do logowania bez hasła.
|
||||
ButtonText: Dodaj logowanie bez hasła
|
||||
PasswordChange:
|
||||
Title: ZITADEL - Hasło użytkownika zostało zmienione
|
||||
PreHeader: Zmiana hasła
|
||||
Subject: Hasło użytkownika zostało zmienione
|
||||
Greeting: Witaj {{.FirstName}} {{.LastName}},
|
||||
Greeting: Witaj {{.DisplayName}},
|
||||
Text: Hasło Twojego użytkownika zostało zmienione, jeśli ta zmiana nie została dokonana przez Ciebie, zalecamy natychmiastowe zresetowanie hasła.
|
||||
ButtonText: Zaloguj się
|
||||
|
@ -2,48 +2,48 @@ InitCode:
|
||||
Title: ZITADEL - 初始化用户
|
||||
PreHeader: 初始化用户
|
||||
Subject: 初始化用户
|
||||
Greeting: 你好 {{.FirstName}} {{.LastName}},
|
||||
Greeting: 你好 {{.DisplayName}},
|
||||
Text: 此用户是在 ZITADEL 中创建的。使用用户名 {{.PreferredLoginName}} 登录。请单击下面的按钮完成初始化过程。(代码 {{.Code}})如果不是您本人操作,请忽略它。
|
||||
ButtonText: 完成初始化
|
||||
PasswordReset:
|
||||
Title: ZITADEL - 重置密码
|
||||
PreHeader: 重置密码
|
||||
Subject: 重置密码
|
||||
Greeting: 你好 {{.FirstName}} {{.LastName}},
|
||||
Greeting: 你好 {{.DisplayName}},
|
||||
Text: 我们收到了密码重置请求。请使用下面的按钮重置您的密码。(验证码 {{.Code}})如果不是您本人操作,请忽略它。
|
||||
ButtonText: 重置密码
|
||||
VerifyEmail:
|
||||
Title: ZITADEL - 验证电子邮箱
|
||||
PreHeader: 验证电子邮箱
|
||||
Subject: 验证电子邮箱
|
||||
Greeting: 你好 {{.FirstName}} {{.LastName}},
|
||||
Greeting: 你好 {{.DisplayName}},
|
||||
Text: 已添加新电子邮件。请使用下面的按钮来验证您的邮件。(验证码 {{.Code}})如果不是您本人操作,请忽略此电子邮件。
|
||||
ButtonText: 验证电子邮箱
|
||||
VerifyPhone:
|
||||
Title: ZITADEL - 验证手机号码
|
||||
PreHeader: 验证手机号码
|
||||
Subject: 验证手机号码
|
||||
Greeting: 你好 {{.FirstName}} {{.LastName}},
|
||||
Greeting: 你好 {{.DisplayName}},
|
||||
Text: 您的用户中添加了一个新的手机号码,请使用以下验证码进行验证 {{.Code}}
|
||||
ButtonText: 验证手机号码
|
||||
DomainClaimed:
|
||||
Title: ZITADEL - 域名所有权验证
|
||||
PreHeader: 更改电子邮件/用户名
|
||||
Subject: 域名所有权验证
|
||||
Greeting: 你好 {{.FirstName}} {{.LastName}},
|
||||
Greeting: 你好 {{.DisplayName}},
|
||||
Text: 域 {{.Domain}} 已被组织使用。您当前的用户 {{.Username}} 不属于此组织。因此,您必须在登录时更改您的电子邮件。我们为此登录创建了一个临时用户名 ({{.TempUsername}})。
|
||||
ButtonText: 登录
|
||||
PasswordlessRegistration:
|
||||
Title: ZITADEL - 添加无密码登录
|
||||
PreHeader: 添加无密码登录
|
||||
Subject: 添加无密码登录
|
||||
Greeting: 你好 {{.FirstName}} {{.LastName}},
|
||||
Greeting: 你好 {{.DisplayName}},
|
||||
Text: 我们收到了为无密码登录添加令牌的请求。请使用下面的按钮添加您的令牌或设备以进行无密码登录。
|
||||
ButtonText: 添加无密码登录
|
||||
PasswordChange:
|
||||
Title: ZITADEL - 用户的密码已经改变
|
||||
PreHeader: 更改密码
|
||||
Subject: 用户的密码已经改变
|
||||
Greeting: 你好 {{.FirstName}} {{.LastName}},
|
||||
Greeting: 你好 {{.DisplayName}},
|
||||
Text: 您的用户的密码已经改变,如果这个改变不是由您做的,请注意立即重新设置您的密码。
|
||||
ButtonText: 登录
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
|
||||
"github.com/zitadel/zitadel/internal/api/authz"
|
||||
"github.com/zitadel/zitadel/internal/api/call"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
"github.com/zitadel/zitadel/internal/errors"
|
||||
"github.com/zitadel/zitadel/internal/query/projection"
|
||||
"github.com/zitadel/zitadel/internal/telemetry/tracing"
|
||||
@ -122,10 +123,12 @@ func prepareInstanceMembersQuery(ctx context.Context, db prepareDatabase) (sq.Se
|
||||
HumanDisplayNameCol.identifier(),
|
||||
MachineNameCol.identifier(),
|
||||
HumanAvatarURLCol.identifier(),
|
||||
UserTypeCol.identifier(),
|
||||
countColumn.identifier(),
|
||||
).From(instanceMemberTable.identifier()).
|
||||
LeftJoin(join(HumanUserIDCol, InstanceMemberUserID)).
|
||||
LeftJoin(join(MachineUserIDCol, InstanceMemberUserID)).
|
||||
LeftJoin(join(UserIDCol, InstanceMemberUserID)).
|
||||
LeftJoin(join(LoginNameUserIDCol, InstanceMemberUserID) + db.Timetravel(call.Took(ctx))).
|
||||
Where(
|
||||
sq.Eq{LoginNameIsPrimaryCol.identifier(): true},
|
||||
@ -145,6 +148,7 @@ func prepareInstanceMembersQuery(ctx context.Context, db prepareDatabase) (sq.Se
|
||||
displayName = sql.NullString{}
|
||||
machineName = sql.NullString{}
|
||||
avatarURL = sql.NullString{}
|
||||
userType = sql.NullInt32{}
|
||||
)
|
||||
|
||||
err := rows.Scan(
|
||||
@ -161,6 +165,7 @@ func prepareInstanceMembersQuery(ctx context.Context, db prepareDatabase) (sq.Se
|
||||
&displayName,
|
||||
&machineName,
|
||||
&avatarURL,
|
||||
&userType,
|
||||
|
||||
&count,
|
||||
)
|
||||
@ -179,6 +184,7 @@ func prepareInstanceMembersQuery(ctx context.Context, db prepareDatabase) (sq.Se
|
||||
} else {
|
||||
member.DisplayName = machineName.String
|
||||
}
|
||||
member.UserType = domain.UserType(userType.Int32)
|
||||
|
||||
members = append(members, member)
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/zitadel/zitadel/internal/database"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -26,12 +27,15 @@ var (
|
||||
", projections.users8_humans.display_name" +
|
||||
", projections.users8_machines.name" +
|
||||
", projections.users8_humans.avatar_key" +
|
||||
", projections.users8.type" +
|
||||
", COUNT(*) OVER () " +
|
||||
"FROM projections.instance_members3 AS members " +
|
||||
"LEFT JOIN projections.users8_humans " +
|
||||
"ON members.user_id = projections.users8_humans.user_id AND members.instance_id = projections.users8_humans.instance_id " +
|
||||
"LEFT JOIN projections.users8_machines " +
|
||||
"ON members.user_id = projections.users8_machines.user_id AND members.instance_id = projections.users8_machines.instance_id " +
|
||||
"LEFT JOIN projections.users8 " +
|
||||
"ON members.user_id = projections.users8.id AND members.instance_id = projections.users8.instance_id " +
|
||||
"LEFT JOIN projections.login_names2 " +
|
||||
"ON members.user_id = projections.login_names2.user_id AND members.instance_id = projections.login_names2.instance_id " +
|
||||
"AS OF SYSTEM TIME '-1 ms' " +
|
||||
@ -50,6 +54,7 @@ var (
|
||||
"display_name",
|
||||
"name",
|
||||
"avatar_key",
|
||||
"type",
|
||||
"count",
|
||||
}
|
||||
)
|
||||
@ -101,6 +106,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
"display name",
|
||||
nil,
|
||||
nil,
|
||||
domain.UserTypeHuman,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -123,6 +129,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
LastName: "last-name",
|
||||
DisplayName: "display name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeHuman,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -149,6 +156,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
nil,
|
||||
"machine-name",
|
||||
nil,
|
||||
domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -171,6 +179,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
LastName: "",
|
||||
DisplayName: "machine-name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -197,6 +206,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
"display name",
|
||||
nil,
|
||||
nil,
|
||||
domain.UserTypeHuman,
|
||||
},
|
||||
{
|
||||
testNow,
|
||||
@ -212,6 +222,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
nil,
|
||||
"machine-name",
|
||||
nil,
|
||||
domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -234,6 +245,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
LastName: "last-name",
|
||||
DisplayName: "display name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeHuman,
|
||||
},
|
||||
{
|
||||
CreationDate: testNow,
|
||||
@ -248,6 +260,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
LastName: "",
|
||||
DisplayName: "machine-name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/zitadel/zitadel/internal/database"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
"github.com/zitadel/zitadel/internal/query/projection"
|
||||
|
||||
sq "github.com/Masterminds/squirrel"
|
||||
@ -60,6 +61,7 @@ type Member struct {
|
||||
LastName string
|
||||
DisplayName string
|
||||
AvatarURL string
|
||||
UserType domain.UserType
|
||||
}
|
||||
|
||||
var (
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
|
||||
"github.com/zitadel/zitadel/internal/api/authz"
|
||||
"github.com/zitadel/zitadel/internal/api/call"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
"github.com/zitadel/zitadel/internal/errors"
|
||||
"github.com/zitadel/zitadel/internal/query/projection"
|
||||
"github.com/zitadel/zitadel/internal/telemetry/tracing"
|
||||
@ -124,10 +125,12 @@ func prepareOrgMembersQuery(ctx context.Context, db prepareDatabase) (sq.SelectB
|
||||
HumanDisplayNameCol.identifier(),
|
||||
MachineNameCol.identifier(),
|
||||
HumanAvatarURLCol.identifier(),
|
||||
UserTypeCol.identifier(),
|
||||
countColumn.identifier(),
|
||||
).From(orgMemberTable.identifier()).
|
||||
LeftJoin(join(HumanUserIDCol, OrgMemberUserID)).
|
||||
LeftJoin(join(MachineUserIDCol, OrgMemberUserID)).
|
||||
LeftJoin(join(UserIDCol, OrgMemberUserID)).
|
||||
LeftJoin(join(LoginNameUserIDCol, OrgMemberUserID) + db.Timetravel(call.Took(ctx))).
|
||||
Where(
|
||||
sq.Eq{LoginNameIsPrimaryCol.identifier(): true},
|
||||
@ -147,6 +150,7 @@ func prepareOrgMembersQuery(ctx context.Context, db prepareDatabase) (sq.SelectB
|
||||
displayName = sql.NullString{}
|
||||
machineName = sql.NullString{}
|
||||
avatarURL = sql.NullString{}
|
||||
userType = sql.NullInt32{}
|
||||
)
|
||||
|
||||
err := rows.Scan(
|
||||
@ -163,6 +167,7 @@ func prepareOrgMembersQuery(ctx context.Context, db prepareDatabase) (sq.SelectB
|
||||
&displayName,
|
||||
&machineName,
|
||||
&avatarURL,
|
||||
&userType,
|
||||
|
||||
&count,
|
||||
)
|
||||
@ -181,6 +186,7 @@ func prepareOrgMembersQuery(ctx context.Context, db prepareDatabase) (sq.SelectB
|
||||
} else {
|
||||
member.DisplayName = machineName.String
|
||||
}
|
||||
member.UserType = domain.UserType(userType.Int32)
|
||||
|
||||
members = append(members, member)
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/zitadel/zitadel/internal/database"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -26,6 +27,7 @@ var (
|
||||
", projections.users8_humans.display_name" +
|
||||
", projections.users8_machines.name" +
|
||||
", projections.users8_humans.avatar_key" +
|
||||
", projections.users8.type" +
|
||||
", COUNT(*) OVER () " +
|
||||
"FROM projections.org_members3 AS members " +
|
||||
"LEFT JOIN projections.users8_humans " +
|
||||
@ -34,6 +36,9 @@ var (
|
||||
"LEFT JOIN projections.users8_machines " +
|
||||
"ON members.user_id = projections.users8_machines.user_id " +
|
||||
"AND members.instance_id = projections.users8_machines.instance_id " +
|
||||
"LEFT JOIN projections.users8 " +
|
||||
"ON members.user_id = projections.users8.id " +
|
||||
"AND members.instance_id = projections.users8.instance_id " +
|
||||
"LEFT JOIN projections.login_names2 " +
|
||||
"ON members.user_id = projections.login_names2.user_id " +
|
||||
"AND members.instance_id = projections.login_names2.instance_id " +
|
||||
@ -53,6 +58,7 @@ var (
|
||||
"display_name",
|
||||
"name",
|
||||
"avatar_key",
|
||||
"type",
|
||||
"count",
|
||||
}
|
||||
)
|
||||
@ -104,6 +110,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
"display name",
|
||||
nil,
|
||||
nil,
|
||||
domain.UserTypeHuman,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -126,6 +133,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
LastName: "last-name",
|
||||
DisplayName: "display name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeHuman,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -152,6 +160,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
nil,
|
||||
"machine-name",
|
||||
nil,
|
||||
domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -174,6 +183,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
LastName: "",
|
||||
DisplayName: "machine-name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -200,6 +210,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
"display name",
|
||||
nil,
|
||||
nil,
|
||||
domain.UserTypeHuman,
|
||||
},
|
||||
{
|
||||
testNow,
|
||||
@ -215,6 +226,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
nil,
|
||||
"machine-name",
|
||||
nil,
|
||||
domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -237,6 +249,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
LastName: "last-name",
|
||||
DisplayName: "display name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeHuman,
|
||||
},
|
||||
{
|
||||
CreationDate: testNow,
|
||||
@ -251,6 +264,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
LastName: "",
|
||||
DisplayName: "machine-name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
|
||||
"github.com/zitadel/zitadel/internal/api/authz"
|
||||
"github.com/zitadel/zitadel/internal/api/call"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
"github.com/zitadel/zitadel/internal/errors"
|
||||
"github.com/zitadel/zitadel/internal/query/projection"
|
||||
)
|
||||
@ -138,10 +139,12 @@ func prepareProjectGrantMembersQuery(ctx context.Context, db prepareDatabase) (s
|
||||
HumanDisplayNameCol.identifier(),
|
||||
MachineNameCol.identifier(),
|
||||
HumanAvatarURLCol.identifier(),
|
||||
UserTypeCol.identifier(),
|
||||
countColumn.identifier(),
|
||||
).From(projectGrantMemberTable.identifier()).
|
||||
LeftJoin(join(HumanUserIDCol, ProjectGrantMemberUserID)).
|
||||
LeftJoin(join(MachineUserIDCol, ProjectGrantMemberUserID)).
|
||||
LeftJoin(join(UserIDCol, ProjectGrantMemberUserID)).
|
||||
LeftJoin(join(LoginNameUserIDCol, ProjectGrantMemberUserID)).
|
||||
LeftJoin(join(ProjectGrantColumnGrantID, ProjectGrantMemberGrantID) + db.Timetravel(call.Took(ctx))).
|
||||
Where(
|
||||
@ -162,6 +165,7 @@ func prepareProjectGrantMembersQuery(ctx context.Context, db prepareDatabase) (s
|
||||
displayName = sql.NullString{}
|
||||
machineName = sql.NullString{}
|
||||
avatarURL = sql.NullString{}
|
||||
userType = sql.NullInt32{}
|
||||
)
|
||||
|
||||
err := rows.Scan(
|
||||
@ -178,6 +182,7 @@ func prepareProjectGrantMembersQuery(ctx context.Context, db prepareDatabase) (s
|
||||
&displayName,
|
||||
&machineName,
|
||||
&avatarURL,
|
||||
&userType,
|
||||
|
||||
&count,
|
||||
)
|
||||
@ -196,6 +201,7 @@ func prepareProjectGrantMembersQuery(ctx context.Context, db prepareDatabase) (s
|
||||
} else {
|
||||
member.DisplayName = machineName.String
|
||||
}
|
||||
member.UserType = domain.UserType(userType.Int32)
|
||||
|
||||
members = append(members, member)
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/zitadel/zitadel/internal/database"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -26,6 +27,7 @@ var (
|
||||
", projections.users8_humans.display_name" +
|
||||
", projections.users8_machines.name" +
|
||||
", projections.users8_humans.avatar_key" +
|
||||
", projections.users8.type" +
|
||||
", COUNT(*) OVER () " +
|
||||
"FROM projections.project_grant_members3 AS members " +
|
||||
"LEFT JOIN projections.users8_humans " +
|
||||
@ -34,6 +36,9 @@ var (
|
||||
"LEFT JOIN projections.users8_machines " +
|
||||
"ON members.user_id = projections.users8_machines.user_id " +
|
||||
"AND members.instance_id = projections.users8_machines.instance_id " +
|
||||
"LEFT JOIN projections.users8 " +
|
||||
"ON members.user_id = projections.users8.id " +
|
||||
"AND members.instance_id = projections.users8.instance_id " +
|
||||
"LEFT JOIN projections.login_names2 " +
|
||||
"ON members.user_id = projections.login_names2.user_id " +
|
||||
"AND members.instance_id = projections.login_names2.instance_id " +
|
||||
@ -56,6 +61,7 @@ var (
|
||||
"display_name",
|
||||
"name",
|
||||
"avatar_key",
|
||||
"type",
|
||||
"count",
|
||||
}
|
||||
)
|
||||
@ -107,6 +113,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
"display name",
|
||||
nil,
|
||||
nil,
|
||||
domain.UserTypeHuman,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -129,6 +136,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
LastName: "last-name",
|
||||
DisplayName: "display name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeHuman,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -155,6 +163,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
nil,
|
||||
"machine-name",
|
||||
nil,
|
||||
domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -177,6 +186,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
LastName: "",
|
||||
DisplayName: "machine-name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -203,6 +213,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
"display name",
|
||||
nil,
|
||||
nil,
|
||||
domain.UserTypeHuman,
|
||||
},
|
||||
{
|
||||
testNow,
|
||||
@ -218,6 +229,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
nil,
|
||||
"machine-name",
|
||||
nil,
|
||||
domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -240,6 +252,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
LastName: "last-name",
|
||||
DisplayName: "display name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeHuman,
|
||||
},
|
||||
{
|
||||
CreationDate: testNow,
|
||||
@ -254,6 +267,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
LastName: "",
|
||||
DisplayName: "machine-name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
|
||||
"github.com/zitadel/zitadel/internal/api/authz"
|
||||
"github.com/zitadel/zitadel/internal/api/call"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
"github.com/zitadel/zitadel/internal/errors"
|
||||
"github.com/zitadel/zitadel/internal/query/projection"
|
||||
"github.com/zitadel/zitadel/internal/telemetry/tracing"
|
||||
@ -124,10 +125,12 @@ func prepareProjectMembersQuery(ctx context.Context, db prepareDatabase) (sq.Sel
|
||||
HumanDisplayNameCol.identifier(),
|
||||
MachineNameCol.identifier(),
|
||||
HumanAvatarURLCol.identifier(),
|
||||
UserTypeCol.identifier(),
|
||||
countColumn.identifier(),
|
||||
).From(projectMemberTable.identifier()).
|
||||
LeftJoin(join(HumanUserIDCol, ProjectMemberUserID)).
|
||||
LeftJoin(join(MachineUserIDCol, ProjectMemberUserID)).
|
||||
LeftJoin(join(UserIDCol, ProjectMemberUserID)).
|
||||
LeftJoin(join(LoginNameUserIDCol, ProjectMemberUserID) + db.Timetravel(call.Took(ctx))).
|
||||
Where(
|
||||
sq.Eq{LoginNameIsPrimaryCol.identifier(): true},
|
||||
@ -147,6 +150,7 @@ func prepareProjectMembersQuery(ctx context.Context, db prepareDatabase) (sq.Sel
|
||||
displayName = sql.NullString{}
|
||||
machineName = sql.NullString{}
|
||||
avatarURL = sql.NullString{}
|
||||
userType = sql.NullInt32{}
|
||||
)
|
||||
|
||||
err := rows.Scan(
|
||||
@ -163,6 +167,7 @@ func prepareProjectMembersQuery(ctx context.Context, db prepareDatabase) (sq.Sel
|
||||
&displayName,
|
||||
&machineName,
|
||||
&avatarURL,
|
||||
&userType,
|
||||
|
||||
&count,
|
||||
)
|
||||
@ -181,6 +186,7 @@ func prepareProjectMembersQuery(ctx context.Context, db prepareDatabase) (sq.Sel
|
||||
} else {
|
||||
member.DisplayName = machineName.String
|
||||
}
|
||||
member.UserType = domain.UserType(userType.Int32)
|
||||
|
||||
members = append(members, member)
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/zitadel/zitadel/internal/database"
|
||||
"github.com/zitadel/zitadel/internal/domain"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -26,6 +27,7 @@ var (
|
||||
", projections.users8_humans.display_name" +
|
||||
", projections.users8_machines.name" +
|
||||
", projections.users8_humans.avatar_key" +
|
||||
", projections.users8.type" +
|
||||
", COUNT(*) OVER () " +
|
||||
"FROM projections.project_members3 AS members " +
|
||||
"LEFT JOIN projections.users8_humans " +
|
||||
@ -34,6 +36,9 @@ var (
|
||||
"LEFT JOIN projections.users8_machines " +
|
||||
"ON members.user_id = projections.users8_machines.user_id " +
|
||||
"AND members.instance_id = projections.users8_machines.instance_id " +
|
||||
"LEFT JOIN projections.users8 " +
|
||||
"ON members.user_id = projections.users8.id " +
|
||||
"AND members.instance_id = projections.users8.instance_id " +
|
||||
"LEFT JOIN projections.login_names2 " +
|
||||
"ON members.user_id = projections.login_names2.user_id " +
|
||||
"AND members.instance_id = projections.login_names2.instance_id " +
|
||||
@ -53,6 +58,7 @@ var (
|
||||
"display_name",
|
||||
"name",
|
||||
"avatar_key",
|
||||
"type",
|
||||
"count",
|
||||
}
|
||||
)
|
||||
@ -104,6 +110,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
"display name",
|
||||
nil,
|
||||
nil,
|
||||
domain.UserTypeHuman,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -126,6 +133,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
LastName: "last-name",
|
||||
DisplayName: "display name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeHuman,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -152,6 +160,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
nil,
|
||||
"machine-name",
|
||||
nil,
|
||||
domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -174,6 +183,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
LastName: "",
|
||||
DisplayName: "machine-name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -200,6 +210,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
"display name",
|
||||
nil,
|
||||
nil,
|
||||
domain.UserTypeHuman,
|
||||
},
|
||||
{
|
||||
testNow,
|
||||
@ -215,6 +226,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
nil,
|
||||
"machine-name",
|
||||
nil,
|
||||
domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
),
|
||||
@ -237,6 +249,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
LastName: "last-name",
|
||||
DisplayName: "display name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeHuman,
|
||||
},
|
||||
{
|
||||
CreationDate: testNow,
|
||||
@ -251,6 +264,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
LastName: "",
|
||||
DisplayName: "machine-name",
|
||||
AvatarURL: "",
|
||||
UserType: domain.UserTypeMachine,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -1466,6 +1466,11 @@ message UserGrant {
|
||||
example: "[\"RoleKey1\", \"RoleKey2\"]",
|
||||
}
|
||||
];
|
||||
zitadel.user.v1.Type user_type = 12 [
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
description: "type of the user (human / machine)"
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
message ListMyProjectOrgsRequest {
|
||||
|
@ -1,6 +1,7 @@
|
||||
syntax = "proto3";
|
||||
|
||||
import "zitadel/object.proto";
|
||||
import "zitadel/user.proto";
|
||||
import "validate/validate.proto";
|
||||
import "protoc-gen-openapiv2/options/annotations.proto";
|
||||
|
||||
@ -57,6 +58,11 @@ message Member {
|
||||
example: "\"https://api.zitadel.ch/assets/v1/avatar-32432jkh4kj32\"";
|
||||
}
|
||||
];
|
||||
zitadel.user.v1.Type user_type = 10 [
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
description: "type of the user (human / machine)"
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
message SearchQuery {
|
||||
|
@ -723,6 +723,11 @@ message UserGrant {
|
||||
example: "\"gigi@zitadel.com\"";
|
||||
}
|
||||
];
|
||||
Type user_type = 19 [
|
||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||
description: "type of the user (human / machine)"
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
enum UserGrantState {
|
||||
|
Loading…
x
Reference in New Issue
Block a user