Converted sample project into an almost working Svelte / Meteor project. Needs to fix the login/logout code, the camera code, and add Chromebook history when the QR Code is scanned.

This commit is contained in:
2022-04-02 10:29:35 -07:00
parent 9e0e231152
commit 038c68f618
34 changed files with 3997 additions and 101 deletions

25
.idea/watcherTasks.xml generated Normal file
View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectTasksOptions">
<TaskOptions isEnabled="true">
<option name="arguments" value="$FileName$:$FileNameWithoutExtension$.css" />
<option name="checkSyntaxErrors" value="true" />
<option name="description" />
<option name="exitCodeBehavior" value="ERROR" />
<option name="fileExtension" value="sass" />
<option name="immediateSync" value="true" />
<option name="name" value="Sass" />
<option name="output" value="$FileNameWithoutExtension$.css:$FileNameWithoutExtension$.css.map" />
<option name="outputFilters">
<array />
</option>
<option name="outputFromStdout" value="false" />
<option name="program" value="sass" />
<option name="runOnExternalChanges" value="true" />
<option name="scopeName" value="Project Files" />
<option name="trackOnlyRoot" value="true" />
<option name="workingDir" value="$FileDir$" />
<envs />
</TaskOptions>
</component>
</project>

View File

@@ -11,20 +11,22 @@ jquery # Wrapper package for npm-installed jquery
reactive-var@1.0.11 # Reactive variable for tracker reactive-var@1.0.11 # Reactive variable for tracker
tracker@1.2.0 # Meteor's client-side reactive programming library tracker@1.2.0 # Meteor's client-side reactive programming library
standard-minifier-css@1.7.4 # CSS minifier run for production mode standard-minifier-css@1.8.0 # CSS minifier run for production mode
standard-minifier-js@2.8.0 # JS minifier run for production mode standard-minifier-js@2.8.0 # JS minifier run for production mode
es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers
ecmascript@0.16.1 # Enable ECMAScript2015+ syntax in app code ecmascript@0.16.2 # Enable ECMAScript2015+ syntax in app code
typescript@4.4.1 # Enable TypeScript syntax in .ts and .tsx modules typescript@4.5.4 # Enable TypeScript syntax in .ts and .tsx modules
shell-server@0.5.0 # Server-side component of the `meteor shell` command shell-server@0.5.0 # Server-side component of the `meteor shell` command
svelte:compiler svelte:compiler
#static-html@1.3.2
rdb:svelte-meteor-data rdb:svelte-meteor-data
static-html@1.3.2
accounts-ui@1.4.2 accounts-ui@1.4.2
accounts-password@2.2.0 accounts-password@2.3.0
svelte:blaze-integration svelte:blaze-integration
meteortesting:mocha meteortesting:mocha
accounts-google@1.4.0 accounts-google@1.4.0
service-configuration@1.3.0 service-configuration@1.3.0
google-config-ui google-config-ui@1.0.3 # Adds the UI for logging in via Google
alanning:roles # Adds roles to the user
#zodern:melte

View File

@@ -1 +1 @@
METEOR@2.6.1 METEOR@2.7

View File

@@ -1,12 +1,13 @@
accounts-base@2.2.1 accounts-base@2.2.2
accounts-google@1.4.0 accounts-google@1.4.0
accounts-oauth@1.4.0 accounts-oauth@1.4.1
accounts-password@2.2.0 accounts-password@2.3.1
accounts-ui@1.4.2 accounts-ui@1.4.2
accounts-ui-unstyled@1.6.0 accounts-ui-unstyled@1.7.0
alanning:roles@3.4.0
allow-deny@1.1.1 allow-deny@1.1.1
autoupdate@1.8.0 autoupdate@1.8.0
babel-compiler@7.8.1 babel-compiler@7.9.0
babel-runtime@1.5.0 babel-runtime@1.5.0
base64@1.0.12 base64@1.0.12
binary-heap@1.0.11 binary-heap@1.0.11
@@ -24,17 +25,17 @@ ddp-rate-limiter@1.1.0
ddp-server@2.5.0 ddp-server@2.5.0
diff-sequence@1.1.1 diff-sequence@1.1.1
dynamic-import@0.7.2 dynamic-import@0.7.2
ecmascript@0.16.1 ecmascript@0.16.2
ecmascript-runtime@0.8.0 ecmascript-runtime@0.8.0
ecmascript-runtime-client@0.12.1 ecmascript-runtime-client@0.12.1
ecmascript-runtime-server@0.11.0 ecmascript-runtime-server@0.11.0
ejson@1.1.1 ejson@1.1.2
email@2.2.0 email@2.2.1
es5-shim@4.8.0 es5-shim@4.8.0
fetch@0.1.1 fetch@0.1.1
geojson-utils@1.0.10 geojson-utils@1.0.10
google-config-ui@1.0.3 google-config-ui@1.0.3
google-oauth@1.4.1 google-oauth@1.4.2
hot-code-push@1.0.4 hot-code-push@1.0.4
html-tools@1.1.2 html-tools@1.1.2
htmljs@1.1.1 htmljs@1.1.1
@@ -52,19 +53,19 @@ meteortesting:browser-tests@1.3.5
meteortesting:mocha@2.0.3 meteortesting:mocha@2.0.3
meteortesting:mocha-core@8.1.2 meteortesting:mocha-core@8.1.2
minifier-css@1.6.0 minifier-css@1.6.0
minifier-js@2.7.3 minifier-js@2.7.4
minimongo@1.8.0 minimongo@1.8.0
mobile-experience@1.1.0 mobile-experience@1.1.0
mobile-status-bar@1.1.0 mobile-status-bar@1.1.0
modern-browsers@0.1.7 modern-browsers@0.1.7
modules@0.18.0 modules@0.18.0
modules-runtime@0.12.0 modules-runtime@0.13.0
mongo@1.14.6 mongo@1.14.6
mongo-decimal@0.1.2 mongo-decimal@0.1.2
mongo-dev-server@1.1.0 mongo-dev-server@1.1.0
mongo-id@1.0.8 mongo-id@1.0.8
npm-mongo@4.3.1 npm-mongo@4.3.1
oauth@2.1.1 oauth@2.1.2
oauth2@1.3.1 oauth2@1.3.1
observe-sequence@1.0.19 observe-sequence@1.0.19
ordered-dict@1.1.0 ordered-dict@1.1.0
@@ -72,7 +73,7 @@ promise@0.12.0
random@1.2.0 random@1.2.0
rate-limit@1.0.9 rate-limit@1.0.9
rdb:svelte-meteor-data@0.3.1 rdb:svelte-meteor-data@0.3.1
react-fast-refresh@0.2.2 react-fast-refresh@0.2.3
reactive-dict@1.3.0 reactive-dict@1.3.0
reactive-var@1.0.11 reactive-var@1.0.11
reload@1.3.1 reload@1.3.1
@@ -85,9 +86,8 @@ shell-server@0.5.0
socket-stream-client@0.4.0 socket-stream-client@0.4.0
spacebars@1.2.0 spacebars@1.2.0
spacebars-compiler@1.3.0 spacebars-compiler@1.3.0
standard-minifier-css@1.7.4 standard-minifier-css@1.8.1
standard-minifier-js@2.8.0 standard-minifier-js@2.8.0
static-html@1.3.2
svelte:blaze-integration@0.4.0 svelte:blaze-integration@0.4.0
svelte:compiler@3.46.4 svelte:compiler@3.46.4
templating@1.4.1 templating@1.4.1
@@ -95,7 +95,7 @@ templating-compiler@1.4.1
templating-runtime@1.5.0 templating-runtime@1.5.0
templating-tools@1.2.1 templating-tools@1.2.1
tracker@1.2.0 tracker@1.2.0
typescript@4.4.1 typescript@4.5.4
underscore@1.0.10 underscore@1.0.10
url@1.3.2 url@1.3.2
webapp@1.13.1 webapp@1.13.1

