punk 0.0.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.editorconfig +9 -0
- data/.github/workflows/ship.yml +28 -0
- data/.github/workflows/test.yml +45 -0
- data/.rdoc_options +23 -0
- data/.rgignore +1 -0
- data/.rspec +2 -0
- data/.rubocop.yml +243 -0
- data/Gemfile +6 -6
- data/Gemfile.lock +18 -30
- data/README.md +8 -0
- data/Rakefile +7 -9
- data/VERSION +1 -1
- data/app/migrations/001_lets_punk.rb +3 -0
- data/app/routes/hello.rb +4 -0
- data/bin/punk +0 -1
- data/env/.gitignore +3 -0
- data/env/spec/test.sh +3 -0
- data/env/test.sh +5 -0
- data/lib/punk/actions/.keep +0 -0
- data/lib/punk/actions/groups/list.rb +24 -0
- data/lib/punk/actions/sessions/clear.rb +21 -0
- data/lib/punk/actions/sessions/create.rb +64 -0
- data/lib/punk/actions/sessions/list.rb +18 -0
- data/lib/punk/actions/sessions/verify.rb +24 -0
- data/lib/punk/actions/tenants/list.rb +18 -0
- data/lib/punk/actions/users/list_group.rb +18 -0
- data/lib/punk/actions/users/list_tenant.rb +18 -0
- data/lib/punk/actions/users/show.rb +18 -0
- data/lib/punk/commands/http.rb +3 -3
- data/lib/punk/commands/list.rb +12 -6
- data/lib/punk/config/defaults.json +3 -0
- data/lib/punk/config/schema.json +3 -0
- data/lib/punk/core/app.rb +6 -8
- data/lib/punk/core/commander.rb +9 -6
- data/lib/punk/core/exec.rb +2 -0
- data/lib/punk/core/load.rb +0 -1
- data/lib/punk/framework/command.rb +5 -1
- data/lib/punk/framework/plugins/validation.rb +0 -14
- data/lib/punk/framework/runnable.rb +1 -1
- data/lib/punk/helpers/loggable.rb +1 -1
- data/lib/punk/migrations/001_punk.rb +103 -0
- data/lib/punk/models/.keep +0 -0
- data/lib/punk/models/group.rb +20 -0
- data/lib/punk/models/group_user_metadata.rb +17 -0
- data/lib/punk/models/identity.rb +29 -0
- data/lib/punk/models/session.rb +89 -0
- data/lib/punk/models/tenant.rb +19 -0
- data/lib/punk/models/tenant_user_metadata.rb +17 -0
- data/lib/punk/models/user.rb +31 -0
- data/lib/punk/routes/groups.rb +31 -0
- data/lib/punk/routes/plivo.rb +4 -0
- data/lib/punk/routes/sessions.rb +108 -0
- data/lib/punk/routes/swagger.rb +9 -0
- data/lib/punk/routes/tenants.rb +29 -0
- data/lib/punk/routes/users.rb +36 -0
- data/lib/punk/services/.keep +0 -0
- data/lib/punk/services/challenge_claim.rb +46 -0
- data/lib/punk/services/create_identities.rb +25 -0
- data/lib/punk/services/generate_swagger.rb +25 -0
- data/lib/punk/services/prove_claim.rb +29 -0
- data/lib/punk/services/secret.rb +9 -0
- data/lib/punk/templates/groups/list.jbuilder +7 -0
- data/lib/punk/templates/plivo.slim +16 -0
- data/lib/punk/templates/sessions/list.jbuilder +6 -0
- data/lib/punk/templates/sessions/pending.jbuilder +4 -0
- data/lib/punk/templates/tenants/list.jbuilder +7 -0
- data/lib/punk/templates/tenants/list.slim +8 -0
- data/lib/punk/templates/users/list.jbuilder +7 -0
- data/lib/punk/templates/users/list.rcsv +4 -0
- data/lib/punk/templates/users/show.jbuilder +5 -0
- data/lib/punk/views/groups/list.rb +22 -0
- data/lib/punk/views/plivo_store.rb +15 -0
- data/lib/punk/views/sessions/list.rb +22 -0
- data/lib/punk/views/sessions/pending.rb +28 -0
- data/lib/punk/views/tenants/list.rb +22 -0
- data/lib/punk/views/users/list.rb +22 -0
- data/lib/punk/views/users/show.rb +22 -0
- data/lib/punk/workers/.keep +0 -0
- data/lib/punk/workers/expire_sessions.rb +9 -0
- data/lib/punk/workers/geocode_session_worker.rb +48 -0
- data/lib/punk/workers/identify_session_worker.rb +45 -0
- data/lib/punk/workers/secret.rb +18 -0
- data/lib/punk/workers/send_email_worker.rb +51 -0
- data/lib/punk/workers/send_sms_worker.rb +40 -0
- data/punk.gemspec +149 -16
- data/schema.psql +345 -0
- data/spec/actions/groups/punk/list_groups_action_spec.rb +36 -0
- data/spec/actions/sessions/punk/clear_session_action_spec.rb +29 -0
- data/spec/actions/sessions/punk/create_session_action_spec.rb +33 -0
- data/spec/actions/sessions/punk/list_sessions_action_spec.rb +26 -0
- data/spec/actions/sessions/punk/verify_session_action_spec.rb +59 -0
- data/spec/actions/tenants/punk/list_tenants_action_spec.rb +25 -0
- data/spec/actions/users/punk/list_group_users_action_spec.rb +26 -0
- data/spec/actions/users/punk/list_tenant_users_action_spec.rb +26 -0
- data/spec/factories/group.rb +12 -0
- data/spec/factories/group_user_metadata.rb +10 -0
- data/spec/factories/identity.rb +19 -0
- data/spec/factories/session.rb +12 -0
- data/spec/factories/tenant.rb +10 -0
- data/spec/factories/tenant_user_metadata.rb +10 -0
- data/spec/factories/user.rb +12 -0
- data/spec/lib/commands/auth_spec.rb +11 -0
- data/spec/lib/commands/generate_spec.rb +7 -0
- data/spec/lib/commands/http_spec.rb +23 -0
- data/spec/lib/commands/list_spec.rb +7 -0
- data/spec/lib/commands/swagger_spec.rb +7 -0
- data/spec/lib/engine/punk_env_spec.rb +13 -0
- data/spec/lib/engine/punk_exec_spec.rb +9 -0
- data/spec/lib/engine/punk_init_spec.rb +9 -0
- data/spec/lib/engine/punk_store_spec.rb +10 -0
- data/spec/lib/punk.env +7 -0
- data/spec/models/punk/group_spec.rb +50 -0
- data/spec/models/punk/group_user_metadata_spec.rb +61 -0
- data/spec/models/punk/identity_spec.rb +61 -0
- data/spec/models/punk/session_spec.rb +156 -0
- data/spec/models/punk/tenant_spec.rb +51 -0
- data/spec/models/punk/tenant_user_metadata_spec.rb +61 -0
- data/spec/models/punk/user_spec.rb +115 -0
- data/spec/routes/groups/get_groups_spec.rb +33 -0
- data/spec/routes/plivo/get_plivo_spec.rb +11 -0
- data/spec/routes/sessions/delete_session_spec.rb +11 -0
- data/spec/routes/sessions/get_sessions_spec.rb +30 -0
- data/spec/routes/sessions/patch_session_spec.rb +11 -0
- data/spec/routes/sessions/post_session_spec.rb +11 -0
- data/spec/routes/swagger/get_swagger_spec.rb +12 -0
- data/spec/routes/tenants/get_tenants_spec.rb +31 -0
- data/spec/routes/users/get_users_spec.rb +60 -0
- data/spec/services/punk/challenge_claim_service_spec.rb +7 -0
- data/spec/services/punk/create_identities_service_spec.rb +14 -0
- data/spec/services/punk/generate_swagger_service_spec.rb +7 -0
- data/spec/services/punk/prove_claim_service_spec.rb +7 -0
- data/spec/services/punk/secret_service_spec.rb +7 -0
- data/spec/spec_helper.rb +122 -0
- data/spec/vcr_cassettes/PUNK_GeocodeSessionWorker/updates_the_session_data.yml +57 -0
- data/spec/vcr_cassettes/PUNK_IdentifySessionWorker/updates_the_session_data.yml +112 -0
- data/spec/views/punk/plivo_store_spec.rb +7 -0
- data/spec/views/sessions/punk/list_sessions_view_spec.rb +7 -0
- data/spec/views/sessions/punk/pending_session_view_spec.rb +7 -0
- data/spec/views/tenants/punk/list_tenants_view_spec.rb +7 -0
- data/spec/views/users/punk/list_groups_view_spec.rb +7 -0
- data/spec/views/users/punk/list_users_view_spec.rb +7 -0
- data/spec/workers/punk/expire_sessions_worker_spec.rb +31 -0
- data/spec/workers/punk/geocode_session_worker_spec.rb +14 -0
- data/spec/workers/punk/identify_session_worker_spec.rb +15 -0
- data/spec/workers/punk/secret_worker_spec.rb +20 -0
- data/spec/workers/punk/send_email_worker_spec.rb +46 -0
- data/spec/workers/punk/send_sms_worker_spec.rb +33 -0
- metadata +169 -13
- data/lib/punk/views/all.rb +0 -4
data/schema.psql
ADDED
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
--
|
|
2
|
+
-- PostgreSQL database dump
|
|
3
|
+
--
|
|
4
|
+
|
|
5
|
+
-- Dumped from database version 13.1
|
|
6
|
+
-- Dumped by pg_dump version 13.1
|
|
7
|
+
|
|
8
|
+
SET statement_timeout = 0;
|
|
9
|
+
SET lock_timeout = 0;
|
|
10
|
+
SET idle_in_transaction_session_timeout = 0;
|
|
11
|
+
SET client_encoding = 'UTF8';
|
|
12
|
+
SET standard_conforming_strings = on;
|
|
13
|
+
SELECT pg_catalog.set_config('search_path', '', false);
|
|
14
|
+
SET check_function_bodies = false;
|
|
15
|
+
SET xmloption = content;
|
|
16
|
+
SET client_min_messages = warning;
|
|
17
|
+
SET row_security = off;
|
|
18
|
+
|
|
19
|
+
--
|
|
20
|
+
-- Name: claim_type; Type: TYPE; Schema: public; Owner: jason
|
|
21
|
+
--
|
|
22
|
+
|
|
23
|
+
CREATE TYPE public.claim_type AS ENUM (
|
|
24
|
+
'email',
|
|
25
|
+
'phone'
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
ALTER TYPE public.claim_type OWNER TO jason;
|
|
30
|
+
|
|
31
|
+
--
|
|
32
|
+
-- Name: punk_state; Type: TYPE; Schema: public; Owner: jason
|
|
33
|
+
--
|
|
34
|
+
|
|
35
|
+
CREATE TYPE public.punk_state AS ENUM (
|
|
36
|
+
'created',
|
|
37
|
+
'active',
|
|
38
|
+
'deleted'
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
ALTER TYPE public.punk_state OWNER TO jason;
|
|
43
|
+
|
|
44
|
+
--
|
|
45
|
+
-- Name: session_state; Type: TYPE; Schema: public; Owner: jason
|
|
46
|
+
--
|
|
47
|
+
|
|
48
|
+
CREATE TYPE public.session_state AS ENUM (
|
|
49
|
+
'pending',
|
|
50
|
+
'created',
|
|
51
|
+
'active',
|
|
52
|
+
'deleted',
|
|
53
|
+
'expired'
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
ALTER TYPE public.session_state OWNER TO jason;
|
|
58
|
+
|
|
59
|
+
SET default_tablespace = '';
|
|
60
|
+
|
|
61
|
+
SET default_table_access_method = heap;
|
|
62
|
+
|
|
63
|
+
--
|
|
64
|
+
-- Name: groups; Type: TABLE; Schema: public; Owner: jason
|
|
65
|
+
--
|
|
66
|
+
|
|
67
|
+
CREATE TABLE public.groups (
|
|
68
|
+
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
69
|
+
state public.punk_state DEFAULT 'created'::public.punk_state NOT NULL,
|
|
70
|
+
name text NOT NULL,
|
|
71
|
+
icon text,
|
|
72
|
+
data jsonb DEFAULT '{}'::jsonb,
|
|
73
|
+
created_at timestamp with time zone,
|
|
74
|
+
updated_at timestamp with time zone,
|
|
75
|
+
tenant_id uuid NOT NULL
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
ALTER TABLE public.groups OWNER TO jason;
|
|
80
|
+
|
|
81
|
+
--
|
|
82
|
+
-- Name: groups_users; Type: TABLE; Schema: public; Owner: jason
|
|
83
|
+
--
|
|
84
|
+
|
|
85
|
+
CREATE TABLE public.groups_users (
|
|
86
|
+
group_id uuid NOT NULL,
|
|
87
|
+
user_id uuid NOT NULL
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
ALTER TABLE public.groups_users OWNER TO jason;
|
|
92
|
+
|
|
93
|
+
--
|
|
94
|
+
-- Name: identities; Type: TABLE; Schema: public; Owner: jason
|
|
95
|
+
--
|
|
96
|
+
|
|
97
|
+
CREATE TABLE public.identities (
|
|
98
|
+
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
99
|
+
state public.punk_state DEFAULT 'created'::public.punk_state NOT NULL,
|
|
100
|
+
claim_type public.claim_type NOT NULL,
|
|
101
|
+
claim text NOT NULL,
|
|
102
|
+
data jsonb DEFAULT '{}'::jsonb,
|
|
103
|
+
created_at timestamp with time zone,
|
|
104
|
+
updated_at timestamp with time zone,
|
|
105
|
+
user_id uuid
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
ALTER TABLE public.identities OWNER TO jason;
|
|
110
|
+
|
|
111
|
+
--
|
|
112
|
+
-- Name: schema_info; Type: TABLE; Schema: public; Owner: jason
|
|
113
|
+
--
|
|
114
|
+
|
|
115
|
+
CREATE TABLE public.schema_info (
|
|
116
|
+
version integer DEFAULT 0 NOT NULL
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
ALTER TABLE public.schema_info OWNER TO jason;
|
|
121
|
+
|
|
122
|
+
--
|
|
123
|
+
-- Name: sessions; Type: TABLE; Schema: public; Owner: jason
|
|
124
|
+
--
|
|
125
|
+
|
|
126
|
+
CREATE TABLE public.sessions (
|
|
127
|
+
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
128
|
+
slug uuid DEFAULT gen_random_uuid(),
|
|
129
|
+
state public.session_state DEFAULT 'created'::public.session_state NOT NULL,
|
|
130
|
+
salt bytea,
|
|
131
|
+
hash bytea,
|
|
132
|
+
attempt_count integer DEFAULT 0 NOT NULL,
|
|
133
|
+
remote_addr cidr DEFAULT '127.0.0.1/32'::cidr NOT NULL,
|
|
134
|
+
user_agent text DEFAULT 'Mozilla/5.0 (compatible; Punk!; +https://punk.kranzky.com)'::text NOT NULL,
|
|
135
|
+
data jsonb DEFAULT '{}'::jsonb,
|
|
136
|
+
created_at timestamp with time zone,
|
|
137
|
+
updated_at timestamp with time zone,
|
|
138
|
+
identity_id uuid NOT NULL
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
ALTER TABLE public.sessions OWNER TO jason;
|
|
143
|
+
|
|
144
|
+
--
|
|
145
|
+
-- Name: tenants; Type: TABLE; Schema: public; Owner: jason
|
|
146
|
+
--
|
|
147
|
+
|
|
148
|
+
CREATE TABLE public.tenants (
|
|
149
|
+
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
150
|
+
state public.punk_state DEFAULT 'created'::public.punk_state NOT NULL,
|
|
151
|
+
name text NOT NULL,
|
|
152
|
+
icon text,
|
|
153
|
+
data jsonb DEFAULT '{}'::jsonb,
|
|
154
|
+
created_at timestamp with time zone,
|
|
155
|
+
updated_at timestamp with time zone
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
ALTER TABLE public.tenants OWNER TO jason;
|
|
160
|
+
|
|
161
|
+
--
|
|
162
|
+
-- Name: tenants_users; Type: TABLE; Schema: public; Owner: jason
|
|
163
|
+
--
|
|
164
|
+
|
|
165
|
+
CREATE TABLE public.tenants_users (
|
|
166
|
+
tenant_id uuid NOT NULL,
|
|
167
|
+
user_id uuid NOT NULL
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
ALTER TABLE public.tenants_users OWNER TO jason;
|
|
172
|
+
|
|
173
|
+
--
|
|
174
|
+
-- Name: users; Type: TABLE; Schema: public; Owner: jason
|
|
175
|
+
--
|
|
176
|
+
|
|
177
|
+
CREATE TABLE public.users (
|
|
178
|
+
id uuid DEFAULT gen_random_uuid() NOT NULL,
|
|
179
|
+
state public.punk_state DEFAULT 'created'::public.punk_state NOT NULL,
|
|
180
|
+
name text NOT NULL,
|
|
181
|
+
icon text,
|
|
182
|
+
email text,
|
|
183
|
+
phone text,
|
|
184
|
+
data jsonb DEFAULT '{}'::jsonb,
|
|
185
|
+
created_at timestamp with time zone,
|
|
186
|
+
updated_at timestamp with time zone
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
ALTER TABLE public.users OWNER TO jason;
|
|
191
|
+
|
|
192
|
+
--
|
|
193
|
+
-- Name: groups groups_pkey; Type: CONSTRAINT; Schema: public; Owner: jason
|
|
194
|
+
--
|
|
195
|
+
|
|
196
|
+
ALTER TABLE ONLY public.groups
|
|
197
|
+
ADD CONSTRAINT groups_pkey PRIMARY KEY (id);
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
--
|
|
201
|
+
-- Name: groups_users groups_users_pkey; Type: CONSTRAINT; Schema: public; Owner: jason
|
|
202
|
+
--
|
|
203
|
+
|
|
204
|
+
ALTER TABLE ONLY public.groups_users
|
|
205
|
+
ADD CONSTRAINT groups_users_pkey PRIMARY KEY (group_id, user_id);
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
--
|
|
209
|
+
-- Name: identities identities_claim_key; Type: CONSTRAINT; Schema: public; Owner: jason
|
|
210
|
+
--
|
|
211
|
+
|
|
212
|
+
ALTER TABLE ONLY public.identities
|
|
213
|
+
ADD CONSTRAINT identities_claim_key UNIQUE (claim);
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
--
|
|
217
|
+
-- Name: identities identities_pkey; Type: CONSTRAINT; Schema: public; Owner: jason
|
|
218
|
+
--
|
|
219
|
+
|
|
220
|
+
ALTER TABLE ONLY public.identities
|
|
221
|
+
ADD CONSTRAINT identities_pkey PRIMARY KEY (id);
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
--
|
|
225
|
+
-- Name: sessions sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: jason
|
|
226
|
+
--
|
|
227
|
+
|
|
228
|
+
ALTER TABLE ONLY public.sessions
|
|
229
|
+
ADD CONSTRAINT sessions_pkey PRIMARY KEY (id);
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
--
|
|
233
|
+
-- Name: tenants tenants_pkey; Type: CONSTRAINT; Schema: public; Owner: jason
|
|
234
|
+
--
|
|
235
|
+
|
|
236
|
+
ALTER TABLE ONLY public.tenants
|
|
237
|
+
ADD CONSTRAINT tenants_pkey PRIMARY KEY (id);
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
--
|
|
241
|
+
-- Name: tenants_users tenants_users_pkey; Type: CONSTRAINT; Schema: public; Owner: jason
|
|
242
|
+
--
|
|
243
|
+
|
|
244
|
+
ALTER TABLE ONLY public.tenants_users
|
|
245
|
+
ADD CONSTRAINT tenants_users_pkey PRIMARY KEY (tenant_id, user_id);
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
--
|
|
249
|
+
-- Name: users users_email_key; Type: CONSTRAINT; Schema: public; Owner: jason
|
|
250
|
+
--
|
|
251
|
+
|
|
252
|
+
ALTER TABLE ONLY public.users
|
|
253
|
+
ADD CONSTRAINT users_email_key UNIQUE (email);
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
--
|
|
257
|
+
-- Name: users users_phone_key; Type: CONSTRAINT; Schema: public; Owner: jason
|
|
258
|
+
--
|
|
259
|
+
|
|
260
|
+
ALTER TABLE ONLY public.users
|
|
261
|
+
ADD CONSTRAINT users_phone_key UNIQUE (phone);
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
--
|
|
265
|
+
-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: jason
|
|
266
|
+
--
|
|
267
|
+
|
|
268
|
+
ALTER TABLE ONLY public.users
|
|
269
|
+
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
--
|
|
273
|
+
-- Name: groups_users_group_id_user_id_index; Type: INDEX; Schema: public; Owner: jason
|
|
274
|
+
--
|
|
275
|
+
|
|
276
|
+
CREATE INDEX groups_users_group_id_user_id_index ON public.groups_users USING btree (group_id, user_id);
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
--
|
|
280
|
+
-- Name: tenants_users_tenant_id_user_id_index; Type: INDEX; Schema: public; Owner: jason
|
|
281
|
+
--
|
|
282
|
+
|
|
283
|
+
CREATE INDEX tenants_users_tenant_id_user_id_index ON public.tenants_users USING btree (tenant_id, user_id);
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
--
|
|
287
|
+
-- Name: groups groups_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: jason
|
|
288
|
+
--
|
|
289
|
+
|
|
290
|
+
ALTER TABLE ONLY public.groups
|
|
291
|
+
ADD CONSTRAINT groups_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id);
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
--
|
|
295
|
+
-- Name: groups_users groups_users_group_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: jason
|
|
296
|
+
--
|
|
297
|
+
|
|
298
|
+
ALTER TABLE ONLY public.groups_users
|
|
299
|
+
ADD CONSTRAINT groups_users_group_id_fkey FOREIGN KEY (group_id) REFERENCES public.groups(id);
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
--
|
|
303
|
+
-- Name: groups_users groups_users_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: jason
|
|
304
|
+
--
|
|
305
|
+
|
|
306
|
+
ALTER TABLE ONLY public.groups_users
|
|
307
|
+
ADD CONSTRAINT groups_users_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id);
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
--
|
|
311
|
+
-- Name: identities identities_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: jason
|
|
312
|
+
--
|
|
313
|
+
|
|
314
|
+
ALTER TABLE ONLY public.identities
|
|
315
|
+
ADD CONSTRAINT identities_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id);
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
--
|
|
319
|
+
-- Name: sessions sessions_identity_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: jason
|
|
320
|
+
--
|
|
321
|
+
|
|
322
|
+
ALTER TABLE ONLY public.sessions
|
|
323
|
+
ADD CONSTRAINT sessions_identity_id_fkey FOREIGN KEY (identity_id) REFERENCES public.identities(id);
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
--
|
|
327
|
+
-- Name: tenants_users tenants_users_tenant_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: jason
|
|
328
|
+
--
|
|
329
|
+
|
|
330
|
+
ALTER TABLE ONLY public.tenants_users
|
|
331
|
+
ADD CONSTRAINT tenants_users_tenant_id_fkey FOREIGN KEY (tenant_id) REFERENCES public.tenants(id);
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
--
|
|
335
|
+
-- Name: tenants_users tenants_users_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: jason
|
|
336
|
+
--
|
|
337
|
+
|
|
338
|
+
ALTER TABLE ONLY public.tenants_users
|
|
339
|
+
ADD CONSTRAINT tenants_users_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id);
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
--
|
|
343
|
+
-- PostgreSQL database dump complete
|
|
344
|
+
--
|
|
345
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
describe PUNK::ListGroupsAction do
|
|
4
|
+
let(:user) { create(:user) }
|
|
5
|
+
let(:tenant) { create(:tenant) }
|
|
6
|
+
|
|
7
|
+
context 'with no user provided' do
|
|
8
|
+
it 'returns a validation error' do
|
|
9
|
+
view = described_class.run(tenant: tenant).result.render(:json)
|
|
10
|
+
expect(view).to match('user is not present')
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context 'with no tenant provided' do
|
|
15
|
+
it 'returns a validation error' do
|
|
16
|
+
view = described_class.run(user: user).result.render(:json)
|
|
17
|
+
expect(view).to match('tenant is not present')
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context 'with valid arguments' do
|
|
22
|
+
let(:groups) { create_list(:group, 3, tenant: tenant) }
|
|
23
|
+
|
|
24
|
+
before do
|
|
25
|
+
user.add_tenant(tenant)
|
|
26
|
+
groups[0].add_user(user)
|
|
27
|
+
groups[1].add_user(user)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'returns groups for the tenant that the user is a member of' do
|
|
31
|
+
expect(tenant.groups.count).to eq(3)
|
|
32
|
+
view = JSON.parse(described_class.run(user: user, tenant: tenant).result.render(:json))
|
|
33
|
+
expect(view.map { |h| h['id'] }.sort).to eq([groups[0].id, groups[1].id].sort)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
describe PUNK::ClearSessionAction do
|
|
4
|
+
context 'with no session provided' do
|
|
5
|
+
it 'returns a validation error' do
|
|
6
|
+
view = described_class.run.result.render(:json)
|
|
7
|
+
expect(view).to match('session is not present')
|
|
8
|
+
expect(view).to match('session is empty')
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
context 'with an inactive session provided' do
|
|
13
|
+
it 'returns a validation error' do
|
|
14
|
+
session = create(:session)
|
|
15
|
+
view = described_class.run(session: session).result.render(:json)
|
|
16
|
+
expect(view).to match('session is not in active state')
|
|
17
|
+
expect(view).to match('session may not clear')
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context 'with an active session provided' do
|
|
22
|
+
it 'clears the session' do
|
|
23
|
+
session = create(:session, state: :active)
|
|
24
|
+
view = described_class.run(session: session).result.render(:json)
|
|
25
|
+
expect(view).to match('You have been logged out')
|
|
26
|
+
expect(session.deleted?).to be(true)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
describe PUNK::CreateSessionAction do
|
|
4
|
+
let(:remote_addr) { Faker::Internet.ip_v4_address }
|
|
5
|
+
let(:user_agent) { Faker::Internet.user_agent }
|
|
6
|
+
|
|
7
|
+
context 'with no claim provided' do
|
|
8
|
+
it 'returns a validation error' do
|
|
9
|
+
view = described_class.run(remote_addr: remote_addr, user_agent: user_agent).result.render(:json)
|
|
10
|
+
expect(view).to match('claim is not present')
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context 'with an email claim provided' do
|
|
15
|
+
it 'created an identity and a session' do
|
|
16
|
+
email = Faker::Internet.email
|
|
17
|
+
view = described_class.run(claim: email, remote_addr: remote_addr, user_agent: user_agent).result.render(:json)
|
|
18
|
+
session = PUNK::Session.find(slug: ActiveSupport::JSON.decode(view)['slug'])
|
|
19
|
+
expect(session.identity.claim_type).to eq(:email)
|
|
20
|
+
expect(session.identity.claim).to eq(email)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context 'with a phone claim provided' do
|
|
25
|
+
it 'created an identity and a session' do
|
|
26
|
+
phone = generate(:phone)
|
|
27
|
+
view = described_class.run(claim: phone, remote_addr: remote_addr, user_agent: user_agent).result.render(:json)
|
|
28
|
+
session = PUNK::Session.find(slug: ActiveSupport::JSON.decode(view)['slug'])
|
|
29
|
+
expect(session.identity.claim_type).to eq(:phone)
|
|
30
|
+
expect(session.identity.claim).to eq(phone)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
describe PUNK::ListSessionsAction do
|
|
4
|
+
context 'with no user provided' do
|
|
5
|
+
it 'returns a validation error' do
|
|
6
|
+
view = described_class.run.result.render(:json)
|
|
7
|
+
expect(view).to match('user is not present')
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context 'with a user provided' do
|
|
12
|
+
let(:user) { create(:user) }
|
|
13
|
+
let(:identity) { create(:identity, user: user) }
|
|
14
|
+
|
|
15
|
+
before do
|
|
16
|
+
create_list(:session, 3, state: 'active')
|
|
17
|
+
create_list(:session, 3, state: 'active', identity: identity)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'returns active sessions that the user belongs to' do
|
|
21
|
+
expect(PUNK::Session.count).to eq(6)
|
|
22
|
+
view = JSON.parse(described_class.run(user: user).result.render(:json))
|
|
23
|
+
expect(view.map { |h| h['id'] }.sort).to eq(user.active_sessions.map(&:id).sort)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|