pgkiln 0.58.0 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1386,4 +1386,332 @@ export const en = {
1386
1386
  'st.saved': 'Saved.',
1387
1387
  'st.settings_saved': 'Settings saved.',
1388
1388
  'st.app_deleted': 'Application deleted.',
1389
+ // ------------------------------------------------------------ Users and identity providers (sprint 125)
1390
+ 'us.hints_none': "This app doesn't check any roles yet. Roles only matter where an authorization scheme or {fn} checks them (Shared Components → Authorization schemes).",
1391
+ 'us.hints_label': 'Roles this app checks',
1392
+ 'us.hints_add': 'Add',
1393
+ 'us.hints_app': '{app} checks',
1394
+ 'us.title': 'Users',
1395
+ 'us.providers_btn': 'Identity providers (single sign-on)',
1396
+ 'us.ldap_btn': 'LDAP directories',
1397
+ 'us.intro': "One account per person. Give accounts access to applications, with roles per application, here or under an application's {where}.",
1398
+ 'us.access_path': 'Shared Components → Access control',
1399
+ 'us.accounts': 'Accounts',
1400
+ 'us.search_ph': 'Search name, username or e-mail…',
1401
+ 'us.search_label': 'Search accounts',
1402
+ 'us.search': 'Search',
1403
+ 'us.username': 'Username',
1404
+ 'us.name': 'Name',
1405
+ 'us.apps_roles': 'Applications (roles)',
1406
+ 'us.applications': 'Applications',
1407
+ 'us.signin': 'Sign-in',
1408
+ 'us.status': 'Status',
1409
+ 'us.none': 'none',
1410
+ 'us.password': 'password',
1411
+ 'us.no_password': 'no password',
1412
+ 'us.active': 'active',
1413
+ 'us.inactive': 'inactive',
1414
+ 'us.last': 'last {at}',
1415
+ 'us.no_accounts': 'No accounts found.',
1416
+ 'us.create': 'Create account',
1417
+ 'us.username_help': 'No spaces or colons; not case-sensitive.',
1418
+ 'us.email': 'E-mail',
1419
+ 'us.password_label': 'Password',
1420
+ 'us.password_help': 'At least 8 characters. Leave empty for accounts that only sign in through single sign-on.',
1421
+ 'us.must_change': 'Require change of password on first use',
1422
+ 'us.settings': 'Account settings',
1423
+ 'us.min_length': 'Minimum password length',
1424
+ 'us.lifetime': 'Password lifetime (days)',
1425
+ 'us.lifetime_help': 'After this many days users must choose a new password at sign-in. 0 = never.',
1426
+ 'us.mixed': 'Passwords need letters and digits',
1427
+ 'us.policy_note': 'Passwords may never contain the username. Sign-in is locked for {minutes} minutes after {failures} failed attempts (Workspace utilities → Instance settings); Unlock on an account lifts it.',
1428
+ 'us.save_settings': 'Save settings',
1429
+ 'us.created': 'Account created. Now give it access to applications.',
1430
+ 'us.exists': 'An account with that username already exists.',
1431
+ 'us.settings_saved': 'Account settings saved.',
1432
+ 'us.details': 'Details',
1433
+ 'us.active_label': 'Active',
1434
+ 'us.active_help': "Inactive accounts can't sign in to any application; deactivating ends their sessions.",
1435
+ 'us.save': 'Save',
1436
+ 'us.password_title': 'Password',
1437
+ 'us.set': 'Set',
1438
+ 'us.set_on': 'Set on {date}',
1439
+ 'us.sso_only': 'No password (single sign-on only)',
1440
+ 'us.must_next': 'Must be changed at the next sign-in',
1441
+ 'us.expires': 'Expires in {n} day(s)',
1442
+ 'us.fails': '{n} failed sign-in(s) in the last hour',
1443
+ 'us.unexpire': 'Unexpire password',
1444
+ 'us.expire': 'Expire password',
1445
+ 'us.unlock': 'Unlock sign-in',
1446
+ 'us.new_password': 'New password',
1447
+ 'us.set_password_label': 'Set a password',
1448
+ 'us.ends_sessions': 'Ends the account’s sessions.',
1449
+ 'us.set_password': 'Set password',
1450
+ 'us.remove_confirm': 'Remove the password? The account can then only sign in through single sign-on.',
1451
+ 'us.remove_password': 'Remove password',
1452
+ 'us.delete_confirm': 'Delete account {user} and all its application access?',
1453
+ 'us.delete': 'Delete account',
1454
+ 'us.app_access': 'Application access',
1455
+ 'us.application': 'Application',
1456
+ 'us.roles': 'Roles',
1457
+ 'us.roles_in': 'Roles in {app}',
1458
+ 'us.roles_ph': 'no roles (e.g. {example})',
1459
+ 'us.revoke_confirm': 'Revoke access to {app}?',
1460
+ 'us.revoke': 'Revoke',
1461
+ 'us.no_access': 'No access to any application yet.',
1462
+ 'us.grant': 'Grant access',
1463
+ 'us.roles_comma': 'comma separated, or pick below',
1464
+ 'us.saved': 'Account saved.',
1465
+ 'us.pw_removed': 'Password removed.',
1466
+ 'us.pw_set': 'Password set.',
1467
+ 'us.pw_expired': 'Password expired: it must be changed at the next sign-in.',
1468
+ 'us.pw_unexpired': 'Password no longer expired.',
1469
+ 'us.unlocked': 'Sign-in unlocked.',
1470
+ 'us.deleted': 'Account deleted.',
1471
+ 'us.granted': 'Access granted.',
1472
+ 'us.roles_saved': 'Roles saved. The user gets them at the next sign-in.',
1473
+ 'us.revoked': 'Access revoked.',
1474
+ 'idp.title': 'Identity providers',
1475
+ 'idp.name': 'Name (in URLs)',
1476
+ 'idp.name_help': 'lowercase, e.g. entra, google, keycloak',
1477
+ 'idp.protocol': 'Protocol',
1478
+ 'idp.label': 'Button label',
1479
+ 'idp.label_help': 'Shown as "Sign in with …"',
1480
+ 'idp.issuer': 'Issuer (OIDC: URL; SAML: the IdP entity ID)',
1481
+ 'idp.issuer_help': 'e.g. https://login.microsoftonline.com/<tenant>/v2.0, https://keycloak.example.com/realms/acme, or for SAML the entityID of the IdP metadata',
1482
+ 'idp.client_id': "Client ID (SAML: pgkiln's entity ID)",
1483
+ 'idp.client_id_help': 'OIDC: required. SAML: empty = the metadata URL of this provider.',
1484
+ 'idp.sso_url': 'SAML: IdP sign-in URL',
1485
+ 'idp.sso_url_help': 'The SingleSignOnService location (HTTP-Redirect binding) from the IdP metadata.',
1486
+ 'idp.cert': 'SAML: IdP signing certificate (PEM)',
1487
+ 'idp.cert_help': 'From the IdP metadata (X509Certificate, wrapped in BEGIN/END CERTIFICATE lines). Assertions must be signed with it.',
1488
+ 'idp.secret': 'Client secret',
1489
+ 'idp.secret_kept': 'A secret is stored. Leave empty to keep it.',
1490
+ 'idp.secret_public': 'Leave empty for a public client (PKCE only).',
1491
+ 'idp.scopes': 'Scopes',
1492
+ 'idp.username_claim': 'Username claim',
1493
+ 'idp.username_claim_help': 'Use a claim users cannot change themselves (e.g. preferred_username, upn, email). SAML: an attribute name, or nameID.',
1494
+ 'idp.groups_claim': 'Groups claim',
1495
+ 'idp.groups_claim_help': 'Dot paths work, e.g. realm_access.roles',
1496
+ 'idp.auto_create': 'Create accounts automatically on first sign-in',
1497
+ 'idp.auto_create_help': 'Otherwise only people with an account linked to this provider (or allowed below) can sign in.',
1498
+ 'idp.link': 'Link existing accounts with the same username on their first sign-in',
1499
+ 'idp.link_help': "Only when users can't choose the username claim themselves at this provider: otherwise someone could register the name of an existing account and take it over. With the e-mail claim, only verified addresses link. Turn it off once the accounts are linked.",
1500
+ 'idp.enabled': 'Enabled',
1501
+ 'idp.remove_secret': 'Remove the stored client secret',
1502
+ 'idp.add': 'Add provider',
1503
+ 'idp.intro': 'OpenID Connect providers for single sign-on (Microsoft Entra ID, Google, Okta, Keycloak, Auth0, …). Register pgkiln at the provider as a web application with the redirect URI shown, then enable the provider per application under {where}.',
1504
+ 'idp.where': 'Settings → Sign-in methods',
1505
+ 'idp.providers': 'Providers',
1506
+ 'idp.provider': 'Provider',
1507
+ 'idp.issuer_col': 'Issuer',
1508
+ 'idp.used_by': 'Used by',
1509
+ 'idp.linked': 'Linked accounts',
1510
+ 'idp.no_apps': 'no apps',
1511
+ 'idp.enabled_s': 'enabled',
1512
+ 'idp.disabled_s': 'disabled',
1513
+ 'idp.auto_s': 'auto-create',
1514
+ 'idp.links_s': 'links existing accounts',
1515
+ 'idp.none': 'No identity providers yet.',
1516
+ 'idp.settings': 'Settings',
1517
+ 'idp.delete_confirm': 'Delete {name}? Linked identities are removed; accounts stay.',
1518
+ 'idp.delete': 'Delete provider',
1519
+ 'idp.register_idp': 'Register at the identity provider',
1520
+ 'idp.sp_metadata': 'Service provider metadata (import it at the IdP):',
1521
+ 'idp.by_hand': 'Or by hand: entity ID {entity}, assertion consumer service (HTTP-POST) {acs}.',
1522
+ 'idp.saml_note': 'Based on {env}. Sign the assertions; send the groups in the {claim} attribute to map them to roles.',
1523
+ 'idp.register': 'Register at the provider',
1524
+ 'idp.redirect': 'Redirect URI (callback):',
1525
+ 'idp.public_url': 'Based on {env}; set it to the address users see (e.g. https://apps.example.com).',
1526
+ 'idp.grant': 'Grant type: {type} with PKCE. Scopes: {scopes}. Include a {claim} claim in the ID token to map groups to roles.',
1527
+ 'idp.auth_code': 'authorization code',
1528
+ 'idp.test': 'Test discovery',
1529
+ 'idp.added': 'Provider added. Register the redirect URI at the provider, then test the connection.',
1530
+ 'idp.saved': 'Provider saved.',
1531
+ 'idp.works': 'Discovery works. Authorization endpoint: {url}',
1532
+ 'idp.failed': 'Discovery failed: {error}',
1533
+ 'idp.deleted': 'Provider deleted.',
1534
+ // ------------------------------------------------------------ Workspaces (sprint 125)
1535
+ 'wsp.title': 'Workspaces',
1536
+ 'wsp.admins_only': 'Only administrators manage workspaces.',
1537
+ 'wsp.err.exists': 'A workspace with this name exists already.',
1538
+ 'wsp.err.name_check': 'The name is 1 to 60 characters, without spaces at the start or end.',
1539
+ 'wsp.err.name': 'The name is 1 to 60 characters.',
1540
+ 'wsp.iso.secret': "set PGKILN_SECRET_KEY (at least 32 characters) in the server's environment: the workspace's database logins get passwords derived from it.",
1541
+ 'wsp.iso.runtime': 'set RUNTIME_DATABASE_URL: applications run on the owner connection, so no workspace can be isolated.',
1542
+ 'wsp.err.role_taken': 'this role belongs to another workspace already.',
1543
+ 'wsp.err.role_has': 'the workspace has this role already.',
1544
+ 'wsp.isolated_tag': 'isolated',
1545
+ 'wsp.iso.on': "Its applications run as {run} and its developers' SQL (SQL Workshop, code checks, the Advisor) as {dev}. Both reach only the roles below, and see only this workspace's applications, sessions and accounts in pgkiln's own tables. Developers who also belong to a shared workspace keep that workspace's rights there.",
1546
+ 'wsp.db_role': 'Database role',
1547
+ 'wsp.used_by': 'Used by',
1548
+ 'wsp.missing': 'missing',
1549
+ 'wsp.no_app': 'no application',
1550
+ 'wsp.remove': 'Remove',
1551
+ 'wsp.no_roles': "No database roles: applications here can't run as a role of their own.",
1552
+ 'wsp.add_role': 'Add a database role',
1553
+ 'wsp.add_role_help': "An existing role (not a superuser, not one that creates roles or bypasses row-level security). Its rights become this workspace's; it can't belong to another workspace.",
1554
+ 'wsp.add_role_btn': 'Add role',
1555
+ 'wsp.make_shared_confirm': "Make {name} shared again? Its applications then run on the shared runtime connection, and its developers' SQL as the owner.",
1556
+ 'wsp.make_shared': 'Make shared',
1557
+ 'wsp.shared_text': "Shared: the applications run on the shared runtime connection and the developers' SQL as the owner, like every shared workspace's.",
1558
+ 'wsp.iso_help': "Isolating gives the workspace two database logins of its own and the database roles its applications use now. Application code then reaches only those roles and this workspace's applications; its developers' SQL Workshop runs on the workspace's login instead of the owner. New applications get a new role and schema of their own.",
1559
+ 'wsp.to_isolate': 'To isolate a workspace, {problem}',
1560
+ 'wsp.isolate_confirm': 'Isolate {name}?',
1561
+ 'wsp.isolate': 'Isolate this workspace',
1562
+ 'wsp.isolation': 'Isolation',
1563
+ 'wsp.service': 'Manage service',
1564
+ 'wsp.message': 'Workspace message',
1565
+ 'wsp.message_help': "Shown to this workspace's developers on the App Builder home, e.g. a maintenance window. Plain text.",
1566
+ 'wsp.banner': 'Environment banner',
1567
+ 'wsp.banner_help': 'A short label shown at the top of every builder page while this workspace is current. Empty: no banner.',
1568
+ 'wsp.banner_colour': 'Banner colour',
1569
+ 'wsp.save': 'Save',
1570
+ 'wsp.prefs': 'Workspace preferences',
1571
+ 'wsp.sql_on': 'Enable the SQL Workshop',
1572
+ 'wsp.sql_on_help': 'Off: the SQL Worksheet, the Object Browser, SQL scripts, data loading and unloading, Quick SQL, the query builder, DDL, Compare and AI are refused while this workspace is current, for every developer.',
1573
+ 'wsp.rest_on': 'Enable RESTful services',
1574
+ 'wsp.rest_on_help': "Off: the REST modules of this workspace's applications answer 404 (Not found) at {path}; they can still be edited.",
1575
+ 'wsp.builder_home': 'Builder links open',
1576
+ 'wsp.home.apps': 'App Builder',
1577
+ 'wsp.home.home': 'Workspace home',
1578
+ 'wsp.builder_home_help': 'Where a link to /builder (a bookmark from before the Workspace home) leads in this workspace. Signing in always opens the Workspace home; the App Builder is at /builder/apps.',
1579
+ 'wsp.save_prefs': 'Save preferences',
1580
+ 'wsp.links': 'Extension links',
1581
+ 'wsp.links_help': "Links to other tools this workspace's developers use (monitoring, a wiki, a ticket system), in the builder's {menu} menu while the workspace is current. They open in a new tab.",
1582
+ 'wsp.extensions': 'Extensions',
1583
+ 'wsp.label': 'Label',
1584
+ 'wsp.url': 'URL',
1585
+ 'wsp.order': 'Order',
1586
+ 'wsp.delete_link_confirm': 'Delete the link {label}?',
1587
+ 'wsp.delete': 'Delete',
1588
+ 'wsp.no_links': 'No extension links.',
1589
+ 'wsp.label_ph': 'Monitoring',
1590
+ 'wsp.description': 'Description',
1591
+ 'wsp.add_link': 'Add link',
1592
+ 'wsp.switched': 'Workspace {name}.',
1593
+ 'wsp.intro': "A workspace groups applications and the developers who build them. Developers see and change the applications of their own workspaces; administrators see all of them. A shared workspace is not a security boundary between developers who write SQL: its SQL Workshop and application code run with this installation's rights. An {isolated} workspace is: its applications and SQL run on database logins of its own that reach only its database roles and its own applications.",
1594
+ 'wsp.isolated_word': 'isolated',
1595
+ 'wsp.workspace': 'Workspace',
1596
+ 'wsp.applications': 'Applications',
1597
+ 'wsp.developers': 'Developers',
1598
+ 'wsp.admins_text': 'administrators only',
1599
+ 'wsp.add': 'Add workspace',
1600
+ 'wsp.name': 'Name',
1601
+ 'wsp.name_help': 'For example the team or department that builds its applications here.',
1602
+ 'wsp.first_dev': 'You become its first developer; add others on its page.',
1603
+ 'wsp.added': 'Workspace {name} added.',
1604
+ 'wsp.settings': 'Settings',
1605
+ 'wsp.default_no_delete': "The Default workspace can't be deleted: imported applications and applications made with the command line start here.",
1606
+ 'wsp.delete_confirm': 'Delete workspace {name}?',
1607
+ 'wsp.delete_ws': 'Delete workspace',
1608
+ 'wsp.move_first': 'Move its applications to another workspace first.',
1609
+ 'wsp.devs_help': 'Developers of this workspace see and change its applications. Administrators see every workspace.',
1610
+ 'wsp.administrator': '(administrator)',
1611
+ 'wsp.ws_admins': 'Workspace administrators',
1612
+ 'wsp.ws_admins_help': "They manage this workspace's name and developers. Isolation, database roles, moving applications and deleting the workspace stay with administrators.",
1613
+ 'wsp.save_devs': 'Save developers',
1614
+ 'wsp.mail_net': 'Mail and network access',
1615
+ 'wsp.mail_net_text': "This workspace's own {mail} for its applications without one of their own, its {network} list (which hosts its applications may call, within the installation's list), and the {queue}.",
1616
+ 'wsp.mail_service': 'mail service',
1617
+ 'wsp.network': 'network access',
1618
+ 'wsp.queue': 'mail queue',
1619
+ 'wsp.iso_short_on': 'Isolated: its applications and SQL run on database logins of its own.',
1620
+ 'wsp.iso_short_off': 'Shared.',
1621
+ 'wsp.admins_change': 'Administrators change it.',
1622
+ 'wsp.application': 'Application',
1623
+ 'wsp.move_to': 'Move to',
1624
+ 'wsp.move_label': 'Move {app} to',
1625
+ 'wsp.move': 'Move',
1626
+ 'wsp.no_other': 'no other workspace',
1627
+ 'wsp.no_apps': 'No applications.',
1628
+ 'wsp.saved': 'Workspace saved.',
1629
+ 'wsp.not_found': 'Not found.',
1630
+ 'wsp.devs_saved': 'Developers saved.',
1631
+ 'wsp.not_moved': 'Not moved: {why}',
1632
+ 'wsp.moved': 'Application moved to {name}.',
1633
+ 'wsp.err.default': 'The Default workspace cannot be deleted.',
1634
+ 'wsp.err.isolated': 'Make the workspace shared (not isolated) before deleting it.',
1635
+ 'wsp.err.has_apps': 'Move the applications of this workspace to another workspace first.',
1636
+ 'wsp.deleted': 'Workspace {name} deleted.',
1637
+ 'wsp.isolated_now': 'The workspace is isolated: its applications and SQL now run on its own database logins.',
1638
+ 'wsp.shared_now': 'The workspace is shared again: its applications run on the shared runtime connection.',
1639
+ 'wsp.not_isolated': 'Not isolated: {why}',
1640
+ 'wsp.not_changed': 'Not changed: {why}',
1641
+ 'wsp.err.role_name': 'A role name is a letter or _ followed by letters, digits, _ or $ (at most 63).',
1642
+ 'wsp.err.no_role': 'There is no database role {role}.',
1643
+ 'wsp.err.role_used_one': '{apps} runs as {role}: give it another role first.',
1644
+ 'wsp.err.role_used': '{apps} run as {role}: give them another role first.',
1645
+ 'wsp.role_removed': 'Role {role} removed.',
1646
+ 'wsp.role_added': 'Role {role} added.',
1647
+ 'wsp.not_saved': 'Not saved: {why}',
1648
+ 'wsp.err.message': 'The message is at most 2000 characters.',
1649
+ 'wsp.err.banner': 'The banner label is at most 40 characters.',
1650
+ 'wsp.service_saved': 'Message and banner saved.',
1651
+ 'wsp.prefs_saved': 'Preferences saved.',
1652
+ 'wsp.err.label': 'The label is 1 to 60 characters.',
1653
+ 'wsp.err.url': 'The URL starts with http:// or https://.',
1654
+ 'wsp.err.description': 'The description is at most 500 characters.',
1655
+ 'wsp.err.order': 'The order is a whole number.',
1656
+ 'wsp.link_added': 'Link {label} added.',
1657
+ 'wsp.link_exists': 'There is a link {label} already.',
1658
+ 'wsp.link_not_saved': 'The link was not saved.',
1659
+ 'wsp.link_deleted': 'Link deleted.',
1660
+ 'wsp.util_title': 'Workspace utilization: {name}',
1661
+ 'wsp.pages': 'Pages',
1662
+ 'wsp.views30': 'Page views (30 days)',
1663
+ 'wsp.scripts': 'SQL scripts',
1664
+ 'wsp.regions': 'Regions',
1665
+ 'wsp.items': 'Items',
1666
+ 'wsp.users30': 'Users (30 days)',
1667
+ 'wsp.static': 'Static files',
1668
+ 'wsp.views': 'Page views',
1669
+ 'wsp.users': 'Users',
1670
+ 'wsp.schemas': 'Schemas',
1671
+ 'wsp.schemas_help': "The schemas the workspace's database roles may use, with the storage of their tables, indexes and TOAST data.",
1672
+ 'wsp.schema': 'Schema',
1673
+ 'wsp.owner': 'Owner',
1674
+ 'wsp.tables': 'Tables',
1675
+ 'wsp.storage': 'Storage',
1676
+ 'wsp.no_schemas': "No schemas: the workspace's applications have no database role of their own.",
1677
+ 'wsp.utilization': 'Utilization',
1678
+ 'wsp.util_crumb': 'Utilization: {name}',
1679
+ // ------------------------------------------------------------ Developers (sprint 125)
1680
+ 'dev.title': 'Developers',
1681
+ 'dev.change_pw': 'Change your password',
1682
+ 'dev.current': 'Current password',
1683
+ 'dev.new': 'New password',
1684
+ 'dev.min8': 'At least 8 characters.',
1685
+ 'dev.change_btn': 'Change password',
1686
+ 'dev.your_email': 'Your e-mail address',
1687
+ 'dev.email': 'E-mail address',
1688
+ 'dev.email_help': '"Find my workspace" on the sign-in page sends your workspaces to it. Empty: none.',
1689
+ 'dev.save': 'Save',
1690
+ 'dev.accounts': 'Developer accounts',
1691
+ 'dev.accounts_help': "Administrators add and remove developers and can break other developers' page and application locks.",
1692
+ 'dev.username': 'Username',
1693
+ 'dev.role': 'Role',
1694
+ 'dev.email_col': 'E-mail',
1695
+ 'dev.you': '(you)',
1696
+ 'dev.administrator': 'Administrator',
1697
+ 'dev.developer': 'Developer',
1698
+ 'dev.email_of': 'E-mail address of {user}',
1699
+ 'dev.none': 'none',
1700
+ 'dev.make_dev': 'Make developer',
1701
+ 'dev.make_admin': 'Make administrator',
1702
+ 'dev.remove_confirm': 'Remove developer {user}?',
1703
+ 'dev.remove': 'Remove',
1704
+ 'dev.add': 'Add developer',
1705
+ 'dev.password': 'Password',
1706
+ 'dev.optional_email': 'Optional: for "Find my workspace".',
1707
+ 'dev.admins_only': 'Only administrators add and remove developers.',
1708
+ 'dev.err.email': 'The e-mail address is not valid.',
1709
+ 'dev.added_ws': 'Developer added to workspace {name}.',
1710
+ 'dev.added': 'Developer added.',
1711
+ 'dev.err.current': 'The current password is not correct.',
1712
+ 'dev.pw_changed': 'Password changed.',
1713
+ 'dev.email_saved': 'E-mail address saved.',
1714
+ 'dev.not_found': 'Not found.',
1715
+ 'dev.role_changed': 'Role changed.',
1716
+ 'dev.removed': 'Developer removed.',
1389
1717
  } as const;