View File

@@ -1,9 +1,8 @@
/* CSS declarations go here */ /* CSS declarations go here */
@import url(https://fonts.googleapis.com/css?family=Lato:400,300,300italic,400italic,700,700italic);
body { body {
padding: 10px; padding: 10px;
font-family: sans-serif; font-family: sans-serif;
background-color: #315481;
background-image: linear-gradient(to bottom, #315481, #918e82 100%);
background-attachment: fixed; background-attachment: fixed;
position: absolute; position: absolute;
top: 0; top: 0;
@@ -15,13 +14,6 @@ body {
font-size: 14px; font-size: 14px;
} }
.container {
max-width: 600px;
margin: 0 auto;
min-height: 100%;
background: white;
}
header { header {
background: #d2edf4; background: #d2edf4;
background-image: linear-gradient(to bottom, #d0edf5, #e1e5f0 100%); background-image: linear-gradient(to bottom, #d0edf5, #e1e5f0 100%);
@@ -35,10 +27,8 @@ header {
h1 { h1 {
font-size: 1.5em; font-size: 1.5em;
margin: 0; margin: 0 0 1rem 0;
margin-bottom: 10px;
display: inline-block; display: inline-block;
margin-right: 1em;
} }
form { form {
@@ -122,5 +112,230 @@ header .hide-completed {
padding-bottom: 5px; padding-bottom: 5px;
} }
} }
html, body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
left: 0;
top: 0;
font-size: 100%;
}
/* ROOT FONT STYLES */
* {
font-family: "Lato", Helvetica, sans-serif;
color: #333447;
line-height: 1.5;
}
/* TYPOGRAPHY */
h1 {
font-size: 2.5rem;
}
h2 {
font-size: 2rem;
}
h3 {
font-size: 1.375rem;
}
h4 {
font-size: 1.125rem;
}
h5 {
font-size: 1rem;
}
h6 {
font-size: 0.875rem;
}
p {
font-size: 1.125rem;
font-weight: 200;
line-height: 1.8;
}
.font-light {
font-weight: 300;
}
.font-regular {
font-weight: 400;
}
.font-heavy {
font-weight: 700;
}
/* POSITIONING */
.left {
text-align: left;
}
.right {
text-align: right;
}
.center {
text-align: center;
margin-left: auto;
margin-right: auto;
}
.justify {
text-align: justify;
}
/* ==== GRID SYSTEM ==== */
.container {
width: 90%;
margin-left: auto;
margin-right: auto;
}
.row {
position: relative;
width: 100%;
}
.row [class^=col] {
float: left;
margin: 0.5rem 2%;
min-height: 0.125rem;
}
.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12 {
width: 96%;
}
.col-1-sm {
width: 4.33%;
}
.col-2-sm {
width: 12.66%;
}
.col-3-sm {
width: 21%;
}
.col-4-sm {
width: 29.33%;
}
.col-5-sm {
width: 37.66%;
}
.col-6-sm {
width: 46%;
}
.col-7-sm {
width: 54.33%;
}
.col-8-sm {
width: 62.66%;
}
.col-9-sm {
width: 71%;
}
.col-10-sm {
width: 79.33%;
}
.col-11-sm {
width: 87.66%;
}
.col-12-sm {
width: 96%;
}
.row::after {
content: "";
display: table;
clear: both;
}
.hidden-sm {
display: none;
}
@media only screen and (min-width: 33.75em) {
/* 540px */
.container {
width: 80%;
}
}
@media only screen and (min-width: 45em) {
/* 720px */
.col-1 {
width: 4.33%;
}
.col-2 {
width: 12.66%;
}
.col-3 {
width: 21%;
}
.col-4 {
width: 29.33%;
}
.col-5 {
width: 37.66%;
}
.col-6 {
width: 46%;
}
.col-7 {
width: 54.33%;
}
.col-8 {
width: 62.66%;
}
.col-9 {
width: 71%;
}
.col-10 {
width: 79.33%;
}
.col-11 {
width: 87.66%;
}
.col-12 {
width: 96%;
}
.hidden-sm {
display: block;
}
}
@media only screen and (min-width: 60em) {
/* 960px */
.container {
width: 75%;
max-width: 60rem;
}
}
/*# sourceMappingURL=main.css.map */ /*# sourceMappingURL=main.css.map */

View File

@@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["main.sass"],"names":[],"mappings":"AAAA;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;IACC;;;EAED;IACC;IACA;;;EAED;IACC","file":"main.css"} {"version":3,"sourceRoot":"","sources":["main.sass","simple-grid.sass"],"names":[],"mappings":"AAAA;ACAQ;ADCR;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQD;EACC;EACA;EACA;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;IACC;;;EAED;IACC;IACA;;;EAED;IACC;;;AChGF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;AAEA;EACC;EACA;EACA;;;AAED;AAEA;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;AAEA;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;AAEA;EACC;EACA;EACA;;;AAED;EACC;EACA;;AAEA;EACC;EACA;EACA;;;AAEF;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;AACC;EAEA;IACC;;;AAEF;AACC;EAEA;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;AAEF;AACC;EAEA;IACC;IACA","file":"main.css"}

View File

@@ -2,8 +2,6 @@
body body
padding: 10px padding: 10px
font-family: sans-serif font-family: sans-serif
background-color: #315481
background-image: linear-gradient(to bottom, #315481, #918e82 100%)
background-attachment: fixed background-attachment: fixed
position: absolute position: absolute
top: 0 top: 0
@@ -14,11 +12,11 @@ body
margin: 0 margin: 0
font-size: 14px font-size: 14px
.container //.container
max-width: 600px // max-width: 600px
margin: 0 auto // margin: 0 auto
min-height: 100% // min-height: 100%
background: white // background: white
header header
background: #d2edf4 background: #d2edf4
@@ -31,10 +29,8 @@ header
h1 h1
font-size: 1.5em font-size: 1.5em
margin: 0 margin: 0 0 1rem 0
margin-bottom: 10px
display: inline-block display: inline-block
margin-right: 1em
form form
margin-top: 10px margin-top: 10px
@@ -101,3 +97,5 @@ header .hide-completed
.new-task input .new-task input
padding-bottom: 5px padding-bottom: 5px
@import "./simple-grid.sass"

228
client/simple-grid.css Normal file
View File

@@ -0,0 +1,228 @@
@import url(https://fonts.googleapis.com/css?family=Lato:400,300,300italic,400italic,700,700italic);
html, body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
left: 0;
top: 0;
font-size: 100%;
}
/* ROOT FONT STYLES */
* {
font-family: "Lato", Helvetica, sans-serif;
color: #333447;
line-height: 1.5;
}
/* TYPOGRAPHY */
h1 {
font-size: 2.5rem;
}
h2 {
font-size: 2rem;
}
h3 {
font-size: 1.375rem;
}
h4 {
font-size: 1.125rem;
}
h5 {
font-size: 1rem;
}
h6 {
font-size: 0.875rem;
}
p {
font-size: 1.125rem;
font-weight: 200;
line-height: 1.8;
}
.font-light {
font-weight: 300;
}
.font-regular {
font-weight: 400;
}
.font-heavy {
font-weight: 700;
}
/* POSITIONING */
.left {
text-align: left;
}
.right {
text-align: right;
}
.center {
text-align: center;
margin-left: auto;
margin-right: auto;
}
.justify {
text-align: justify;
}
/* ==== GRID SYSTEM ==== */
.container {
width: 90%;
margin-left: auto;
margin-right: auto;
}
.row {
position: relative;
width: 100%;
}
.row [class^=col] {
float: left;
margin: 0.5rem 2%;
min-height: 0.125rem;
}
.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12 {
width: 96%;
}
.col-1-sm {
width: 4.33%;
}
.col-2-sm {
width: 12.66%;
}
.col-3-sm {
width: 21%;
}
.col-4-sm {
width: 29.33%;
}
.col-5-sm {
width: 37.66%;
}
.col-6-sm {
width: 46%;
}
.col-7-sm {
width: 54.33%;
}
.col-8-sm {
width: 62.66%;
}
.col-9-sm {
width: 71%;
}
.col-10-sm {
width: 79.33%;
}
.col-11-sm {
width: 87.66%;
}
.col-12-sm {
width: 96%;
}
.row::after {
content: "";
display: table;
clear: both;
}
.hidden-sm {
display: none;
}
@media only screen and (min-width: 33.75em) {
/* 540px */
.container {
width: 80%;
}
}
@media only screen and (min-width: 45em) {
/* 720px */
.col-1 {
width: 4.33%;
}
.col-2 {
width: 12.66%;
}
.col-3 {
width: 21%;
}
.col-4 {
width: 29.33%;
}
.col-5 {
width: 37.66%;
}
.col-6 {
width: 46%;
}
.col-7 {
width: 54.33%;
}
.col-8 {
width: 62.66%;
}
.col-9 {
width: 71%;
}
.col-10 {
width: 79.33%;
}
.col-11 {
width: 87.66%;
}
.col-12 {
width: 96%;
}
.hidden-sm {
display: block;
}
}
@media only screen and (min-width: 60em) {
/* 960px */
.container {
width: 75%;
max-width: 60rem;
}
}
/*# sourceMappingURL=simple-grid.css.map */

View File

@@ -0,0 +1 @@
{"version":3,"sourceRoot":"","sources":["simple-grid.sass"],"names":[],"mappings":"AAAQ;AAER;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;AAEA;EACC;EACA;EACA;;;AAED;AAEA;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;AAEA;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;AAEA;EACC;EACA;EACA;;;AAED;EACC;EACA;;AAEA;EACC;EACA;EACA;;;AAEF;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;AACC;EAEA;IACC;;;AAEF;AACC;EAEA;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;EAED;IACC;;;AAEF;AACC;EAEA;IACC;IACA","file":"simple-grid.css"}

185
client/simple-grid.sass Normal file
View File

@@ -0,0 +1,185 @@
@import url(https://fonts.googleapis.com/css?family=Lato:400,300,300italic,400italic,700,700italic)
html, body
height: 100%
width: 100%
margin: 0
padding: 0
left: 0
top: 0
font-size: 100%
/* ROOT FONT STYLES
*
font-family: 'Lato', Helvetica, sans-serif
color: #333447
line-height: 1.5
/* TYPOGRAPHY
h1
font-size: 2.5rem
h2
font-size: 2rem
h3
font-size: 1.375rem
h4
font-size: 1.125rem
h5
font-size: 1rem
h6
font-size: 0.875rem
p
font-size: 1.125rem
font-weight: 200
line-height: 1.8
.font-light
font-weight: 300
.font-regular
font-weight: 400
.font-heavy
font-weight: 700
/* POSITIONING
.left
text-align: left
.right
text-align: right
.center
text-align: center
margin-left: auto
margin-right: auto
.justify
text-align: justify
/* ==== GRID SYSTEM ====
.container
width: 90%
margin-left: auto
margin-right: auto
.row
position: relative
width: 100%
[class^="col"]
float: left
margin: 0.5rem 2%
min-height: 0.125rem
.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12
width: 96%
.col-1-sm
width: 4.33%
.col-2-sm
width: 12.66%
.col-3-sm
width: 21%
.col-4-sm
width: 29.33%
.col-5-sm
width: 37.66%
.col-6-sm
width: 46%
.col-7-sm
width: 54.33%
.col-8-sm
width: 62.66%
.col-9-sm
width: 71%
.col-10-sm
width: 79.33%
.col-11-sm
width: 87.66%
.col-12-sm
width: 96%
.row::after
content: ""
display: table
clear: both
.hidden-sm
display: none
@media only screen and (min-width: 33.75em)
/* 540px
.container
width: 80%
@media only screen and (min-width: 45em)
/* 720px
.col-1
width: 4.33%
.col-2
width: 12.66%
.col-3
width: 21%
.col-4
width: 29.33%
.col-5
width: 37.66%
.col-6
width: 46%
.col-7
width: 54.33%
.col-8
width: 62.66%
.col-9
width: 71%
.col-10
width: 79.33%
.col-11
width: 87.66%
.col-12
width: 96%
.hidden-sm
display: block
@media only screen and (min-width: 60em)
/* 960px
.container
width: 75%
max-width: 60rem

View File

@@ -0,0 +1,52 @@
import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import { check } from 'meteor/check';
import { MongoClient } from 'mongodb';
//export const Records = new Mongo.Collection('records');
let client;
let database;
let dataCollection;
if (Meteor.isServer) {
let uri = process.env.MONGO_URL2;
client = new MongoClient(uri);
database = client.db("avusd-data-collection");
dataCollection = database.collection("records");
// This code only runs on the server
Meteor.publish('chromebookData', function(deviceId) {
check(deviceId, String);
return dataCollection.find({deviceId});
});
}
Meteor.methods({
// 'tasks.setChecked'(taskId, setChecked) {
// check(taskId, String);
// check(setChecked, Boolean);
//
// const task = Tasks.findOne(taskId);
// if (task.private && task.owner !== this.userId) {
// // If the task is private, make sure only the owner can check it off
// throw new Meteor.Error('not-authorized');
// }
//
// Tasks.update(taskId, { $set: { checked: setChecked } });
// },
// 'tasks.setPrivate'(taskId, setToPrivate) {
// check(taskId, String);
// check(setToPrivate, Boolean);
//
// const task = Tasks.findOne(taskId);
//
// // Make sure only the task owner can make a task private
// if (task.owner !== this.userId) {
// throw new Meteor.Error('not-authorized');
// }
//
// Tasks.update(taskId, { $set: { private: setToPrivate } });
// },
});

View File

@@ -2,9 +2,21 @@ import { Meteor } from 'meteor/meteor';
if (Meteor.isServer) { if (Meteor.isServer) {
Meteor.methods({ Meteor.publish(null, function() {
'users.login'() { if(this.userId) {
console.log("Login Called."); return Meteor.roleAssignment.find({'user._id': this.userId});
} }
}); else {
this.ready();
}
})
// Meteor.methods({
// 'users.setupInitialRoles'() {
// Roles.createRole('admin');
// Roles.createRole('laptop-management');
// Roles.addRolesToParent('laptop-management', 'admin');
// Roles.addUsersToRoles("zwbMiaSKHix4bWQ8d", 'admin', 'global');
// }
// });
} }

View File

@@ -1,8 +1,10 @@
import { Accounts } from 'meteor/accounts-base' import { Accounts } from 'meteor/accounts-base'
if(Meteor.isCLient) {
Accounts.ui.config({ Accounts.ui.config({
passwordSignupFields: 'USERNAME_ONLY' passwordSignupFields: 'USERNAME_ONLY'
}); });
}
Accounts.config({ Accounts.config({
restrictCreationByEmailDomain: function(address) { restrictCreationByEmailDomain: function(address) {

5
imports/ui/App.css Normal file
View File

@@ -0,0 +1,5 @@
nav {
font-size: 1.4rem;
}
/*# sourceMappingURL=App.css.map */

1
imports/ui/App.css.map Normal file
View File

@@ -0,0 +1 @@
{"version":3,"sourceRoot":"","sources":["App.sass"],"names":[],"mappings":"AAAA;EACC","file":"App.css"}

2
imports/ui/App.sass Normal file
View File

@@ -0,0 +1,2 @@
nav
font-size: 1.4rem

View File

@@ -1,12 +1,159 @@
<style>
nav {
font-size: 2rem;
}
a {
display: block;
color: green;
text-decoration: none;
}
html {
background-color: #000121;
font-family: 'Roboto', sans-serif;
}
/** Forbidden CSS */
.maincontainer {
position: relative;
top: -50px;
transform: scale(0.8);
background: url("/public/images/forbidden/HauntedHouseBackground.png");
background-repeat: no-repeat;
background-position: center;
background-size: 700px 600px;
width: 800px;
height: 600px;
margin: 0px auto;
display: grid;
}
.foregroundimg {
position: relative;
width: 100%;
top: -230px;
z-index: 5;
}
.errorcode {
position: relative;
top: -200px;
font-family: 'Creepster', cursive;
color: white;
text-align: center;
font-size: 6em;
letter-spacing: 0.1em;
}
.errortext {
position: relative;
top: -260px;
color: #FBD130;
text-align: center;
text-transform: uppercase;
font-size: 1.8em;
}
.bat {
opacity: 0;
position: relative;
transform-origin: center;
z-index: 3;
}
.bat:nth-child(1) {
top: 380px;
left: 120px;
transform: scale(0.5);
animation: 13s 1s flyBat1 infinite linear;
}
.bat:nth-child(2) {
top: 280px;
left: 80px;
transform: scale(0.3);
animation: 8s 4s flyBat2 infinite linear;
}
.bat:nth-child(3) {
top: 200px;
left: 150px;
transform: scale(0.4);
animation: 12s 2s flyBat3 infinite linear;
}
.body {
position: relative;
width: 50px;
top: 12px;
}
.wing {
width: 150px;
position: relative;
transform-origin: right center;
}
.leftwing {
left: 30px;
animation: 0.8s flapLeft infinite ease-in-out;
}
.rightwing {
left: -180px;
transform: scaleX(-1);
animation: 0.8s flapRight infinite ease-in-out;
}
@keyframes flapLeft {
0% { transform: rotateZ(0); }
50% { transform: rotateZ(10deg) rotateY(40deg); }
100% { transform: rotateZ(0); }
}
@keyframes flapRight {
0% { transform: scaleX(-1) rotateZ(0); }
50% { transform: scaleX(-1) rotateZ(10deg) rotateY(40deg); }
100% { transform: scaleX(-1) rotateZ(0); }
}
@keyframes flyBat1 {
0% { opacity: 1; transform: scale(0.5)}
25% { opacity: 1; transform: scale(0.5) translate(-400px, -330px) }
50% { opacity: 1; transform: scale(0.5) translate(400px, -800px) }
75% { opacity: 1; transform: scale(0.5) translate(600px, 100px) }
100% { opacity: 1; transform: scale(0.5) translate(100px, 300px) }
}
@keyframes flyBat2 {
0% { opacity: 1; transform: scale(0.3)}
25% { opacity: 1; transform: scale(0.3) translate(200px, -330px) }
50% { opacity: 1; transform: scale(0.3) translate(-300px, -800px) }
75% { opacity: 1; transform: scale(0.3) translate(-400px, 100px) }
100% { opacity: 1; transform: scale(0.3) translate(100px, 300px) }
}
@keyframes flyBat3 {
0% { opacity: 1; transform: scale(0.4)}
25% { opacity: 1; transform: scale(0.4) translate(-350px, -330px) }
50% { opacity: 1; transform: scale(0.4) translate(400px, -800px) }
75% { opacity: 1; transform: scale(0.4) translate(-600px, 100px) }
100% { opacity: 1; transform: scale(0.4) translate(100px, 300px) }
}
/*@media only screen and (max-width: 850px) {
.maincontainer {
transform: scale(0.6);
width: 600px;
height: 400px;
background-size: 600px 400px;
}
.errortext {
font-size: 1em;
}
}*/
</style>
<script> <script>
import {Meteor} from "meteor/meteor"; import {Meteor} from "meteor/meteor";
import {Route} from 'tinro';
import {onMount} from 'svelte'; import {onMount} from 'svelte';
import {useTracker} from 'meteor/rdb:svelte-meteor-data'; import {useTracker} from 'meteor/rdb:svelte-meteor-data';
import {Roles} from 'meteor/alanning:roles';
import Chromebooks from './Chromebooks.svelte';
import {BlazeTemplate} from 'meteor/svelte:blaze-integration'; import {BlazeTemplate} from 'meteor/svelte:blaze-integration';
import {Records} from '../api/records.js' import {Records} from '../api/records.js'
import ServiceConfiguration from "meteor/service-configuration"; import ServiceConfiguration from "meteor/service-configuration";
let currentUser; //import './imports/ui/App.css';
//let currentUser;
onMount(async () => { onMount(async () => {
// Meteor.subscribe('records'); // Meteor.subscribe('records');
@@ -15,6 +162,18 @@
// $: incompleteCount = useTracker(() => Tasks.find({checked: {$ne: true}}).count()); // $: incompleteCount = useTracker(() => Tasks.find({checked: {$ne: true}}).count());
$: currentUser = useTracker(() => Meteor.user()); $: currentUser = useTracker(() => Meteor.user());
$: isAdmin = useTracker(() => Roles.userIsInRole(currentUser._id, 'laptop-management', 'global'));
// Tracker.autorun(() => {
// let user = Meteor.user();
// let isManagement = user ? Roles.userIsInRole(user._id, 'laptop-management', 'global') : 0;
//
// if(user && isManagement) {
// new ProcessLaptops({
// target: document.getElementById('appView')
// });
// }
// });
// const taskStore = Tasks.find({}, {sort: {createdAt: -1}}); // const taskStore = Tasks.find({}, {sort: {createdAt: -1}});
// $: { // $: {
@@ -45,43 +204,66 @@
function performLogout() { function performLogout() {
Meteor.logout(); Meteor.logout();
} }
</script> </script>
<Route path="/">
<div class="container"> <div class="container">
<header> <header class="row">
<!-- <h1>Todo List ({ $incompleteCount })</h1>--> <nav class="col-12 center">
<!-- <label className="hide-completed">--> <h1>AVUSD District Central</h1>
<!-- <input--> <a href="/">Home</a>
<!-- type="checkbox"--> {#if isAdmin}
<!-- bind:checked={hideCompleted}--> <a href="/chromebooks">Chromebooks</a>
<!-- />--> {/if}
<!-- Hide Completed Tasks--> </nav>
<!-- </label>-->
<!-- <BlazeTemplate template="loginButtons"/>-->
{#if !$currentUser} {#if !$currentUser}
<button type="button" on:click={performLogin}>Login</button> <button type="button" on:click={performLogin}>Login</button>
{:else} {:else}
<button type="button" on:click={performLogout}>Logout</button> <button type="button" on:click={performLogout}>Logout</button>
{/if} {/if}
<!--{#if $currentUser}-->
<!-- <form class="new-task" on:submit|preventDefault={handleSubmit}>-->
<!-- <input-->
<!-- type="text"-->
<!-- placeholder="Type to add new tasks"-->
<!-- bind:value={newTask}-->
<!-- />-->
<!-- </form>-->
<!--{/if}-->
</header> </header>
<ul>
<!--{#each tasks as task}-->
<!-- <Task-->
<!-- key={task._id}-->
<!-- task={task}-->
<!-- />-->
<!--{/each}-->
</ul>
</div> </div>
</Route>
{#if $currentUser}
{#if isAdmin}
<Route path="/chromebooks/*">
<Chromebooks/>
</Route>
{:else}
<Route fallback redirect="/"/>
{/if}
{:else}
<div className="container" style="background-color: #4d4242">
<div class="maincontainer row">
<div class="bat">
<img class="wing leftwing"
src="/images/forbidden/bat-wing.png">
<img class="body"
src="/images/forbidden/bat-body.png" alt="bat">
<img class="wing rightwing"
src="/images/forbidden/bat-wing.png">
</div>
<div class="bat">
<img class="wing leftwing"
src="/images/forbidden/bat-wing.png">
<img class="body"
src="/images/forbidden/bat-body.png" alt="bat">
<img class="wing rightwing"
src="/images/forbidden/bat-wing.png">
</div>
<div class="bat">
<img class="wing leftwing"
src="/images/forbidden/bat-wing.png">
<img class="body"
src="/images/forbidden/bat-body.png" alt="bat">
<img class="wing rightwing"
src="/images/forbidden/bat-wing.png">
</div>
<img class="foregroundimg" src="/images/forbidden/HauntedHouseForeground.png" alt="haunted house">
</div>
<h1 class="errorcode">ERROR 403</h1>
<div class="errortext">This area is forbidden. Turn back now!</div>
</div>
{/if}

View File

@@ -0,0 +1,41 @@
<style>
.error {
color: darkred;
}
</style>
<script>
import {Html5QrcodeScanner} from "html5-qrcode";
function onScanSuccess(decodedText, decodedResult) {
console.log('Code matched ' + decodedResult);
document.getElementById("log").prepend(decodedText);
}
function onScanFailure(error) {
}
function scanner() {
let html5QrcodeScanner = new Html5QrcodeScanner("reader", {
fps: 10,
qrbox: {width: 250, height: 250}
}, /* verbose */ false);
html5QrcodeScanner.render(onScanSuccess, onScanFailure);
}
</script>
<div className="container">
<div class="row">
Hello World!
</div>
<div class="row">
<div use:scanner id="reader" width="300px"></div>
</div>
<div class="row">
<div id="log" class="col-12">
</div>
</div>
</div>

View File

@@ -0,0 +1,34 @@
<style>
nav {
font-size: 2rem;
}
a {
display: block;
color: green;
text-decoration: none;
}
</style>
<script>
import {Route} from 'tinro';
import ChromebookScan from './ChromebookScan.svelte';
</script>
<Route path="/">
<div className="container">
<div class="row">
<nav class="col-12 center">
<h1>Chromebook Management</h1>
<a href="chromebooks/scan">Scan A Chromebook</a>
<a href="chromebooks/byStudent">Chromebook History By Student</a>
<a href="chromebooks/byChromebook">Chromebook History By Chromebook</a>
</nav>
</div>
</div>
</Route>
<Route path="/scan">
<ChromebookScan/>
</Route>
<Route path="/byStudent">TODO: Use student email to look up Chromebook history</Route>
<Route path="/byChromebook">TODO: Use chromebook ID (or picture of ID) to look up Chromebook history</Route>

View File

@@ -0,0 +1,12 @@
<script>
import {Meteor} from "meteor/meteor";
import {onMount} from 'svelte';
onMount(async () => {
// Meteor.subscribe('records');
});
</script>
<div class="container">
<h1>Process Laptops</h1>
</div>

2
imports/util/JsBarcode.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2363
imports/util/qrious.js Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

6
imports/util/qrious.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

463
package-lock.json generated
View File

@@ -8,13 +8,17 @@
"dependencies": { "dependencies": {
"@babel/runtime": "^7.16.7", "@babel/runtime": "^7.16.7",
"connect-route": "^0.1.5", "connect-route": "^0.1.5",
"html5-qrcode": "^2.2.0",
"jquery": "^3.6.0", "jquery": "^3.6.0",
"meteor-node-stubs": "^1.0.0", "meteor-node-stubs": "^1.0.0",
"mongodb": "^4.4.1",
"svelte": "^3.46.4", "svelte": "^3.46.4",
"tinro": "^0.6.12",
"ws": "^8.4.2" "ws": "^8.4.2"
}, },
"devDependencies": { "devDependencies": {
"chai": "^4.2.0" "chai": "^4.2.0",
"rollup-plugin-css-only": "^3.1.0"
} }
}, },
"node_modules/@babel/runtime": { "node_modules/@babel/runtime": {
@@ -28,6 +32,38 @@
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@rollup/pluginutils": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.0.tgz",
"integrity": "sha512-2WUyJNRkyH5p487pGnn4tWAsxhEFKN/pT8CMgHshd5H+IXkOnKvKZwsz5ZWz+YCXkleZRAU5kwbfgF8CPfDRqA==",
"dev": true,
"dependencies": {
"estree-walker": "^2.0.1",
"picomatch": "^2.2.2"
},
"engines": {
"node": ">= 8.0.0"
}
},
"node_modules/@types/node": {
"version": "17.0.23",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz",
"integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw=="
},
"node_modules/@types/webidl-conversions": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz",
"integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q=="
},
"node_modules/@types/whatwg-url": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz",
"integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==",
"dependencies": {
"@types/node": "*",
"@types/webidl-conversions": "*"
}
},
"node_modules/assertion-error": { "node_modules/assertion-error": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
@@ -37,6 +73,59 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
},
"node_modules/bson": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/bson/-/bson-4.6.2.tgz",
"integrity": "sha512-VeJKHShcu1b/ugl0QiujlVuBepab714X9nNyBdA1kfekuDGecxgpTA2Z6nYbagrWFeiIyzSWIOzju3lhj+RNyQ==",
"dependencies": {
"buffer": "^5.6.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"node_modules/chai": { "node_modules/chai": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
@@ -83,6 +172,20 @@
"node": ">=0.12" "node": ">=0.12"
} }
}, },
"node_modules/denque": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz",
"integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==",
"engines": {
"node": ">=0.10"
}
},
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true
},
"node_modules/get-func-name": { "node_modules/get-func-name": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
@@ -92,11 +195,46 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/html5-qrcode": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/html5-qrcode/-/html5-qrcode-2.2.0.tgz",
"integrity": "sha512-8fkxks2N0NEfHnhxmq7AQnDTvx3IWp0VD2h5yhHufDTflWhC1dXPy/Xvdl+tA9nOsPCRqirOOZpl/OQbTYhnSw=="
},
"node_modules/ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
},
"node_modules/ip": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
"integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
},
"node_modules/jquery": { "node_modules/jquery": {
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
"integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
}, },
"node_modules/memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
"optional": true
},
"node_modules/meteor-node-stubs": { "node_modules/meteor-node-stubs": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz", "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz",
@@ -781,6 +919,32 @@
"node": ">=0.4" "node": ">=0.4"
} }
}, },
"node_modules/mongodb": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.4.1.tgz",
"integrity": "sha512-IAD3nFtCR4s22vi5qjqkCBnuyDDrOW8WVSSmgHquOvGaP1iTD+XpC5tr8wAUbZ2EeZkaswwBKQFHDvl4qYcKqQ==",
"dependencies": {
"bson": "^4.6.1",
"denque": "^2.0.1",
"mongodb-connection-string-url": "^2.5.2",
"socks": "^2.6.2"
},
"engines": {
"node": ">=12.9.0"
},
"optionalDependencies": {
"saslprep": "^1.0.3"
}
},
"node_modules/mongodb-connection-string-url": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz",
"integrity": "sha512-tWDyIG8cQlI5k3skB6ywaEA5F9f5OntrKKsT/Lteub2zgwSUlhqEN2inGgBTm8bpYJf8QYBdA/5naz65XDpczA==",
"dependencies": {
"@types/whatwg-url": "^8.2.1",
"whatwg-url": "^11.0.0"
}
},
"node_modules/pathval": { "node_modules/pathval": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
@@ -790,11 +954,89 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"engines": {
"node": ">=6"
}
},
"node_modules/regenerator-runtime": { "node_modules/regenerator-runtime": {
"version": "0.13.9", "version": "0.13.9",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
}, },
"node_modules/rollup-plugin-css-only": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz",
"integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==",
"dev": true,
"dependencies": {
"@rollup/pluginutils": "4"
},
"engines": {
"node": ">=10.12.0"
},
"peerDependencies": {
"rollup": "1 || 2"
}
},
"node_modules/saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
"optional": true,
"dependencies": {
"sparse-bitfield": "^3.0.3"
},
"engines": {
"node": ">=6"
}
},
"node_modules/smart-buffer": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
}
},
"node_modules/socks": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz",
"integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==",
"dependencies": {
"ip": "^1.1.5",
"smart-buffer": "^4.2.0"
},
"engines": {
"node": ">= 10.13.0",
"npm": ">= 3.0.0"
}
},
"node_modules/sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
"optional": true,
"dependencies": {
"memory-pager": "^1.0.2"
}
},
"node_modules/svelte": { "node_modules/svelte": {
"version": "3.46.4", "version": "3.46.4",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.46.4.tgz", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.46.4.tgz",
@@ -803,6 +1045,22 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/tinro": {
"version": "0.6.12",
"resolved": "https://registry.npmjs.org/tinro/-/tinro-0.6.12.tgz",
"integrity": "sha512-YYLh0a21GXXpS66ilZbywfXcPTKQQ+bv3tihoqKqSFQP6/F11N7ZmtRbFWcyZXXPFRSzNxmPJBB8ZhP0GkoS0Q=="
},
"node_modules/tr46": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
"dependencies": {
"punycode": "^2.1.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/type-detect": { "node_modules/type-detect": {
"version": "4.0.8", "version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -812,6 +1070,26 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"engines": {
"node": ">=12"
}
},
"node_modules/whatwg-url": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
"integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
"dependencies": {
"tr46": "^3.0.0",
"webidl-conversions": "^7.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/ws": { "node_modules/ws": {
"version": "8.4.2", "version": "8.4.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz",
@@ -842,12 +1120,63 @@
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.13.4"
} }
}, },
"@rollup/pluginutils": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.0.tgz",
"integrity": "sha512-2WUyJNRkyH5p487pGnn4tWAsxhEFKN/pT8CMgHshd5H+IXkOnKvKZwsz5ZWz+YCXkleZRAU5kwbfgF8CPfDRqA==",
"dev": true,
"requires": {
"estree-walker": "^2.0.1",
"picomatch": "^2.2.2"
}
},
"@types/node": {
"version": "17.0.23",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz",
"integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw=="
},
"@types/webidl-conversions": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz",
"integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q=="
},
"@types/whatwg-url": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz",
"integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==",
"requires": {
"@types/node": "*",
"@types/webidl-conversions": "*"
}
},
"assertion-error": { "assertion-error": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true "dev": true
}, },
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"bson": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/bson/-/bson-4.6.2.tgz",
"integrity": "sha512-VeJKHShcu1b/ugl0QiujlVuBepab714X9nNyBdA1kfekuDGecxgpTA2Z6nYbagrWFeiIyzSWIOzju3lhj+RNyQ==",
"requires": {
"buffer": "^5.6.0"
}
},
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"chai": { "chai": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
@@ -882,17 +1211,49 @@
"type-detect": "^4.0.0" "type-detect": "^4.0.0"
} }
}, },
"denque": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz",
"integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ=="
},
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true
},
"get-func-name": { "get-func-name": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true "dev": true
}, },
"html5-qrcode": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/html5-qrcode/-/html5-qrcode-2.2.0.tgz",
"integrity": "sha512-8fkxks2N0NEfHnhxmq7AQnDTvx3IWp0VD2h5yhHufDTflWhC1dXPy/Xvdl+tA9nOsPCRqirOOZpl/OQbTYhnSw=="
},
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"ip": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
"integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
},
"jquery": { "jquery": {
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
"integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
}, },
"memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
"optional": true
},
"meteor-node-stubs": { "meteor-node-stubs": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz", "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz",
@@ -1454,28 +1815,128 @@
} }
} }
}, },
"mongodb": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.4.1.tgz",
"integrity": "sha512-IAD3nFtCR4s22vi5qjqkCBnuyDDrOW8WVSSmgHquOvGaP1iTD+XpC5tr8wAUbZ2EeZkaswwBKQFHDvl4qYcKqQ==",
"requires": {
"bson": "^4.6.1",
"denque": "^2.0.1",
"mongodb-connection-string-url": "^2.5.2",
"saslprep": "^1.0.3",
"socks": "^2.6.2"
}
},
"mongodb-connection-string-url": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz",
"integrity": "sha512-tWDyIG8cQlI5k3skB6ywaEA5F9f5OntrKKsT/Lteub2zgwSUlhqEN2inGgBTm8bpYJf8QYBdA/5naz65XDpczA==",
"requires": {
"@types/whatwg-url": "^8.2.1",
"whatwg-url": "^11.0.0"
}
},
"pathval": { "pathval": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true "dev": true
}, },
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"regenerator-runtime": { "regenerator-runtime": {
"version": "0.13.9", "version": "0.13.9",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
}, },
"rollup-plugin-css-only": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz",
"integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==",
"dev": true,
"requires": {
"@rollup/pluginutils": "4"
}
},
"saslprep": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
"optional": true,
"requires": {
"sparse-bitfield": "^3.0.3"
}
},
"smart-buffer": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
},
"socks": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz",
"integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==",
"requires": {
"ip": "^1.1.5",
"smart-buffer": "^4.2.0"
}
},
"sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
"optional": true,
"requires": {
"memory-pager": "^1.0.2"
}
},
"svelte": { "svelte": {
"version": "3.46.4", "version": "3.46.4",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.46.4.tgz", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.46.4.tgz",
"integrity": "sha512-qKJzw6DpA33CIa+C/rGp4AUdSfii0DOTCzj/2YpSKKayw5WGSS624Et9L1nU1k2OVRS9vaENQXp2CVZNU+xvIg==" "integrity": "sha512-qKJzw6DpA33CIa+C/rGp4AUdSfii0DOTCzj/2YpSKKayw5WGSS624Et9L1nU1k2OVRS9vaENQXp2CVZNU+xvIg=="
}, },
"tinro": {
"version": "0.6.12",
"resolved": "https://registry.npmjs.org/tinro/-/tinro-0.6.12.tgz",
"integrity": "sha512-YYLh0a21GXXpS66ilZbywfXcPTKQQ+bv3tihoqKqSFQP6/F11N7ZmtRbFWcyZXXPFRSzNxmPJBB8ZhP0GkoS0Q=="
},
"tr46": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
"requires": {
"punycode": "^2.1.1"
}
},
"type-detect": { "type-detect": {
"version": "4.0.8", "version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true "dev": true
}, },
"webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
},
"whatwg-url": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
"integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
"requires": {
"tr46": "^3.0.0",
"webidl-conversions": "^7.0.0"
}
},
"ws": { "ws": {
"version": "8.4.2", "version": "8.4.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz",

View File

@@ -11,9 +11,12 @@
"dependencies": { "dependencies": {
"@babel/runtime": "^7.16.7", "@babel/runtime": "^7.16.7",
"connect-route": "^0.1.5", "connect-route": "^0.1.5",
"html5-qrcode": "^2.2.0",
"jquery": "^3.6.0", "jquery": "^3.6.0",
"meteor-node-stubs": "^1.0.0", "meteor-node-stubs": "^1.0.0",
"mongodb": "^4.4.1",
"svelte": "^3.46.4", "svelte": "^3.46.4",
"tinro": "^0.6.12",
"ws": "^8.4.2" "ws": "^8.4.2"
}, },
"meteor": { "meteor": {
@@ -21,9 +24,25 @@
"client": "client/main.js", "client": "client/main.js",
"server": "server/main.js" "server": "server/main.js"
}, },
"testModule": "tests/main.js" "testModule": "tests/main.js",
"nodeModules": {
"recompile": {
"svelte": [
"legacy"
]
}
}
},
"svelte:compiler": {
"extensions": [
"svelte",
"html"
],
"hydratable": true,
"css": true
}, },
"devDependencies": { "devDependencies": {
"chai": "^4.2.0" "chai": "^4.2.0",
"rollup-plugin-css-only": "^3.1.0"
} }
} }

