<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cccms/app/controllers/otp_challenges_controller.rb, branch master</title>
<subtitle>[no description]</subtitle>
<id>http://erdgeist.org/gitweb/cccms/atom?h=master</id>
<link rel='self' href='http://erdgeist.org/gitweb/cccms/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/'/>
<updated>2026-08-02T21:55:38Z</updated>
<entry>
<title>Log user logins and reconstruct last activity from logs</title>
<updated>2026-08-02T21:55:38Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-02T21:55:38Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=c63c4620d1c659712cec93e354e84f5017bd6254'/>
<id>urn:sha1:c63c4620d1c659712cec93e354e84f5017bd6254</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Show and extend the elevation window</title>
<updated>2026-08-01T00:39:59Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-08-01T00:39:59Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=6df48c1413a14516e7ee8919f33fbc13f0141966'/>
<id>urn:sha1:6df48c1413a14516e7ee8919f33fbc13f0141966</id>
<content type='text'>
A banner appears while elevated, counting down in minutes and carrying
extend and drop controls. Three extensions of 30 minutes are allowed, so
the window is at most two hours without a fresh code; a code resets the
budget. The countdown is advisory, the server-side check authoritative, so
it says "expired" rather than vanishing.

The post-login flash tells an admin the timer has started.
</content>
</entry>
<entry>
<title>Require a fresh second factor for user management</title>
<updated>2026-07-31T23:10:35Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-31T23:10:35Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=f6c1f0f08f031778a491465d35ac694bfcdc12b0'/>
<id>urn:sha1:f6c1f0f08f031778a491465d35ac694bfcdc12b0</id>
<content type='text'>
Administrative actions are gated behind a 30-minute elevation window:
creating and retiring accounts, editing roles, clearing a second factor.
Reading the list is not gated, and content work is untouched.

elevated? is tied to is_admin?, so losing the role closes the window at
once. The window opens when the second factor verifies at login, so an
admin heading straight for user management is already elevated, and closes
on logout with the other session state. Five wrong codes end the session,
mirroring the login challenge.

users#update carries no elevation filter, since self-service reaches it;
the role field is gated in user_params instead and fails closed.
</content>
</entry>
<entry>
<title>Extract flashes to i18n and stop dispatching on submit labels</title>
<updated>2026-07-25T01:51:44Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-25T01:51:44Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=baace1fa5df46694ddd515dc3bbca59b22df8692'/>
<id>urn:sha1:baace1fa5df46694ddd515dc3bbca59b22df8692</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Give all sessions a uniform absolute lifetime of one week</title>
<updated>2026-07-24T15:20:41Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-24T15:20:41Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=d5883869e97244335370d54e21ef46b3f1885899'/>
<id>urn:sha1:d5883869e97244335370d54e21ef46b3f1885899</id>
<content type='text'>
Enforced at restore via a login-time stamp, written only at genuine
logins so the limit stays absolute rather than sliding. The cookie
name rotation logs everyone out once at deploy. Second-factor users
are deliberately not treated worse than password-only ones.
</content>
</entry>
<entry>
<title>Complete the login only after the second factor</title>
<updated>2026-07-24T11:53:13Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-07-24T11:53:13Z</published>
<link rel='alternate' type='text/html' href='http://erdgeist.org/gitweb/cccms/commit/?id=dcb576618b868b888a5b1b31e35491f300ce4050'/>
<id>urn:sha1:dcb576618b868b888a5b1b31e35491f300ce4050</id>
<content type='text'>
Enrolled users get a pending marker instead of a session after the
password step; a valid code through the challenge writes the real
session via reset_session. otp_required without enrollment funnels
into setup everywhere except the enrollment, user, and login
machinery.
</content>
</entry>
</feed>
