Skip to content

Commit

Permalink
Release v2.1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
remzh committed Oct 18, 2021
1 parent 3c8738d commit a374490
Show file tree
Hide file tree
Showing 34 changed files with 198 additions and 134 deletions.
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,17 @@ Demo Account|The /signin/demo page will not work.|This requires configuring and
}
```

### Note on /tools
You may have noticed a `tools` directory included with OpenVUE. It contains a script, `tools/patch.js`, which when run will make two small changes to two of the installed NPM libraries.

1. Adds unofficial support to **exceljs** for implementing the filter button. Without it, the filter button will not show up for spreadsheets generated by OpenVUE (but all other functionality will be present).
2. Makes an attestation change to **fido2-library** to bypass the signature counter check if the attestation counter was set to zero. In iOS 14 (unsure if it's still the case), Apple hardcodes the counter value to zero, which normally would cause all attempts at using Face ID / Touch ID as a security key to fail. This reduces security ever so slightly, but was an acceptable compromise for me to get iOS devices working.

If you'd like to implement these changes, simply run `node patch.js` under the `tools` directory **after** you install node_modules and it'll patch the necessary files automatically.

## Legal
### Licensing
© 2020 Ryan Zhang.
© 2021 Ryan Zhang.

OpenVUE is licensed under the **AGPLv3** license. This generally means that you can do whatever you want to the code, and even commercialize it, but any modifications made must also be open sourced under this or a compatible license **if you publicly distribute it**.

Expand Down
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1676,7 +1676,7 @@ fs.readFile(path.join('public', 'js', 'ver.js'), 'utf8', (e, r) => {
r = JSON.parse(r); // parse JSON
logger.info('----------------------------------------');
logger.info('OpenVUE');
logger.info('(C) 2020 Ryan Zhang. All Rights Reserved.')
logger.info('(C) 2021 Ryan Zhang. All Rights Reserved.')
logger.info(`Version ${r.str} [${r.stage}]`);
logger.info(`⮡ Build ${r.build} (${r.date})`);
logger.info('----------------------------------------')
Expand Down
2 changes: 1 addition & 1 deletion libraries/cryptoHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* cryptoHelper.js
* Believe it or not, for the longest time, user passwords were stored in plain-text in the database. And, because we're using the free version of MongoDB Server, said passwords were then stored in plain-text on disk.
* The reason this was not previously a thing was due to the need to have plaintext passwords (since we are acting as a gateway to Synergy), and reversible encryption is frankly meaningless if the key gets compromised. Nonetheless, the encryption key is NOT stored on the database, so doing this should help slightly in the event that the database is somehow compromised. This realistically won't do too much, but it also has a very low performance cost.
* (C) 2020 Ryan Zhang.
* (C) 2021 Ryan Zhang.
*/

const crypto = require('crypto');
Expand Down
2 changes: 1 addition & 1 deletion libraries/notifier.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// notifier.js
// (C) 2020 Ryan Zhang. Some Rights Reserved.
// (C) 2021 Ryan Zhang. Some Rights Reserved.
//
// Handles sending text notifications to users who opt-in.
// Requires: svuelib.js, svcore.js
Expand Down
2 changes: 1 addition & 1 deletion libraries/svexport.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// svexport.js
// (C) 2020 Ryan Zhang. Some Rights Reserved.
// (C) 2021 Ryan Zhang. Some Rights Reserved.
//
// Converts gradebook data to JSON and excel spreadsheets

Expand Down
2 changes: 1 addition & 1 deletion libraries/svuelib.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// StudentVUE Function Library
// (C) 2020 Ryan Zhang
// (C) 2021 Ryan Zhang

const moment = require('moment');
const logger = {
Expand Down
4 changes: 2 additions & 2 deletions libraries/webauthn.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* Support for the WebAuth spec on SVUE+
* (C) 2020 Ryan Zhang.
* (C) 2021 Ryan Zhang.
*/

let db = false;
Expand Down Expand Up @@ -71,7 +71,7 @@ function hook(app) {
try {
let auth = await f2l.attestationResult(attestation, {
challenge: str2ab(req.session.waChallenge),
origin: 'https://svue-dev.itsryan.tk',
origin: 'https://svue.itsryan.org',
factor: 'either'
});
req.session.waTmp = {
Expand Down
67 changes: 57 additions & 10 deletions protected/dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,11 @@
<script defer src='js/main.js'></script>
<script defer src='js/secondary.js'></script>
<script async src='https://app.appzi.io/bootstrap/bundle.js?token=5gJLu'></script>
<script async src='https://www.googletagmanager.com/gtag/js?id=UA-96580670-3'></script>
<script async src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.min.js'></script>
<script async src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.min.js'></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('config', 'UA-96580670-3');
/*(optional Google Analytics code here)*/
</script>
</head>
<body>
Expand Down Expand Up @@ -85,7 +84,7 @@ <h2 style='font-weight: 400; font-family: "zen-new", -apple-system, "Roboto", "S
<p>If you see this message for an extended period of time (more than a few seconds), then it's likely that something went wrong. </p>
<noscript><p><b>It appears that JavaScript may be disabled, which is required to run OpenVUE.</b></p></noscript>
<p><a href='#' style='color: #aaf' onclick='location.reload()'>Reload OpenVUE</a></p>
<p style='position: fixed; bottom: 0px; color: #ccf'>&copy; 2020 Ryan Zhang. All Rights Reserved.</p>
<p style='position: fixed; bottom: 0px; color: #ccf'>&copy; 2021 Ryan Zhang. All Rights Reserved.</p>
</div>
<div class='navbar-fixed'>
<nav class='svue-navblue'>
Expand Down Expand Up @@ -181,7 +180,7 @@ <h2 style='font-weight: 400; font-family: "zen-new", -apple-system, "Roboto", "S
</li>
<li v-if='banner.update' class='collection-header ch-animated bk-green' v-bind:key='-1'>
<i class='fas fa-fw fa-bullhorn'></i> OpenVUE has been updated to <b>r2.0.0</b>!
<a href='#' class='right pointer' v-on:click='cbList.showChangelog()' tabindex='0'>See what's new</a>
<span class='right'><a href='#' class='pointer' v-on:click='cbList.showChangelog()' tabindex='0'>See what's new</a><a href='#' class='pointer' v-on:click='cbList.dismissChangelog()' tabindex='0'>Dismiss</a></span>
</li>
</transition-group>
<transition name='anim-msg'>
Expand Down Expand Up @@ -232,6 +231,9 @@ <h2 style='font-weight: 400; font-family: "zen-new", -apple-system, "Roboto", "S
<span class='right lg bw' v-html='$_showGrade(course)'></span>
<br><span class='gray'>P{{course.$.Period}} | {{course.$.Staff}}</span><span class='right' :class='$_detNew(course.$.Title, 1, index)'>{{$_detNew(course.$.Title, 0, index)}}</span>
</a>
<li class='collection-item course-rp' v-else-if='course._m && course._nd'>
<span class='bw'>No Data </span><span class='gray'>(No courses found in this reporting period)</span>
</li>
<li class='collection-header course-rp' v-else-if='course._m'>
<span class='bw'>{{course.school}} • {{course.rp}}</span>
<span class='gray right'>{{course.rpDate}}</span>
Expand Down Expand Up @@ -1034,7 +1036,7 @@ <h3>Credits</h3>
</li>
</ul>
<p>
&copy; 2020 Ryan Zhang. All Rights Reserved. <br/>
&copy; 2021 Ryan Zhang. All Rights Reserved. <br/>
<a href='../legal'>Terms of Service</a><a href='../legal#privacy'>Privacy Policy</a>
</p>
</div>
Expand Down Expand Up @@ -1256,12 +1258,57 @@ <h2>Ready to Go?</h2>
</div>
</div>
</div>
<div id='modal-whatsnew' class='modal modal-fixed-footer' data-build='1230'>
<div id='modal-whatsnew' class='modal modal-fixed-footer' data-build='1233'>
<div class='modal-content'>
<h4>What's New</h4>
<p><b>Release 2.0.0</b>&nbsp;• Build 1233 • October 20, 2020<br/></p>
<hr/>
<p>Changelogs aren't published directly in builds of OpenVUE. If you'd like to see what's changed, check us out on <a target='_blank' href='https://github.com/Ryan778/OpenVUE'>GitHub</a>!</p>
<p><b>Release 2.0.0</b>&nbsp;• Build 1233 • October 20, 2020<br/><i>Missed a release? <a href='changelog'>See Previous and/or Full Changelog</a></i></p>
<p><b class='green-text text-accent-bw'>New Things!</b></p>
<ul class='browser-default selectable'>
<li>OpenVUE is now <b>open source</b>! Named OpenVUE, you can find the <a target='_blank' href='https://github.com/Ryan778/OpenVUE'>full source code on GitHub</a>.</li>
<li>Complete refactoring of the OpenVUE core:</li>
<ul class='browser-default'>
<li>This is the portion OpenVUE uses to communicate with Synergy, and it has been slowly accumulating bugs ever since its rocky start back in February 2019.</li>
<li>By redoing it from scratch using modern APIs, it now <b>fully supports concurrent enrollment schools</b>, has <b>better caching and more detailed errors</b>, and is <b>significantly less prone to bugs</b>.</li>
</ul>
<li>Redesigned dashboard:</li>
<ul class='browser-default'>
<li>See the weather, date, and time (on desktop) at a glance</li>
<li>Concurrently enrolled with another school? See all of your classes at once!</li>
<li>Unobtrusive banner messages (in contrast to the obnoxious popups in the past)</li>
</ul>
<li>Significantly better accessibility:</li>
<ul class='browser-default'>
<li>Almost all of OpenVUE can now be navigated with just a keyboard!</li>
<li>Better "Reduced Motion" setting removes even more optional animations</li>
</ul>
<li>Data Exporting:</li>
<ul class='browser-default'>
<li>You can now download your grades in a variety of formats!</li>
<li>Currently XML, JSON, and XLSX are supported</li>
</ul>
</ul>
<p><b class='yellow-text text-accent-bw'>Improvements!</b></p>
<ul class='browser-default selectable'>
<li>Performance improvements:</li>
<ul class='browser-default'>
<li>Code optimization and dead code cleanup means pages should load even faster than before</li>
<li>The legacy, buggy course list loading system has been thrown out and replaced with a proper VueJS implementation</li>
</ul>
<li>Greatly improved "Welcome" carousel for the new user onboarding experience</li>
<li>Lots and lots and lots of bug fixes:</li>
<ul class='browser-default'>
<li>Far too many to list here, but they can be found in the full changelog!</li>
</ul>
</ul>
<p><b class='teal-text bw'>What's next?</b></p>
<ul class='browser-default selectable'>
<li>Potential notifier overhaul:</li>
<ul class='browser-default'>
<li>Reintroduce text notifications to the general public if possible?</li>
<li>Plans to greatly improve stability and customization options</li>
</ul>
<li><b class='light-blue-text bw'>You tell me!</b> We're always looking for suggestions on how OpenVUE can be further improved.</li>
</ul>
</div>
<div class='modal-footer'>
<a href='#' class='modal-close green white-text waves-effect waves btn-flat'>Ok, Thanks!</a>
Expand Down
5 changes: 2 additions & 3 deletions protected/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,14 @@
<!--$head-->
<link rel='stylesheet' href='css/core.css' type='text/css'>
<script defer src='js/zepto.min.js' integrity='sha256-RHTXmWrHQAbYRTGQR8NJapj1bG53Zh4oRZRuAy2Hu3A=' crossorigin='anonymous'></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-96580670-3"></script>
<script>
<script>
if(localStorage.cfg_theme === 'dark' || (localStorage.cfg_theme === 'match' && window.matchMedia('(prefers-color-scheme: dark)').matches) || (!localStorage.cfg_theme && window.matchMedia('(prefers-color-scheme: dark)').matches)){
document.getElementById('rel-theme').href = 'css/materialize/dark.css'}
else{
document.getElementById('rel-theme').href = 'css/materialize/light.css'}
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('config', 'UA-96580670-3');
/*(optional Google Analytics code here)*/
</script>
</head>
<body>
Expand Down
5 changes: 2 additions & 3 deletions public/account.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,14 @@

<link rel='stylesheet' href='css/core.css' type='text/css'>
<script defer src='js/zepto.min.js' integrity='sha256-RHTXmWrHQAbYRTGQR8NJapj1bG53Zh4oRZRuAy2Hu3A=' crossorigin='anonymous'></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-96580670-3"></script>
<script>
<script>
if(localStorage.cfg_theme === 'dark' || (localStorage.cfg_theme === 'match' && window.matchMedia('(prefers-color-scheme: dark)').matches) || (!localStorage.cfg_theme && window.matchMedia('(prefers-color-scheme: dark)').matches)){
document.getElementById('rel-theme').href = 'css/materialize/dark.css'}
else{
document.getElementById('rel-theme').href = 'css/materialize/light.css'}
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('config', 'UA-96580670-3');
/*(optional Google Analytics code here)*/
</script>
</head>
<body>
Expand Down
7 changes: 3 additions & 4 deletions public/app/advanced.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@
<script defer src='../js/svuelib.js'></script>
<script defer src='https://cdnjs.cloudflare.com/ajax/libs/localforage/1.7.3/localforage.min.js' integrity='sha256-H/ZsHjKSJUnQyCQHZwPmn7VTWFeTTI+qgCP1GkiB9zI=' crossorigin='anonymous'></script>
<script defer src='https://cdn.jsdelivr.net/npm/ua-parser-js@0/dist/ua-parser.min.js'></script>
<script async src='https://www.googletagmanager.com/gtag/js?id=UA-96580670-3'></script>
<script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('config', 'UA-96580670-3');
/*(optional Google Analytics code here)*/
</script>
</head>
<body>
Expand Down Expand Up @@ -126,7 +125,7 @@ <h6><a href='#' onclick='window.history.back()'><i class='fas fa-caret-left'></i
<footer>
<div class='container'>
<hr style='border: none; border-bottom: 1px solid #000'>
<p><a href='..'>Homepage</a> | <a href='start'>Start Page</a> | <a href='install'>Installation Page</a> <br>&copy; 2020 Ryan Zhang. All Rights Reserved.</p>
<p><a href='..'>Homepage</a> | <a href='start'>Start Page</a> | <a href='install'>Installation Page</a> <br>&copy; 2021 Ryan Zhang. All Rights Reserved.</p>
</div>
</footer>
</body>
Expand Down
7 changes: 3 additions & 4 deletions public/app/install-ios.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,10 @@
<script defer src='https://cdn.jsdelivr.net/npm/ua-parser-js@0/dist/ua-parser.min.js' crossorigin='anonymous'></script>
<script defer src='js/themeInit.js'></script>
<script async src='js/pwacompat.min.js'></script>
<script async src='https://www.googletagmanager.com/gtag/js?id=UA-96580670-3'></script>
<script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('config', 'UA-96580670-3');
/*(optional Google Analytics code here)*/
</script>
</head>
<body>
Expand Down Expand Up @@ -61,7 +60,7 @@ <h6>Installation Instructions</h6>
<footer>
<div class='container'>
<hr style='border: none; border-bottom: 1px solid #000'>
<p>&copy; 2020 Ryan Zhang. All Rights Reserved.</p>
<p>&copy; 2021 Ryan Zhang. All Rights Reserved.</p>
</div>
</footer>
<div id='about-iosPWA' class='modal modal-fixed-footer'>
Expand Down
7 changes: 3 additions & 4 deletions public/app/install.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,12 @@
<script defer src='https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js' integrity='sha256-U/cHDMTIHCeMcvehBv1xQ052bPSbJtbuiw4QA9cTKz0=' crossorigin='anonymous'></script>
<script defer src='/js/fa.js' crossorigin='anonymous'></script>
<script defer src='https://cdn.jsdelivr.net/npm/ua-parser-js@0/dist/ua-parser.min.js' crossorigin='anonymous'></script>
<script async src='https://www.googletagmanager.com/gtag/js?id=UA-96580670-3'></script>
<script defer src='js/themeInit.js'></script>
<script defer src='js/themeInit.js'></script>
<script defer src='js/installLib.js'></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('config', 'UA-96580670-3');
/*(optional Google Analytics code here)*/
</script>
</head>
<body>
Expand Down Expand Up @@ -60,7 +59,7 @@ <h6><a href='#' onclick='window.history.back()'><i class='fas fa-caret-left'></i
<br/>
<div class='container'>
<hr/>
<p><a href='..'>Homepage</a> | <a href='advanced'>Advanced</a> | &copy; 2020 Ryan Zhang. All Rights Reserved.</p>
<p><a href='..'>Homepage</a> | <a href='advanced'>Advanced</a> | &copy; 2021 Ryan Zhang. All Rights Reserved.</p>
</div>
</footer>
<div id='about-pwas' class='modal'>
Expand Down
7 changes: 3 additions & 4 deletions public/app/start.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,10 @@
<script defer src='../js/ver.js'></script>
<script defer src='js/start.js'></script>
<script async src='../js/svuelib.js'></script>
<script async src='https://www.googletagmanager.com/gtag/js?id=UA-96580670-3'></script>
<script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('config', 'UA-96580670-3');
/*(optional Google Analytics code here)*/
</script>
</head>
<body>
Expand Down Expand Up @@ -73,7 +72,7 @@ <h5 id='msg-header'>Welcome to OpenVUE!</h5>
<br>
<p class='grey-text'>
Build <span id='ver'></span><a class='grey-text' href='advanced'>Advanced</a><br>
<span class='grey-text'>&copy; 2020 Ryan Zhang. All Rights Reserved.</span>
<span class='grey-text'>&copy; 2021 Ryan Zhang. All Rights Reserved.</span>
</p>
</body>
</html>
3 changes: 1 addition & 2 deletions public/changelog.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@
document.getElementById('rel-theme').href = 'css/materialize/light.css'}
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('config', 'UA-96580670-3');
</script>
/*(optional Google Analytics code here)*/ </script>
</head>
<body>
<div class='navbar-fixed'>
Expand Down
2 changes: 1 addition & 1 deletion public/css/materialize/dark.css
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*!
* Dark modifications to Materialize for a dark theme
* Original portions of Materialize are still (C) Materialize
* Modifications are (C) 2020 Ryan Zhang
* Modifications are (C) 2021 Ryan Zhang
* All components of this code can be used under the MIT License
* Materialize v1.0.0 (http://materializecss.com)
Expand Down
2 changes: 1 addition & 1 deletion public/css/secondary.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* secondary.css
(C) 2020 Ryan Zhang. All Rights Reserved.
(C) 2021 Ryan Zhang. All Rights Reserved.
CSS for secondary features (messages, attendance)
*/
Expand Down
5 changes: 2 additions & 3 deletions public/export.html
Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,14 @@

<link rel='stylesheet' href='css/core.css' type='text/css'>
<script defer src='js/zepto.min.js' integrity='sha256-RHTXmWrHQAbYRTGQR8NJapj1bG53Zh4oRZRuAy2Hu3A=' crossorigin='anonymous'></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-96580670-3"></script>
<script>
<script>
if(localStorage.cfg_theme === 'dark' || (localStorage.cfg_theme === 'match' && window.matchMedia('(prefers-color-scheme: dark)').matches) || (!localStorage.cfg_theme && window.matchMedia('(prefers-color-scheme: dark)').matches)){
document.getElementById('rel-theme').href = 'css/materialize/dark.css'}
else{
document.getElementById('rel-theme').href = 'css/materialize/light.css'}
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); gtag('config', 'UA-96580670-3');
/*(optional Google Analytics code here)*/
</script>
</head>
<body>
Expand Down
Loading

0 comments on commit a374490

Please sign in to comment.