Code AI platform with Code Search & Cody
Go to file
Geoffrey Gilmore 57de59cb3c
internal/database/sub_repo_permissions: modify store to be able to insert ip based permissions (#63811)
Closes https://linear.app/sourcegraph/issue/SRC-459/
Closes 

This PR adds support for saving and retreiving the IP addressess
associated with each path rule in the sub_repo_permissions store.

It does this by:

**Adding a new permissions type to the internal/authz package**:


1be7df6d79/internal/authz/iface.go (L52-L96)

**Adding new `*WithIPs` versions of all the setter and getter methods** 

The new setter methods uses the above `authz.SubRepoPermissionsWithIPs`
type that write to the appropriate `ips` column in the DB.

The new getter methods retrieve the ip addresses associated with each
path entry. However, here there is an additional complication: It's
possible for someone to call the `*WithIPs` getters when the ips column
is still NULL (indicating that the perforce syncer hasn't been updated /
ran in order to save the IP addresses from the protection table yet.

| repo_id | user_id | version | updated_at | paths | ips |
|---------|---------|---------|------------|-------|-----|
| 1 | 1 | 1 | 2023-07-01 10:00:00 | {`"/depot/main/..."`,
`"/depot/dev/..."`, `"-/depot/secret/..."`} | NULL |
| 2 | 1 | 1 | 2023-07-01 11:00:00 | {`"/depot/public/..."`,
`"-/depot/private/..."`} | NULL |

In order to address this, the getters each have a `backfill` boolean
that allows the caller to choose the behavior that they want.

- If `backfill = true`, the paths without IP entries will be returned
with a `*` (wildcard) IP indicating that any client IP address is okay.
(This is effectively the behavior we have today since we don't check IPs
for sub_repo_permisisons). I imagine this can be used when callers don't
care about enforcing IP-based permissions (such as when IP address
enforcement is disabled in site configuration).

- If `backfill = false`, if the IPs column is NULL - an error is
returned instead of backfilling ("The IP addresses associated with this
sub-repository-permissions entry have not been synced yet."). This
allows for callers that care about IP address enforcement to know
_explicitly_ if the IP address information hasn't been updated yet - so
we can't know whether or not the user is able to view the file (e.g when
IP based enforcement is enabled).


**Ensuring that the old setter methods set the IPs column to NULL**: 

self-explanatory, if someone uses the non `*WithIP` variants of the
setters, we want to ensure that we zero out that column so that we don't
leave stale / inconsistent information for those Path entries.

---

Overall, the design this adds the new IP address functionality without
having to immediately update all the call sites in the codebase to force
them to interpret all this information (which would make for a
gargantuan PR). Eventually, we should be able to simply delete the old
versions of the setters/getters once the IP address functioanlity has
been threaded through everywhere.

## Test plan

Extensive unit tests. 

For each new setter and getter, I added unit tests that tested along all
of the following dimenisons:

- **initial store state**: empty database, database seeded with
permissions with no IP information (paths column only), database seeded
with permissions that have the IP information synced
- **insertion method**: was the data for the test inserted **with IP
information** (using the `withIP` variant of upsert, etc.), or was it
inserted with the old legacy way with no ip information
- **retreieval method**: was the data reterived with the legacy getters
(that don't look at the IP information), with the new IP getters that
either backfill (if the IP information for that paths entry hasn't been
synced yet, it will return an `*` for that entry), or avoids backfilling
(will return the information in the IPs column, or hard-error)?
## Changelog

- The sub_repository_permissions_ database store can now save and
retrieve the IP addresses associated with each path rule.
2024-07-18 14:05:30 -07:00
.apko Build images end-to-end using Bazel v2 (#61845) 2024-04-12 16:18:43 +01:00
.aspect fix(ci): only emit bazel execlog artifact for 'test' commands (#63916) 2024-07-18 15:17:12 +01:00
.buildkite chore(ci): remove Percy visual tests (#63515) 2024-06-27 16:20:06 +02:00
.github pr-auditor: use pr-auditor from devx-service (#63847) 2024-07-16 11:10:36 +02:00
.vscode feat(search): Make search aware of perforce changelist id mapping (#63563) 2024-07-09 14:01:05 -04:00
client add saved search visibility, draft, and timestamps (#63909) 2024-07-18 13:37:41 -07:00
cmd add saved search visibility, draft, and timestamps (#63909) 2024-07-18 13:37:41 -07:00
dev Revert "fix(sg): resolve overwrite env ordering in sg (#63838)" (#63924) 2024-07-18 20:46:35 +00:00
doc chore/sg: remove 'sg telemetry' and related docs (#63763) 2024-07-10 17:25:04 -07:00
docker-images chore/otel-collector: upgrade to v0.103.0, remove jaegerexporter (#63171) 2024-07-10 09:01:41 -07:00
internal internal/database/sub_repo_permissions: modify store to be able to insert ip based permissions (#63811) 2024-07-18 14:05:30 -07:00
lib chore/lib/telemetrygateway: fixup Dial helper (#63862) 2024-07-16 20:38:53 +00:00
migrations add saved search visibility, draft, and timestamps (#63909) 2024-07-18 13:37:41 -07:00
monitoring feat/lib/telemetrygateway: expose simple Dial (#63810) 2024-07-15 10:45:10 -07:00
schema Integrate Cohere re-ranking API (#63877) 2024-07-17 19:20:13 +00:00
testing feat/bazel: //cmd/{frontend,server} targets that don't include client bundle for backend integration tests (#62877) 2024-05-28 14:32:48 +01:00
third_party enterprise-portal: implement basic MSP IAM and RPCs (#63173) 2024-06-19 21:46:48 -04:00
third-party-licenses Chore: remove gorilla/schema (#63738) 2024-07-10 15:36:37 +00:00
tools Chore(release): Calendar Updates (#63583) 2024-07-02 10:42:12 -04:00
ui/assets feat/bazel: //cmd/{frontend,server} targets that don't include client bundle for backend integration tests (#62877) 2024-05-28 14:32:48 +01:00
wolfi-images fix(build): update wolfi image lock for otel (#63755) 2024-07-10 10:23:11 -07:00
wolfi-packages chore/otel-collector: upgrade to v0.103.0, remove jaegerexporter (#63171) 2024-07-10 09:01:41 -07:00
.bazel_fix_commands.json SG Start Bazel Improvements Take 2 (#60687) 2024-03-05 01:44:21 -08:00
.bazelignore Convert Appliance Maintenance UI to Bazel (#63661) 2024-07-10 13:47:18 +02:00
.bazeliskrc chore: upgrade to Aspect CLI 5.8.19 (#59203) 2024-01-02 15:13:24 +01:00
.bazelrc feat(ci): Adds playwright tests for sveltekit to bazel (#62560) 2024-06-06 12:45:05 -06:00
.bazelversion chore(bazel): bump to 7.2.0 (#63226) 2024-06-12 13:25:18 +00:00
.dockerignore use esbuild for client/web builds (#57365) 2023-10-23 10:59:06 -07:00
.editorconfig proto: Add editorconfig to ident using two spaces (#57281) 2023-10-03 00:39:42 +00:00
.eslintrc.js various improvements to saved searches (#63539) 2024-07-15 20:12:34 +00:00
.gitattributes dev/linearhooks: add POC (#62367) 2024-05-07 00:14:05 -07:00
.gitignore chore(ci): emit compact executon log in CI (#63420) 2024-06-21 19:50:35 +01:00
.graphqlrc.yml
.hadolint.yaml
.mailmap
.mocharc.js reapply "switch from jest to vitest for faster, simpler tests (#57886)" (#58145) 2023-11-07 12:00:18 +02:00
.npmrc pnpm: remove update notifier message (#51630) 2023-05-10 08:53:39 +02:00
.pre-commit-config.yaml chore(local): add FORBIDCOMMIT pragma to prevent accidental commits (#63581) 2024-07-01 18:27:26 +00:00
.prettierignore feat/dotcom: use Enterprise Portal for Cody Gateway usage (#63653) 2024-07-10 19:22:08 +00:00
.stylelintignore
.stylelintrc.json
.swcrc use swc instead of babel for faster bazel typescript transpilation (#57912) 2023-11-02 22:49:03 -07:00
.tool-versions chore(tooling): bump Go version to 1.22.4 (#63124) 2024-06-06 15:19:03 +00:00
.trivyignore
BUILD.bazel symbols: Make symbols specific code internal (#63736) 2024-07-10 01:26:22 +02:00
CHANGELOG.md feat(code insights): language stats speed improvements by using archive loading (#62946) 2024-07-18 08:40:48 +02:00
CODENOTIFY nix: update pnpm hash (#51512) 2023-05-05 12:51:59 +00:00
CONTRIBUTING.md fix: update links for dev docs (#62758) 2024-05-17 13:47:34 +02:00
deps.bzl Integrate Cohere re-ranking API (#63877) 2024-07-17 19:20:13 +00:00
doc.go
eslint-relative-formatter.js bazel: implement custom ESLint Bazel rule (#52062) 2023-05-22 04:05:45 -07:00
flake.lock nix: bump to bazel 7.1 (#61326) 2024-03-22 16:57:50 +00:00
flake.nix nix: use go1.22.4 (#63372) 2024-06-20 11:12:17 +02:00
gen.go chore: fixup go-mockgen run statement (#61028) 2024-03-12 13:06:36 +00:00
go.mod feat/sg: do not persist external secrets (#63890) 2024-07-18 10:04:24 -07:00
go.sum Integrate Cohere re-ranking API (#63877) 2024-07-17 19:20:13 +00:00
graphql-schema-linter.config.js
LICENSE relicense all paths other than MIT licensed code, client/cody*, jetbrains, VS code, and browser extension to enterprise (#53345) (#53345) 2023-06-13 10:28:11 -07:00
LICENSE.enterprise Update Enterprise license copyright notice (#62467) 2024-05-06 17:35:32 +00:00
linter_deps.bzl chore: Remove redundant loop captures (#62264) 2024-04-30 07:57:21 -06:00
mockgen.temp.yaml Correctly re-map source ranges in new SCIP-based APIs (#63630) 2024-07-11 06:55:46 +00:00
mockgen.test.yaml feat(appliance): self-update (#63780) 2024-07-11 17:59:39 +01:00
mockgen.yaml bazel: native go-mockgen in Bazel (#60386) 2024-02-16 13:26:48 +00:00
nogo_config.json chore: Remove redundant loop captures (#62264) 2024-04-30 07:57:21 -06:00
package.json Upgrade cody web experimental package to 0.2.7 (#63863) 2024-07-16 18:43:53 -03:00
pnpm-lock.yaml Upgrade cody web experimental package to 0.2.7 (#63863) 2024-07-16 18:43:53 -03:00
pnpm-workspace.yaml Convert Appliance Maintenance UI to Bazel (#63661) 2024-07-10 13:47:18 +02:00
postcss.config.js
prettier.config.js
README.md chore: remove broken link in README (#63256) 2024-06-13 22:22:56 +00:00
release.yaml feat(ci): Trigger security scanner from release pipeline (#63280) 2024-06-19 19:16:36 +00:00
renovate.json chore(ci): disable renovate (#63313) 2024-06-19 13:17:15 +02:00
SECURITY.md
service-catalog.yaml
sg.config.yaml chore/otel-collector: upgrade to v0.103.0, remove jaegerexporter (#63171) 2024-07-10 09:01:41 -07:00
shell.nix bazel: use pgutil binaries from GCS instead of from the host (#61741) 2024-04-11 18:00:21 +01:00
stamp_tags.bzl Switch to OCI/Wolfi based image (#52693) 2023-06-02 12:12:52 +02:00
tsconfig.base.json
tsconfig.json release: drop legacy release tooling (#61220) 2024-04-09 14:29:35 -05:00
vitest.shared.ts make pagination hooks store filter & query params in URL, not just pagination params (#63744) 2024-07-15 19:17:59 +00:00
vitest.workspace.ts vitest: Fix workspace config wrt client/web/ (#58397) 2023-11-17 08:22:46 +00:00
WORKSPACE release/bug: generate a new stitched migration graph (#63764) 2024-07-10 14:49:18 -07:00

DocsContributingTwitterDiscord

Build status Scorecard Latest release Discord Contributors


Sourcegraph makes it easy to read, write, and fix code—even in big, complex codebases.

  • Code search: Search all of your repositories across all branches and all code hosts.
  • Code intelligence: Navigate code, find references, see code owners, trace history, and more.
  • Fix and refactor: Roll out large-scale changes to many repositories at once and track big migrations.

Getting started



Development

Refer to the Developing Sourcegraph guide to get started.

Documentation

The doc directory has additional documentation for developing and understanding Sourcegraph:

License

This repository contains primarily non-OSS-licensed files. See LICENSE.

Copyright (c) 2018-present Sourcegraph Inc.