Initial commit: OAuth IAM Laravel application

Laravel-based OAuth/IAM service with Passport, Vue 3 frontend, and
Docker Compose setup for local and production deployment.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-26 01:02:41 +02:00
commit c2b5291a74
174 changed files with 29318 additions and 0 deletions

209
resources/js/i18n/en.ts Normal file
View File

@@ -0,0 +1,209 @@
import type { MessageSchema } from './es';
const en: MessageSchema = {
nav: {
dashboard: 'Dashboard',
clients: 'OAuth Clients',
tokens: 'Personal Access Tokens',
authorizedApps: 'Authorized Apps',
users: 'Users',
analytics: 'Analytics',
apiDocs: 'API Docs',
logout: 'Sign out',
},
common: {
loading: 'Loading…',
creating: 'Creating…',
create: 'Create',
save: 'Save',
cancel: 'Cancel',
close: 'Close',
edit: 'Edit',
delete: 'Delete',
none: '(none)',
},
login: {
title: 'Sign in',
subtitle: 'OAuth2 server — admin panel.',
email: 'Email',
password: 'Password',
submit: 'Sign in',
submitting: 'Signing in…',
noAccount: "Don't have an account?",
signUp: 'Sign up',
invalidCredentials: 'Invalid credentials.',
},
register: {
title: 'Create account',
name: 'Name',
email: 'Email',
password: 'Password',
passwordConfirm: 'Confirm password',
submit: 'Create account',
submitFirstUser: 'Create admin account',
submitting: 'Creating…',
haveAccount: 'Already have an account?',
signIn: 'Sign in',
firstUserBanner: "There are no users yet. This account will be the administrator, with immediate access (no approval needed).",
pendingTitle: 'Account created',
pendingBody: 'An administrator has to approve your account before you can sign in. You may be notified outside the app once it is ready.',
backToLogin: 'Back to sign in',
},
dashboard: {
greeting: 'Hi, {name}',
subtitle: "This is the OAuth2 server's admin panel.",
clientsTitle: 'OAuth Clients',
clientsDesc: 'Register apps (Authorization Code+PKCE, Client Credentials or Password Grant).',
tokensTitle: 'Personal Access Tokens',
tokensDesc: 'Generate tokens for direct API access, like API keys.',
appsTitle: 'Authorized Apps',
appsDesc: "Third-party apps you've granted access to your account.",
usersTitle: 'Users',
usersDesc: 'Create, edit role/status and delete accounts (admins only).',
analyticsTitle: 'Analytics',
analyticsDesc: 'Active sessions, logins by app and most active users (admins only).',
apiTitle: 'REST API',
apiDesc: 'This server exposes the {resource} resource (scopes {read}/{write}) so third-party apps can manage users via OAuth2. Requires a Passport access token. Interactive docs at {link}.',
},
clients: {
title: 'OAuth Clients',
subtitle: 'Registered apps that can request tokens from this server.',
secretWarning: "Save this client secret now, you won't be able to see it again:",
clientIdLabel: 'client_id:',
clientSecretLabel: 'client_secret:',
newClient: 'New client',
name: 'Name',
grantType: 'Grant type',
grantAuthCode: 'Authorization Code + PKCE',
grantClientCredentials: 'Client Credentials',
grantPassword: 'Password Grant',
redirectUris: 'Redirect URIs (comma-separated)',
confidentialLabel: 'Confidential client (with secret). Uncheck for a public client that only uses PKCE.',
create: 'Create client',
empty: "You haven't created any clients yet.",
revoke: 'Revoke',
revokeConfirm: 'Revoke client "{name}"? Its tokens will stop working.',
clientIdShort: 'client_id',
redirectLabel: 'redirect',
},
tokens: {
title: 'Personal Access Tokens',
subtitle: 'Direct API access tokens, without going through the authorize flow (like an API key).',
tokenWarning: "Save this token now, you won't be able to see it again:",
newToken: 'New token',
name: 'Name',
namePlaceholder: 'My script',
scopes: 'Scopes',
create: 'Create token',
empty: "You haven't created any tokens yet.",
revoke: 'Revoke',
revokeConfirm: 'Revoke token "{name}"?',
scopesLabel: 'scopes',
},
authorizedApps: {
title: 'Authorized Apps',
subtitle: "Third-party apps you've granted access to your account.",
empty: "You haven't authorized any app yet.",
revoke: 'Revoke access',
revokeConfirm: 'Revoke access for "{name}"?',
scopesLabel: 'scopes',
},
authorize: {
title: 'Authorize application',
wantsAccess: '{client} wants to access your account ({email}) with the following permissions:',
noScopes: 'No additional permissions requested (basic access).',
approve: 'Authorize',
cancel: 'Cancel',
notFoundTitle: 'Request not found',
notFoundBody: 'This screen only works when you arrive here redirected by a client application via {path}. Try again from that app.',
goDashboard: 'Go to dashboard',
},
adminUsers: {
title: 'Users',
subtitle: 'Create, edit role/status and delete accounts.',
newUser: 'New user',
name: 'Name',
email: 'Email',
password: 'Password',
role: 'Role',
roleUser: 'User',
roleAdmin: 'Admin',
create: 'Create user',
colName: 'Name',
colEmail: 'Email',
colRole: 'Role',
colStatus: 'Status',
active: 'Active',
inactive: 'Deactivated',
noRole: '(no role)',
edit: 'Edit',
delete: 'Delete',
deleteConfirm: "Delete user \"{name}\"? They'll go to the trash and can be restored.",
deleteFailed: 'Could not delete the user.',
newPassword: 'New password',
noChange: '(no change)',
save: 'Save',
cancel: 'Cancel',
appRolesTitle: 'Roles per app',
appRolesDesc: 'The global role above rules this panel. Here you set what role {name} has inside each app when that app asks for their user via API.',
noAppRoles: 'No roles assigned in any app yet.',
chooseApp: 'Choose app…',
assign: 'Assign',
assignFailed: 'Could not assign the role.',
trashTitle: 'Trash',
viewTrash: 'View trash',
viewActive: 'View active',
trashEmpty: 'No deleted users.',
deletedAt: 'Deleted on {date}',
restore: 'Restore',
restoreFailed: 'Could not restore the user.',
forceDelete: 'Delete permanently',
forceDeleteConfirm: 'Permanently delete "{name}"? This action cannot be undone.',
forceDeleteFailed: 'Could not permanently delete the user.',
pendingTitle: 'Pending',
viewPending: 'Pending',
pendingEmpty: 'No registrations pending approval.',
registeredAt: 'Registered on {date}',
approve: 'Approve',
approveFailed: 'Could not approve the user.',
reject: 'Reject',
rejectConfirm: 'Reject the registration for "{name}"? It will go to the trash and can be restored later.',
rejectFailed: 'Could not reject the registration.',
},
analytics: {
title: 'Analytics',
subtitle: 'Sessions, logins by app and user activity.',
last7: 'Last 7 days',
last30: 'Last 30 days',
last90: 'Last 90 days',
totalUsers: 'Total users',
activeSessions: 'Active sessions',
activeSessionsHint: 'valid OAuth tokens',
loginsToday: 'Logins today',
logins7d: 'Logins last 7 days',
loginsByDay: 'Logins by day',
appsOAuth: 'Apps (OAuth)',
panelAdmin: 'Admin panel',
loginsByApp: 'Logins by app',
topUsers: 'Most active users',
noAppLogins: 'No app logins in this period yet.',
noUserActivity: 'No activity in this period yet.',
recentActivity: 'Recent activity',
hide: 'Hide',
viewAll: 'View all',
colUser: 'User',
colApp: 'App',
colType: 'Type',
colIp: 'IP',
colWhen: 'When',
serviceNoUser: '(service, no user)',
deletedApp: '(deleted app)',
recentCount: '{count} recent events — click "View all" for the full table.',
chartAriaLabel: 'Logins by day, stacked by type',
tooltipAppLabel: 'Apps (OAuth):',
tooltipSessionLabel: 'Admin panel:',
barAriaLabel: '{date}: {oauth} app logins, {session} to admin panel',
},
};
export default en;