Jenny_
CODE GENERATION HUB
Sign in
Enter the access token you were issued.
{{ tokErrMsg }}
Token sign-in is limited to approved networks.
{{ maintTitle }}
{{ maintBody }}
Service paused by the operator
Choose your password
Your account was set up with a temporary password. Pick your own to continue. At least 10 characters.
Jenny
Generate a code
{{ extCountText }}
Welcome, {{ extOrg }}. Each successful generation uses one token.
or paste
{{ checkingLabel }}
Serial {{ dupSerial }} already has an active code: {{ dupCode }} · expires {{ dupExp }}. Using it costs nothing.
Code issued
{{ c.ch }}
Give this code to the device.
Jenny
{{ roleLabel }}
{{ userInit }}
Site disabled for everyone except you.
Generate a code
{{ genSub }}
Enter ↵ also generates
{{ checkingLabel }}
Serial {{ dupSerial }} already has an active code: {{ dupCode }} · expires {{ dupExp }}. Reusing it avoids a duplicate in the log.
Code issued
QR scanned
{{ c.ch }}
{{ resMeta }}
This device's recent codes
{{ row.code }} {{ row.user }} · {{ row.when }} {{ row.label }}
Your recent codes
{{ row.code }} {{ row.serial }} · {{ row.when }} {{ row.label }}
My codes
Every code issued and every attempt refused. {{ tzNote }}
Nothing here yet
Codes you generate appear here.
Code Serial Generated Expiry
{{ row.codeText }} {{ row.serial }} {{ row.when }}
{{ row.label }}
Generation log
Every code and blocked attempt, by user, serial and time. {{ tzNote }}
User Serial Code Contract Time Status
{{ row.user }}{{ row.role }}
{{ row.serial }} {{ row.codeText }} {{ row.contract }} {{ row.when }}
{{ row.label }}
No entries match.
Showing {{ logShown }} of {{ logTotal }} entries
Users
{{ uName }} {{ uRole }}
{{ uTotal }}
codes
{{ uActive }}
active
{{ uExpired }}
expired
{{ uBlocked }}
blocked
{{ uCapLine }}
Code Serial Time Status
{{ row.codeText }} {{ row.serial }} {{ row.when }}
{{ row.label }}
Access & tokens
Partner tokens and staff sign-ins. Changes take effect on the person's next action.
Partner tokens
External customers sign in by pasting a token. The full token is shown once, when you create it.
No partner tokens yet.
{{ k.org }}{{ k.state }}
{{ k.id }}{{ k.expiryNote }}
Local sign-ins
Username and password accounts, both admins and staff.
Setting a new temporary password for {{ usrEditId }}
{{ u2.name }}{{ u2.roleLabel }}Temp password
{{ u2.username }}
Salesforce connector
Serials are matched to Salesforce Assets. The contract type decides eligibility.
{{ connTitle }}{{ connSub }}
Org
{{ stSfOrg }}
Org ID
{{ stSfOrgId }}
Integration user
{{ stSfUser }}
Auth
{{ stSfAuth }}
Consumer key
{{ stSfKey }}
API budget
{{ stSfApi }}
Assets synced
{{ stSfAssets }}
Sync schedule
Jenny has its own connected app in the org, same pattern as CPQ and OIQ. OAuth 2.0 client credentials flow, run as an API-only integration user with read access to Asset serial and contract fields only. The consumer secret lives server-side and rotates here; nothing is entered or stored in this UI.
Contract types that allow a code
Read from Asset.Contract_Type__c. Engineers are held to this list. Admins can override, and every override is recorded in the log.
{{ sfEligible }}
Changing this list is a server setting.
Test lookup
What Salesforce returns for a serial.
Site controls
Visible to this account only.
Site access
Disable Jenny for everyone except you. Sessions end immediately.
Limits
Set on the server. They stop one account pulling codes in bulk.
Different devices per person, per day{{ limSerials }} Repeat codes for one device, per week{{ limPerSerial }} Total codes per person, per day{{ limTotal }} Sign-in lasts{{ limSession }} Contract rule enforced for{{ limEnforced }}
Network allowlist
{{ ipStatus }}
Sign-ins from addresses outside this list are refused.
Audit trail
Every admin and system action, newest first. Cannot be edited or deleted.
Nothing yet.
{{ a.when }} {{ a.action }} {{ a.actor }}
This account
Only master can change the master account or disable the site.
Sign-in
Scan the device QR
{{ qrHint }}