Skip to content

Commit

Permalink
feat(DB): support OR scope
Browse files Browse the repository at this point in the history
feat(chalice): support OR scope
  • Loading branch information
tahayk committed Aug 8, 2024
1 parent 7dc0c05 commit 14b0b21
Show file tree
Hide file tree
Showing 9 changed files with 61 additions and 8 deletions.
27 changes: 27 additions & 0 deletions api/chalicelib/core/scope.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from cachetools import cached, TTLCache

import schemas
from chalicelib.utils import helper
from chalicelib.utils import pg_client

cache = TTLCache(maxsize=1, ttl=24 * 60 * 60)


@cached(cache)
def get_scope(tenant_id) -> schemas.ScopeType:
with pg_client.PostgresClient() as cur:
query = cur.mogrify(f"""SELECT scope
FROM public.tenants;""")
cur.execute(query)
return helper.dict_to_camel_case(cur.fetchone())["scope"]


def update_scope(tenant_id, scope: schemas.ScopeType):
with pg_client.PostgresClient() as cur:
query = cur.mogrify(f"""UPDATE public.tenants
SET scope = %(scope)s;""",
{"scope": scope})
cur.execute(query)
if tenant_id in cache:
cache.pop(tenant_id)
return scope
3 changes: 2 additions & 1 deletion api/chalicelib/core/tenants.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ def get_by_tenant_id(tenant_id):
tenants.created_at,
'{license.EDITION}' AS edition,
openreplay_version() AS version_number,
tenants.opt_out
tenants.opt_out,
scope
FROM public.tenants
LIMIT 1;""",
{"tenantId": tenant_id})
Expand Down
2 changes: 0 additions & 2 deletions api/routers/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -879,8 +879,6 @@ def health_check():
return {}


# tags

@app.post('/{projectId}/tags', tags=["tags"])
def tags_create(projectId: int, data: schemas.TagCreate = Body(),
context: schemas.CurrentContext = Depends(OR_context)):
Expand Down
11 changes: 10 additions & 1 deletion api/routers/core_dynamic.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from chalicelib.core import sessions_viewed
from chalicelib.core import tenants, users, projects, license
from chalicelib.core import webhook
from chalicelib.core import scope
from chalicelib.core.collaboration_slack import Slack
from chalicelib.utils import captcha, smtp
from chalicelib.utils import helper
Expand Down Expand Up @@ -72,7 +73,8 @@ def login_user(response: JSONResponse, spot: Optional[bool] = False, data: schem
content = {
'jwt': r.pop('jwt'),
'data': {
"user": r
"user": r,
"scope": scope.get_scope(-1)
}
}
response.set_cookie(key="refreshToken", value=refresh_token, path=COOKIE_PATH,
Expand Down Expand Up @@ -131,6 +133,13 @@ def edit_account(data: schemas.EditAccountSchema = Body(...),
return users.edit_account(tenant_id=context.tenant_id, user_id=context.user_id, changes=data)


@app.post('/account/scope', tags=["account"])
def change_scope(data: schemas.ScopeSchema = Body(),
context: schemas.CurrentContext = Depends(OR_context)):
data = scope.update_scope(tenant_id=-1, scope=data.scope)
return {'data': data}


@app.post('/integrations/slack', tags=['integrations'])
@app.put('/integrations/slack', tags=['integrations'])
def add_slack_integration(data: schemas.AddCollaborationSchema,
Expand Down
9 changes: 9 additions & 0 deletions api/schemas/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -1651,3 +1651,12 @@ class TagCreate(TagUpdate):
selector: str = Field(..., min_length=1, max_length=255)
ignoreClickRage: bool = Field(default=False)
ignoreDeadClick: bool = Field(default=False)


class ScopeType(str, Enum):
FULL_OR = "full"
SPOT_ONLY = "spot"


class ScopeSchema(BaseModel):
scope: ScopeType = Field(default=ScopeType.FULL_OR)
6 changes: 5 additions & 1 deletion ee/scripts/schema/db/init_dbs/postgresql/1.20.0/1.20.0.sql
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ WHERE NOT permissions @> '{SPOT}'
UPDATE public.roles
SET permissions = (SELECT array_agg(distinct e) FROM unnest(permissions || '{SPOT_PUBLIC}') AS e)
WHERE NOT permissions @> '{SPOT_PUBLIC}'
AND name ILIKE 'owner';
AND NOT service_role;
-- AND name ILIKE 'owner';

ALTER TABLE IF EXISTS public.users
ADD COLUMN IF NOT EXISTS spot_jwt_iat timestamp without time zone NULL DEFAULT NULL,
Expand All @@ -49,6 +50,9 @@ CREATE TABLE IF NOT EXISTS or_cache.autocomplete_top_values
UNIQUE NULLS NOT DISTINCT (project_id, event_type, event_key)
);

ALTER TABLE IF EXISTS public.tenants
ADD COLUMN IF NOT EXISTS scope text NOT NULL DEFAULT 'full';

COMMIT;

\elif :is_next
Expand Down
3 changes: 2 additions & 1 deletion ee/scripts/schema/db/init_dbs/postgresql/init_schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ CREATE TABLE public.tenants
t_sessions bigint NOT NULL DEFAULT 0,
t_users integer NOT NULL DEFAULT 1,
t_integrations integer NOT NULL DEFAULT 0,
last_telemetry bigint NOT NULL DEFAULT CAST(EXTRACT(epoch FROM date_trunc('day', now())) * 1000 AS BIGINT)
last_telemetry bigint NOT NULL DEFAULT CAST(EXTRACT(epoch FROM date_trunc('day', now())) * 1000 AS BIGINT),
scope text NOT NULL DEFAULT 'full'
);


Expand Down
3 changes: 3 additions & 0 deletions scripts/schema/db/init_dbs/postgresql/1.20.0/1.20.0.sql
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ CREATE TABLE IF NOT EXISTS or_cache.autocomplete_top_values
UNIQUE NULLS NOT DISTINCT (project_id, event_type, event_key)
);

ALTER TABLE IF EXISTS public.tenants
ADD COLUMN IF NOT EXISTS scope text NOT NULL DEFAULT 'full';

COMMIT;

\elif :is_next
Expand Down
5 changes: 3 additions & 2 deletions scripts/schema/db/init_dbs/postgresql/init_schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,9 @@ CREATE TABLE public.tenants
t_sessions bigint NOT NULL DEFAULT 0,
t_users integer NOT NULL DEFAULT 1,
t_integrations integer NOT NULL DEFAULT 0,
last_telemetry bigint NOT NULL DEFAULT CAST(EXTRACT(epoch FROM date_trunc('day', now())) * 1000 AS BIGINT)
CONSTRAINT onerow_uni CHECK (tenant_id = 1)
last_telemetry bigint NOT NULL DEFAULT CAST(EXTRACT(epoch FROM date_trunc('day', now())) * 1000 AS BIGINT),
scope text NOT NULL DEFAULT 'full',
CONSTRAINT onerow_uni CHECK (tenant_id = 1)
);

CREATE TYPE user_role AS ENUM ('owner', 'admin', 'member');
Expand Down

0 comments on commit 14b0b21

Please sign in to comment.