Skip to content

Commit

Permalink
consent: add field for handled at to consent request type and database
Browse files Browse the repository at this point in the history
References: ory#1684

Co-authored-by: Marco Hutzsch <[email protected]>
  • Loading branch information
Dennis Pattmann and marcohutzsch1234 committed Jan 15, 2020
1 parent fc16ab9 commit 54dfc08
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 0 deletions.
1 change: 1 addition & 0 deletions consent/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,7 @@ func (h *Handler) AcceptConsentRequest(w http.ResponseWriter, r *http.Request, p

p.Challenge = challenge
p.RequestedAt = cr.RequestedAt
p.HandledAt = time.Now()

hr, err := h.r.ConsentManager().HandleConsentRequest(r.Context(), challenge, &p)
if err != nil {
Expand Down
7 changes: 7 additions & 0 deletions consent/migrations/sql/shared/14.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- +migrate Up
ALTER TABLE hydra_oauth2_consent_request ADD handled_at timestamp NULL;
ALTER TABLE hydra_oauth2_consent_request_handled ADD handled_at timestamp NULL;

-- +migrate Down
ALTER TABLE hydra_oauth2_consent_request DROP COLUMN handled_at;
ALTER TABLE hydra_oauth2_consent_request_handled DROP COLUMN handled_at;
46 changes: 46 additions & 0 deletions consent/migrations/sql/tests/14_test.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
-- +migrate Up
INSERT INTO hydra_client (id, allowed_cors_origins, client_name, client_secret, redirect_uris, grant_types, response_types, scope, owner, policy_uri, tos_uri, client_uri, logo_uri, contacts, client_secret_expires_at, sector_identifier_uri, jwks, jwks_uri, token_endpoint_auth_method, request_uris, request_object_signing_alg, userinfo_signed_response_alg, subject_type, audience, frontchannel_logout_uri, frontchannel_logout_session_required, post_logout_redirect_uris, backchannel_logout_uri, backchannel_logout_session_required, metadata)
VALUES
('14-client', 'http://localhost|http://google', 'some-client', 'abcdef', 'http://localhost|http://google', 'authorize_code|implicit', 'token|id_token', 'foo|bar', 'aeneas', 'http://policy', 'http://tos', 'http://client', 'http://logo', 'aeneas|foo', 0, 'http://sector', '{"keys": []}', 'http://jwks', 'none', 'http://uri1|http://uri2', 'rs256', 'rs526', 'public', 'https://www.ory.sh/api', 'http://fc-logout/', true, 'http://redir1/|http://redir2/', 'http://bc-logout/', true, '{"foo":"bar"}');

INSERT INTO
hydra_oauth2_authentication_session (id, authenticated_at, subject, remember)
VALUES
('14-login-session-id', NOW(), '14-sub', true);

INSERT INTO
hydra_oauth2_authentication_request (challenge, verifier, client_id, subject, request_url, skip, requested_scope, csrf, authenticated_at, requested_at, oidc_context, login_session_id, requested_at_audience)
VALUES
('14-challenge', '14-verifier', '14-client', '14-subject', '14-redirect', false, '14-scope', '14-csrf', NOW(), NOW(), '{}', '14-login-session-id', '14-aud');

INSERT INTO
hydra_oauth2_consent_request (challenge, verifier, client_id, subject, request_url, skip, requested_scope, csrf, authenticated_at, requested_at, oidc_context, forced_subject_identifier, login_session_id, login_challenge, requested_at_audience, acr, context, handled_at)
VALUES
('14-challenge', '14-verifier', '14-client', '14-subject', '14-redirect', false, '14-scope', '14-csrf', NOW(), NOW(), '{}', '14-forced-sub', '14-login-session-id', '14-challenge', '14-aud', '14-acr', '{"foo":"bar"}', NOW());

INSERT INTO
hydra_oauth2_consent_request_handled (challenge, granted_scope, remember, remember_for, error, requested_at, session_access_token, session_id_token, authenticated_at, was_used, granted_at_audience, handled_at)
VALUES
('14-challenge', '14-scope', true, 3600, '{}', NOW(), '{}', '{}', NOW(), false, '14-aud', NOW());

INSERT INTO
hydra_oauth2_authentication_request_handled (challenge, subject, remember, remember_for, error, acr, requested_at, authenticated_at, was_used, forced_subject_identifier, context)
VALUES
('14-challenge', '14-sub', true, 3600, '{}', '1', NOW(), NOW(), false, '14-forced-sub', '{"foo":"bar"}');

INSERT INTO
hydra_oauth2_obfuscated_authentication_session (subject, client_id, subject_obfuscated)
VALUES
('14-sub', '14-client', '14-obfuscated');

INSERT INTO
hydra_oauth2_logout_request (challenge, verifier, subject, sid, client_id, request_url, redir_url, was_used, accepted, rejected, rp_initiated)
VALUES
('14-challenge', '14-verifier', '14-subject', '14-session-id', '14-client', 'https://request-url/', 'https://redirect-url', false, false, false, false);

INSERT INTO
hydra_oauth2_logout_request (challenge, verifier, subject, sid, client_id, request_url, redir_url, was_used, accepted, rejected, rp_initiated)
VALUES
('14-1-challenge', '14-1-verifier', '14-1-subject', '14-1-session-id', NULL, 'https://request-url/', 'https://redirect-url', false, false, false, false);

-- +migrate Down
3 changes: 3 additions & 0 deletions consent/sql_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ type sqlAuthenticationRequest struct {
LoginSessionID sql.NullString `db:"login_session_id"`
Context string `db:"context"`
WasHandled bool `db:"was_handled"`
HandledAt *time.Time `db:"handled_at"`
}

type sqlConsentRequest struct {
Expand Down Expand Up @@ -354,6 +355,7 @@ func (s *sqlConsentRequest) toConsentRequest(client *client.Client) (*ConsentReq
LoginChallenge: s.LoginChallenge.String,
Context: context,
ACR: s.ACR,
HandledAt: fromMySQLDateHack(s.HandledAt),
}, nil
}

Expand All @@ -369,6 +371,7 @@ type sqlHandledConsentRequest struct {
RequestedAt time.Time `db:"requested_at"`
WasUsed bool `db:"was_used"`
AuthenticatedAt *time.Time `db:"authenticated_at"`
HandledAt *time.Time `db:"handled_at"`
}

func newSQLHandledConsentRequest(c *HandledConsentRequest) (*sqlHandledConsentRequest, error) {
Expand Down
7 changes: 7 additions & 0 deletions consent/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ type HandledConsentRequest struct {
// authorization will be remembered indefinitely.
RememberFor int `json:"remember_for"`

// HandledAt contains the timestamp the consent request was handled.
HandledAt time.Time `json:"handled_at,omitempty"`

ConsentRequest *ConsentRequest `json:"-"`
Error *RequestDeniedError `json:"-"`
Challenge string `json:"-"`
Expand Down Expand Up @@ -125,6 +128,7 @@ type PreviousConsentSession struct {
// authorization will be remembered indefinitely.
RememberFor int `json:"remember_for"`

HandledAt time.Time `json:"-"`
ConsentRequest *ConsentRequest `json:"consent_request"`
Error *RequestDeniedError `json:"-"`
Challenge string `json:"-"`
Expand Down Expand Up @@ -367,6 +371,9 @@ type ConsentRequest struct {
// Context contains arbitrary information set by the login endpoint or is empty if not set.
Context map[string]interface{} `json:"context,omitempty"`

// HandledAt contains the timestamp the consent request was handled.
HandledAt time.Time `json:"handled_at,omitempty"`

// ForceSubjectIdentifier is the value from authentication (if set).
ForceSubjectIdentifier string `json:"-"`
SubjectIdentifier string `json:"-"`
Expand Down

0 comments on commit 54dfc08

Please sign in to comment.