BIN
public/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1,6 +1,9 @@
# Login # Login
## Google ## Google
This app is using the Google (oauth2) API to manage logins. To do that you have to have a service configuration in the database. Place the following in the XXX collection: This app is using the Google (oauth2) API to manage logins. To do that you have to have a service configuration in the database. Place the following in the XXX collection:
``` ```
{ {
service: 'google', service: 'google',
@@ -8,3 +11,45 @@ This app is using the Google (oauth2) API to manage logins. To do that you have
secret: 'xxx' secret: 'xxx'
} }
``` ```
# Roles
We are using the alanning:roles package to manage roles and attach them to users. Currently the project has no way to bootstrap the roles and assignment of an initial admin role. To work around this first log in with a user you want to be admin (so a user record exists), then get the _id of the user you created, and then use the following MongoDB queries to set things up:
```json
use DistrictCentral
db.createCollection("roles")
db.roles.insertMany([
{
"_id": "laptop-management",
"children": []
},
{
"_id": "admin",
"children": [
{
"_id": "laptop-management"
}
]
}
])
db.createCollection('role-assignment')
db.role-assignment.insert({
"role": {
"_id": "admin"
},
"scope": "global",
"user": {
"_id": "zwbMiaSKHix4bWQ8d"
},
"inheritedRoles": [
{
"_id": "admin"
},
{
"_id": "laptop-management"
}
]
})
```

View File

@@ -1,5 +1,6 @@
import '../imports/api/'; import '../imports/api/';
import './google-oauth.js'; import './google-oauth.js';
import '/imports/startup/accounts-config.js';
import url from 'url'; import url from 'url';
//import './google-oauth.js'; //import './google-oauth.js';