From 557c967cdc5f834d27725a8b6d2e0615654c0ff6 Mon Sep 17 00:00:00 2001 From: Kurt Nordstrom Date: Thu, 11 Dec 2025 08:44:38 -0500 Subject: [PATCH 1/4] Add a protected field 'apiKey' and test access to it --- api.yaml | 6 ++ api/directory.gen.go | 72 ++++++++++--------- api/entries.go | 10 ++- db/db.go | 2 +- db/models.go | 3 +- db/query.sql.go | 33 ++++++--- query.sql | 7 +- .../entries-limit-1-offset-1.get.res.json | 1 + test/apifixtures/entries-limit-2.get.res.json | 1 + test/apifixtures/entries.get.res.json | 1 + test/dbfixtures/entries.yml | 3 +- test/entries_test.go | 8 +++ 12 files changed, 95 insertions(+), 52 deletions(-) diff --git a/api.yaml b/api.yaml index 0212478..98bdef3 100644 --- a/api.yaml +++ b/api.yaml @@ -528,6 +528,9 @@ components: description: Addresses associated with this entry items: $ref: '#/components/schemas/Address' + apiKey: + type: string + description: Secret API key EntryPatch: type: object properties: @@ -546,6 +549,9 @@ components: type: string nullable: true minLength: 6 + apiKey: + type: string + nullable: true symbols: type: array nullable: true diff --git a/api/directory.gen.go b/api/directory.gen.go index 8ef7b48..fe7d0b0 100644 --- a/api/directory.gen.go +++ b/api/directory.gen.go @@ -2,7 +2,7 @@ // Package api provides primitives to interact with the openapi HTTP API. // -// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.4.1 DO NOT EDIT. +// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.1 DO NOT EDIT. package api import ( @@ -168,6 +168,9 @@ type Entry struct { // Addresses Addresses associated with this entry Addresses *[]Address `json:"addresses,omitempty"` + // ApiKey Secret API key + ApiKey *string `json:"apiKey,omitempty"` + // ContactName Name of contact person ContactName *string `json:"contactName,omitempty"` @@ -193,6 +196,7 @@ type Entry struct { // EntryPatch defines model for EntryPatch. type EntryPatch struct { Addresses nullable.Nullable[[]AddressPatch] `json:"addresses,omitempty"` + ApiKey nullable.Nullable[string] `json:"apiKey,omitempty"` ContactName nullable.Nullable[string] `json:"contactName,omitempty"` Description nullable.Nullable[string] `json:"description,omitempty"` Email nullable.Nullable[string] `json:"email,omitempty"` @@ -1645,39 +1649,39 @@ func (sh *strictHandler) UpdateEntry(w http.ResponseWriter, r *http.Request, key // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "AP//Mvbv60QyAAA=", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/entries.go b/api/entries.go index 967891d..f1b3bf0 100644 --- a/api/entries.go +++ b/api/entries.go @@ -36,13 +36,14 @@ func scanEntryRow(rows pgx.Rows) (Entry, int, error) { description *string contactName *string email *string + apiKey *string symbolsJSON [][]byte endpointsJSON [][]byte addressesJSON [][]byte totalCount int ) - if err := rows.Scan(&id, &name, &description, &contactName, &email, &symbolsJSON, &endpointsJSON, &addressesJSON, &totalCount); err != nil { + if err := rows.Scan(&id, &name, &description, &contactName, &email, &apiKey, &symbolsJSON, &endpointsJSON, &addressesJSON, &totalCount); err != nil { return Entry{}, 0, err } @@ -83,6 +84,7 @@ func scanEntryRow(rows pgx.Rows) (Entry, int, error) { Description: description, ContactName: contactName, Email: email, + ApiKey: apiKey, Symbols: symbolsPtr, Endpoints: endpointsPtr, Addresses: addressesPtr, @@ -121,6 +123,7 @@ func buildEntrySQL(whereClause string) string { e.description, e.contact_name, e.email, + e.api_key, ARRAY(SELECT row_to_json(s) FROM symbols s WHERE s.owner = e.id ORDER BY s.id) as symbols, ARRAY(SELECT row_to_json(ep) FROM service_endpoints ep WHERE ep.entry = e.id ORDER BY ep.id) as endpoints, ARRAY( @@ -309,7 +312,9 @@ func (a ApiImpl) GetEntry(ctx context.Context, request GetEntryRequestObject) (G } func sanitizeEntry(entry *Entry) { - //do nada til we have some specifically sensitive fields + if entry.ApiKey != nil { + *entry.ApiKey = "" + } } func (a ApiImpl) AddEntry(ctx context.Context, request AddEntryRequestObject) (AddEntryResponseObject, error) { @@ -333,6 +338,7 @@ func (a ApiImpl) AddEntry(ctx context.Context, request AddEntryRequestObject) (A Name: request.Body.Name, ContactName: request.Body.ContactName, Email: request.Body.Email, + ApiKey: request.Body.ApiKey, } insertedEntry, err := qtx.CreateEntry(ctx, toInsert) if err != nil { diff --git a/db/db.go b/db/db.go index eeee39e..9d485b5 100644 --- a/db/db.go +++ b/db/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.30.0 package db diff --git a/db/models.go b/db/models.go index 70d764b..16c1153 100644 --- a/db/models.go +++ b/db/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.30.0 package db @@ -37,6 +37,7 @@ type Entry struct { ContactName *string Email *string Phone *string + ApiKey *string } type Membership struct { diff --git a/db/query.sql.go b/db/query.sql.go index fad2b84..f478fc1 100644 --- a/db/query.sql.go +++ b/db/query.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.30.0 // source: query.sql package db @@ -83,21 +83,27 @@ func (q *Queries) CreateConsortium(ctx context.Context, arg CreateConsortiumPara const createEntry = `-- name: CreateEntry :one INSERT INTO entries ( - name, contact_name, email + name, contact_name, email, api_key ) VALUES ( - $1, $2, $3 + $1, $2, $3, $4 ) -RETURNING id, parent, name, description, lms_location_code, contact_name, email, phone +RETURNING id, parent, name, description, lms_location_code, contact_name, email, phone, api_key ` type CreateEntryParams struct { Name string ContactName *string Email *string + ApiKey *string } func (q *Queries) CreateEntry(ctx context.Context, arg CreateEntryParams) (Entry, error) { - row := q.db.QueryRow(ctx, createEntry, arg.Name, arg.ContactName, arg.Email) + row := q.db.QueryRow(ctx, createEntry, + arg.Name, + arg.ContactName, + arg.Email, + arg.ApiKey, + ) var i Entry err := row.Scan( &i.ID, @@ -108,6 +114,7 @@ func (q *Queries) CreateEntry(ctx context.Context, arg CreateEntryParams) (Entry &i.ContactName, &i.Email, &i.Phone, + &i.ApiKey, ) return i, err } @@ -226,7 +233,7 @@ func (q *Queries) DeleteOtherOwnedSymbols(ctx context.Context, arg DeleteOtherOw } const entryByIdForUpdate = `-- name: EntryByIdForUpdate :one -SELECT id, parent, name, description, lms_location_code, contact_name, email, phone FROM entries WHERE id = $1 LIMIT 1 FOR UPDATE +SELECT id, parent, name, description, lms_location_code, contact_name, email, phone, api_key FROM entries WHERE id = $1 LIMIT 1 FOR UPDATE ` func (q *Queries) EntryByIdForUpdate(ctx context.Context, id uuid.UUID) (Entry, error) { @@ -241,12 +248,13 @@ func (q *Queries) EntryByIdForUpdate(ctx context.Context, id uuid.UUID) (Entry, &i.ContactName, &i.Email, &i.Phone, + &i.ApiKey, ) return i, err } const entryBySymbol = `-- name: EntryBySymbol :one -SELECT e.id, e.parent, e.name, e.description, e.lms_location_code, e.contact_name, e.email, e.phone FROM entries e, symbols s WHERE e.id = s.owner AND s.authority = $1 AND s.symbol = $2 LIMIT 1 +SELECT e.id, e.parent, e.name, e.description, e.lms_location_code, e.contact_name, e.email, e.phone, e.api_key FROM entries e, symbols s WHERE e.id = s.owner AND s.authority = $1 AND s.symbol = $2 LIMIT 1 ` type EntryBySymbolParams struct { @@ -266,12 +274,13 @@ func (q *Queries) EntryBySymbol(ctx context.Context, arg EntryBySymbolParams) (E &i.ContactName, &i.Email, &i.Phone, + &i.ApiKey, ) return i, err } const entryBySymbolForUpdate = `-- name: EntryBySymbolForUpdate :one -SELECT e.id, e.parent, e.name, e.description, e.lms_location_code, e.contact_name, e.email, e.phone FROM entries e, symbols s WHERE e.id = s.owner AND s.authority = $1 AND s.symbol = $2 LIMIT 1 FOR UPDATE OF e +SELECT e.id, e.parent, e.name, e.description, e.lms_location_code, e.contact_name, e.email, e.phone, e.api_key FROM entries e, symbols s WHERE e.id = s.owner AND s.authority = $1 AND s.symbol = $2 LIMIT 1 FOR UPDATE OF e ` type EntryBySymbolForUpdateParams struct { @@ -291,6 +300,7 @@ func (q *Queries) EntryBySymbolForUpdate(ctx context.Context, arg EntryBySymbolF &i.ContactName, &i.Email, &i.Phone, + &i.ApiKey, ) return i, err } @@ -346,8 +356,9 @@ SET name = $1, description = $2, contact_name = $3, - email = $4 -WHERE id = $5 + email = $4, + api_key = $5 +WHERE id = $6 ` type UpdateEntryParams struct { @@ -355,6 +366,7 @@ type UpdateEntryParams struct { Description *string ContactName *string Email *string + ApiKey *string ID uuid.UUID } @@ -364,6 +376,7 @@ func (q *Queries) UpdateEntry(ctx context.Context, arg UpdateEntryParams) error arg.Description, arg.ContactName, arg.Email, + arg.ApiKey, arg.ID, ) return err diff --git a/query.sql b/query.sql index 9ec68d8..9c8b31e 100644 --- a/query.sql +++ b/query.sql @@ -9,9 +9,9 @@ SELECT e.* FROM entries e, symbols s WHERE e.id = s.owner AND s.authority = @aut -- name: CreateEntry :one INSERT INTO entries ( - name, contact_name, email + name, contact_name, email, api_key ) VALUES ( - $1, $2, $3 + $1, $2, $3, $4 ) RETURNING *; @@ -21,7 +21,8 @@ SET name = @name, description = @description, contact_name = @contact_name, - email = @email + email = @email, + api_key = @api_key WHERE id = @id; -- name: DeleteEntryById :exec diff --git a/test/apifixtures/entries-limit-1-offset-1.get.res.json b/test/apifixtures/entries-limit-1-offset-1.get.res.json index 0254839..8a78c3e 100644 --- a/test/apifixtures/entries-limit-1-offset-1.get.res.json +++ b/test/apifixtures/entries-limit-1-offset-1.get.res.json @@ -4,6 +4,7 @@ "id": "00000000-0000-0000-0000-000000000003", "name": "Eine Weitere Einrichtung", "contactName": "Klaus", + "apiKey":"", "addresses": [ "<>", { diff --git a/test/apifixtures/entries-limit-2.get.res.json b/test/apifixtures/entries-limit-2.get.res.json index c7076d8..ec5a93c 100644 --- a/test/apifixtures/entries-limit-2.get.res.json +++ b/test/apifixtures/entries-limit-2.get.res.json @@ -31,6 +31,7 @@ "id": "00000000-0000-0000-0000-000000000003", "name": "Eine Weitere Einrichtung", "contactName": "Klaus", + "apiKey":"", "addresses": [ "<>", { diff --git a/test/apifixtures/entries.get.res.json b/test/apifixtures/entries.get.res.json index 6d3e0f2..509df2f 100644 --- a/test/apifixtures/entries.get.res.json +++ b/test/apifixtures/entries.get.res.json @@ -31,6 +31,7 @@ "id": "00000000-0000-0000-0000-000000000003", "name": "Eine Weitere Einrichtung", "contactName": "Klaus", + "apiKey": "8f2cc4ff-5b9f-41ad-addf-082a5fcc760a", "addresses": [ "<>", { diff --git a/test/dbfixtures/entries.yml b/test/dbfixtures/entries.yml index 8e22cd4..7344a9b 100644 --- a/test/dbfixtures/entries.yml +++ b/test/dbfixtures/entries.yml @@ -6,4 +6,5 @@ contact_name: Bob - id: 00000000-0000-0000-0000-000000000003 name: Eine Weitere Einrichtung - contact_name: Klaus \ No newline at end of file + contact_name: Klaus + api_key: 8f2cc4ff-5b9f-41ad-addf-082a5fcc760a diff --git a/test/entries_test.go b/test/entries_test.go index 51321bc..9ff64c5 100644 --- a/test/entries_test.go +++ b/test/entries_test.go @@ -35,6 +35,14 @@ func TestEntryCases(t *testing.T) { resFile: "entry.get.res.json", addlHeaders: institutionPermissionHeaders, }, + { + name: "GET with redacted field", + method: http.MethodGet, + endpoint: "/entries/by-id/00000000-0000-0000-0000-000000000003", + status: http.StatusOK, + resFile: "entry.get.res-2.json", + addlHeaders: institutionPermissionHeaders, + }, { name: "GET no permissions", method: http.MethodGet, From bf7653da95b34db5d398126827df5cfb230adbd9 Mon Sep 17 00:00:00 2001 From: Kurt Nordstrom Date: Thu, 11 Dec 2025 09:00:38 -0500 Subject: [PATCH 2/4] Add migration and test fixture --- migrations/002_schema.up.sql | 2 ++ test/apifixtures/entry.get.res-2.json | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 migrations/002_schema.up.sql create mode 100644 test/apifixtures/entry.get.res-2.json diff --git a/migrations/002_schema.up.sql b/migrations/002_schema.up.sql new file mode 100644 index 0000000..f254700 --- /dev/null +++ b/migrations/002_schema.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE entries + ADD api_key varchar(255); \ No newline at end of file diff --git a/test/apifixtures/entry.get.res-2.json b/test/apifixtures/entry.get.res-2.json new file mode 100644 index 0000000..b2fa289 --- /dev/null +++ b/test/apifixtures/entry.get.res-2.json @@ -0,0 +1,27 @@ +{ + "id":"00000000-0000-0000-0000-000000000003", + "name":"Eine Weitere Einrichtung", + "contactName":"Klaus", + "apiKey":"", + "addresses": [ + { + "id": "00000003-0000-0000-0000-000000000001", + "type": "Default", + "addressComponents": [ + {"seq": 0, "type": "Thoroughfare", "value": "Unter den Linden 1"}, + {"seq": 1, "type": "Locality", "value": "Berlin"}, + {"seq": 2, "type": "PostalCode", "value": "10117"}, + {"seq": 3, "type": "CountryCode", "value": "DE"} + ] + }, + { + "id" : "00000003-0000-0000-0000-000000000002", + "type": "Billing", + "addressComponents": [ + {"seq": 0, "type": "Thoroughfare", "value": "Musterstraße 99"}, + {"seq": 1, "type": "Locality", "value": "München"}, + {"seq": 2, "type": "PostalCode", "value": "80331"} + ] + } + ] +} \ No newline at end of file From 14788147f92f65fd8377400693413a2073e46495 Mon Sep 17 00:00:00 2001 From: Kurt Nordstrom Date: Thu, 11 Dec 2025 09:33:25 -0500 Subject: [PATCH 3/4] Update generated files --- api/directory.gen.go | 2 +- db/db.go | 2 +- db/models.go | 2 +- db/query.sql.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/directory.gen.go b/api/directory.gen.go index fe7d0b0..9855b6b 100644 --- a/api/directory.gen.go +++ b/api/directory.gen.go @@ -2,7 +2,7 @@ // Package api provides primitives to interact with the openapi HTTP API. // -// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.1 DO NOT EDIT. +// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.4.1 DO NOT EDIT. package api import ( diff --git a/db/db.go b/db/db.go index 9d485b5..eeee39e 100644 --- a/db/db.go +++ b/db/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.30.0 +// sqlc v1.28.0 package db diff --git a/db/models.go b/db/models.go index 16c1153..e90eb2d 100644 --- a/db/models.go +++ b/db/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.30.0 +// sqlc v1.28.0 package db diff --git a/db/query.sql.go b/db/query.sql.go index f478fc1..e961d95 100644 --- a/db/query.sql.go +++ b/db/query.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.30.0 +// sqlc v1.28.0 // source: query.sql package db From d1f46c96cd39e88bbdaf9615e5cded21f97ebe96 Mon Sep 17 00:00:00 2001 From: Kurt Nordstrom Date: Tue, 13 Jan 2026 08:55:52 -0500 Subject: [PATCH 4/4] Update test protected field to be 'dummyPassword' --- api.yaml | 4 +- api/directory.gen.go | 72 +++++++++---------- api/entries.go | 36 +++++----- db/models.go | 2 +- db/query.sql.go | 44 ++++++------ migrations/001_initial_schema.up.sql | 3 +- migrations/002_schema.up.sql | 2 - query.sql | 4 +- .../entries-limit-1-offset-1.get.res.json | 2 +- test/apifixtures/entries-limit-2.get.res.json | 2 +- test/apifixtures/entries.get.res.json | 2 +- test/apifixtures/entry.get.res-2.json | 2 +- test/dbfixtures/entries.yml | 2 +- 13 files changed, 88 insertions(+), 89 deletions(-) delete mode 100644 migrations/002_schema.up.sql diff --git a/api.yaml b/api.yaml index 98bdef3..bb0f5d4 100644 --- a/api.yaml +++ b/api.yaml @@ -528,9 +528,9 @@ components: description: Addresses associated with this entry items: $ref: '#/components/schemas/Address' - apiKey: + dummyPassword: type: string - description: Secret API key + description: Example protected field EntryPatch: type: object properties: diff --git a/api/directory.gen.go b/api/directory.gen.go index 9855b6b..14559ba 100644 --- a/api/directory.gen.go +++ b/api/directory.gen.go @@ -168,15 +168,15 @@ type Entry struct { // Addresses Addresses associated with this entry Addresses *[]Address `json:"addresses,omitempty"` - // ApiKey Secret API key - ApiKey *string `json:"apiKey,omitempty"` - // ContactName Name of contact person ContactName *string `json:"contactName,omitempty"` // Description Detailed description of the entity described by this entry Description *string `json:"description,omitempty"` + // DummyPassword Example protected field + DummyPassword *string `json:"dummyPassword,omitempty"` + // Email Main contact email Email *string `json:"email,omitempty"` @@ -1649,39 +1649,39 @@ func (sh *strictHandler) UpdateEntry(w http.ResponseWriter, r *http.Request, key // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/entries.go b/api/entries.go index cbd7ac8..dac0cb5 100644 --- a/api/entries.go +++ b/api/entries.go @@ -36,14 +36,14 @@ func scanEntryRow(rows pgx.Rows) (Entry, int, error) { description *string contactName *string email *string - apiKey *string + dummyPassword *string symbolsJSON [][]byte endpointsJSON [][]byte addressesJSON [][]byte totalCount int ) - if err := rows.Scan(&id, &name, &description, &contactName, &email, &apiKey, &symbolsJSON, &endpointsJSON, &addressesJSON, &totalCount); err != nil { + if err := rows.Scan(&id, &name, &description, &contactName, &email, &dummyPassword, &symbolsJSON, &endpointsJSON, &addressesJSON, &totalCount); err != nil { return Entry{}, 0, err } @@ -79,15 +79,15 @@ func scanEntryRow(rows pgx.Rows) (Entry, int, error) { } return Entry{ - Id: &id, - Name: name, - Description: description, - ContactName: contactName, - Email: email, - ApiKey: apiKey, - Symbols: symbolsPtr, - Endpoints: endpointsPtr, - Addresses: addressesPtr, + Id: &id, + Name: name, + Description: description, + ContactName: contactName, + Email: email, + DummyPassword: dummyPassword, + Symbols: symbolsPtr, + Endpoints: endpointsPtr, + Addresses: addressesPtr, }, totalCount, nil } @@ -123,7 +123,7 @@ func buildEntrySQL(whereClause string) string { e.description, e.contact_name, e.email, - e.api_key, + e.dummy_password, ARRAY(SELECT row_to_json(s) FROM symbols s WHERE s.owner = e.id ORDER BY s.id) as symbols, ARRAY(SELECT row_to_json(ep) FROM service_endpoints ep WHERE ep.entry = e.id ORDER BY ep.id) as endpoints, ARRAY( @@ -313,8 +313,8 @@ func (a ApiImpl) GetEntry(ctx context.Context, request GetEntryRequestObject) (G } func sanitizeEntry(entry *Entry) { - if entry.ApiKey != nil { - *entry.ApiKey = "" + if entry.DummyPassword != nil { + *entry.DummyPassword = "" } } @@ -336,10 +336,10 @@ func (a ApiImpl) AddEntry(ctx context.Context, request AddEntryRequestObject) (A qtx := a.queries.WithTx(tx) toInsert := db.CreateEntryParams{ - Name: request.Body.Name, - ContactName: request.Body.ContactName, - Email: request.Body.Email, - ApiKey: request.Body.ApiKey, + Name: request.Body.Name, + ContactName: request.Body.ContactName, + Email: request.Body.Email, + DummyPassword: request.Body.DummyPassword, } insertedEntry, err := qtx.CreateEntry(ctx, toInsert) if err != nil { diff --git a/db/models.go b/db/models.go index e90eb2d..bee29ce 100644 --- a/db/models.go +++ b/db/models.go @@ -37,7 +37,7 @@ type Entry struct { ContactName *string Email *string Phone *string - ApiKey *string + DummyPassword *string } type Membership struct { diff --git a/db/query.sql.go b/db/query.sql.go index e961d95..3c906dd 100644 --- a/db/query.sql.go +++ b/db/query.sql.go @@ -83,18 +83,18 @@ func (q *Queries) CreateConsortium(ctx context.Context, arg CreateConsortiumPara const createEntry = `-- name: CreateEntry :one INSERT INTO entries ( - name, contact_name, email, api_key + name, contact_name, email, dummy_password ) VALUES ( $1, $2, $3, $4 ) -RETURNING id, parent, name, description, lms_location_code, contact_name, email, phone, api_key +RETURNING id, parent, name, description, lms_location_code, contact_name, email, phone, dummy_password ` type CreateEntryParams struct { - Name string - ContactName *string - Email *string - ApiKey *string + Name string + ContactName *string + Email *string + DummyPassword *string } func (q *Queries) CreateEntry(ctx context.Context, arg CreateEntryParams) (Entry, error) { @@ -102,7 +102,7 @@ func (q *Queries) CreateEntry(ctx context.Context, arg CreateEntryParams) (Entry arg.Name, arg.ContactName, arg.Email, - arg.ApiKey, + arg.DummyPassword, ) var i Entry err := row.Scan( @@ -114,7 +114,7 @@ func (q *Queries) CreateEntry(ctx context.Context, arg CreateEntryParams) (Entry &i.ContactName, &i.Email, &i.Phone, - &i.ApiKey, + &i.DummyPassword, ) return i, err } @@ -233,7 +233,7 @@ func (q *Queries) DeleteOtherOwnedSymbols(ctx context.Context, arg DeleteOtherOw } const entryByIdForUpdate = `-- name: EntryByIdForUpdate :one -SELECT id, parent, name, description, lms_location_code, contact_name, email, phone, api_key FROM entries WHERE id = $1 LIMIT 1 FOR UPDATE +SELECT id, parent, name, description, lms_location_code, contact_name, email, phone, dummy_password FROM entries WHERE id = $1 LIMIT 1 FOR UPDATE ` func (q *Queries) EntryByIdForUpdate(ctx context.Context, id uuid.UUID) (Entry, error) { @@ -248,13 +248,13 @@ func (q *Queries) EntryByIdForUpdate(ctx context.Context, id uuid.UUID) (Entry, &i.ContactName, &i.Email, &i.Phone, - &i.ApiKey, + &i.DummyPassword, ) return i, err } const entryBySymbol = `-- name: EntryBySymbol :one -SELECT e.id, e.parent, e.name, e.description, e.lms_location_code, e.contact_name, e.email, e.phone, e.api_key FROM entries e, symbols s WHERE e.id = s.owner AND s.authority = $1 AND s.symbol = $2 LIMIT 1 +SELECT e.id, e.parent, e.name, e.description, e.lms_location_code, e.contact_name, e.email, e.phone, e.dummy_password FROM entries e, symbols s WHERE e.id = s.owner AND s.authority = $1 AND s.symbol = $2 LIMIT 1 ` type EntryBySymbolParams struct { @@ -274,13 +274,13 @@ func (q *Queries) EntryBySymbol(ctx context.Context, arg EntryBySymbolParams) (E &i.ContactName, &i.Email, &i.Phone, - &i.ApiKey, + &i.DummyPassword, ) return i, err } const entryBySymbolForUpdate = `-- name: EntryBySymbolForUpdate :one -SELECT e.id, e.parent, e.name, e.description, e.lms_location_code, e.contact_name, e.email, e.phone, e.api_key FROM entries e, symbols s WHERE e.id = s.owner AND s.authority = $1 AND s.symbol = $2 LIMIT 1 FOR UPDATE OF e +SELECT e.id, e.parent, e.name, e.description, e.lms_location_code, e.contact_name, e.email, e.phone, e.dummy_password FROM entries e, symbols s WHERE e.id = s.owner AND s.authority = $1 AND s.symbol = $2 LIMIT 1 FOR UPDATE OF e ` type EntryBySymbolForUpdateParams struct { @@ -300,7 +300,7 @@ func (q *Queries) EntryBySymbolForUpdate(ctx context.Context, arg EntryBySymbolF &i.ContactName, &i.Email, &i.Phone, - &i.ApiKey, + &i.DummyPassword, ) return i, err } @@ -357,17 +357,17 @@ SET description = $2, contact_name = $3, email = $4, - api_key = $5 + dummy_password = $5 WHERE id = $6 ` type UpdateEntryParams struct { - Name string - Description *string - ContactName *string - Email *string - ApiKey *string - ID uuid.UUID + Name string + Description *string + ContactName *string + Email *string + DummyPassword *string + ID uuid.UUID } func (q *Queries) UpdateEntry(ctx context.Context, arg UpdateEntryParams) error { @@ -376,7 +376,7 @@ func (q *Queries) UpdateEntry(ctx context.Context, arg UpdateEntryParams) error arg.Description, arg.ContactName, arg.Email, - arg.ApiKey, + arg.DummyPassword, arg.ID, ) return err diff --git a/migrations/001_initial_schema.up.sql b/migrations/001_initial_schema.up.sql index abe6034..0080b6f 100644 --- a/migrations/001_initial_schema.up.sql +++ b/migrations/001_initial_schema.up.sql @@ -6,7 +6,8 @@ CREATE TABLE IF NOT EXISTS entries ( lms_location_code varchar(255), contact_name varchar(255), email varchar(255), - phone varchar(255) + phone varchar(255), + dummy_password varchar(255) ); CREATE TABLE IF NOT EXISTS symbols ( diff --git a/migrations/002_schema.up.sql b/migrations/002_schema.up.sql deleted file mode 100644 index f254700..0000000 --- a/migrations/002_schema.up.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE entries - ADD api_key varchar(255); \ No newline at end of file diff --git a/query.sql b/query.sql index 9c8b31e..8530b71 100644 --- a/query.sql +++ b/query.sql @@ -9,7 +9,7 @@ SELECT e.* FROM entries e, symbols s WHERE e.id = s.owner AND s.authority = @aut -- name: CreateEntry :one INSERT INTO entries ( - name, contact_name, email, api_key + name, contact_name, email, dummy_password ) VALUES ( $1, $2, $3, $4 ) @@ -22,7 +22,7 @@ SET description = @description, contact_name = @contact_name, email = @email, - api_key = @api_key + dummy_password = @dummy_password WHERE id = @id; -- name: DeleteEntryById :exec diff --git a/test/apifixtures/entries-limit-1-offset-1.get.res.json b/test/apifixtures/entries-limit-1-offset-1.get.res.json index 8a78c3e..5fe8f15 100644 --- a/test/apifixtures/entries-limit-1-offset-1.get.res.json +++ b/test/apifixtures/entries-limit-1-offset-1.get.res.json @@ -4,7 +4,7 @@ "id": "00000000-0000-0000-0000-000000000003", "name": "Eine Weitere Einrichtung", "contactName": "Klaus", - "apiKey":"", + "dummyPassword":"", "addresses": [ "<>", { diff --git a/test/apifixtures/entries-limit-2.get.res.json b/test/apifixtures/entries-limit-2.get.res.json index ec5a93c..1315ade 100644 --- a/test/apifixtures/entries-limit-2.get.res.json +++ b/test/apifixtures/entries-limit-2.get.res.json @@ -31,7 +31,7 @@ "id": "00000000-0000-0000-0000-000000000003", "name": "Eine Weitere Einrichtung", "contactName": "Klaus", - "apiKey":"", + "dummyPassword":"", "addresses": [ "<>", { diff --git a/test/apifixtures/entries.get.res.json b/test/apifixtures/entries.get.res.json index 509df2f..6914c1c 100644 --- a/test/apifixtures/entries.get.res.json +++ b/test/apifixtures/entries.get.res.json @@ -31,7 +31,7 @@ "id": "00000000-0000-0000-0000-000000000003", "name": "Eine Weitere Einrichtung", "contactName": "Klaus", - "apiKey": "8f2cc4ff-5b9f-41ad-addf-082a5fcc760a", + "dummyPassword": "chicken_satellite_banana_penguin", "addresses": [ "<>", { diff --git a/test/apifixtures/entry.get.res-2.json b/test/apifixtures/entry.get.res-2.json index b2fa289..a59117a 100644 --- a/test/apifixtures/entry.get.res-2.json +++ b/test/apifixtures/entry.get.res-2.json @@ -2,7 +2,7 @@ "id":"00000000-0000-0000-0000-000000000003", "name":"Eine Weitere Einrichtung", "contactName":"Klaus", - "apiKey":"", + "dummyPassword":"", "addresses": [ { "id": "00000003-0000-0000-0000-000000000001", diff --git a/test/dbfixtures/entries.yml b/test/dbfixtures/entries.yml index 7344a9b..3bccad4 100644 --- a/test/dbfixtures/entries.yml +++ b/test/dbfixtures/entries.yml @@ -7,4 +7,4 @@ - id: 00000000-0000-0000-0000-000000000003 name: Eine Weitere Einrichtung contact_name: Klaus - api_key: 8f2cc4ff-5b9f-41ad-addf-082a5fcc760a + dummy_password: chicken_satellite_banana_penguin