From e461635f3a6a21ee186aa034fc0ec0c8db9626ae Mon Sep 17 00:00:00 2001 From: garrettmills Date: Tue, 5 Apr 2022 11:56:06 -0500 Subject: [PATCH] Add CC licensing info, favicon, general cleanup --- LICENSE | 19 ----------- README.md | 32 +++--------------- example.env | 4 --- src/app/configs/database.config.ts | 2 +- src/app/configs/oauth2.config.ts | 15 ++------ src/app/configs/server.config.ts | 2 +- src/app/http/controllers/Home.controller.ts | 9 ++++- src/app/http/routes/app.routes.ts | 9 ++--- src/app/jobs/LogMessage.job.ts | 15 -------- .../resources/assets/cc-by-nc-sa-small.png | Bin 0 -> 467 bytes src/app/resources/assets/cc-by-nc-sa.png | Bin 0 -> 1672 bytes .../assets/favicon/android-chrome-192x192.png | Bin 0 -> 5026 bytes .../assets/favicon/android-chrome-512x512.png | Bin 0 -> 21304 bytes .../assets/favicon/apple-touch-icon.png | Bin 0 -> 4563 bytes .../assets/favicon/favicon-16x16.png | Bin 0 -> 327 bytes .../assets/favicon/favicon-32x32.png | Bin 0 -> 628 bytes src/app/resources/assets/favicon/favicon.ico | Bin 0 -> 15406 bytes .../resources/assets/favicon/site.webmanifest | 1 + src/app/resources/assets/img/favicon.png | Bin 0 -> 6990 bytes src/app/resources/views/template_raj.pug | 11 +++++- CONTRIBUTING.md => src/app/types/.gitkeep | 0 src/app/types/UserLogin.ts | 14 -------- 22 files changed, 31 insertions(+), 102 deletions(-) delete mode 100644 LICENSE delete mode 100644 example.env delete mode 100644 src/app/jobs/LogMessage.job.ts create mode 100644 src/app/resources/assets/cc-by-nc-sa-small.png create mode 100644 src/app/resources/assets/cc-by-nc-sa.png create mode 100644 src/app/resources/assets/favicon/android-chrome-192x192.png create mode 100644 src/app/resources/assets/favicon/android-chrome-512x512.png create mode 100644 src/app/resources/assets/favicon/apple-touch-icon.png create mode 100644 src/app/resources/assets/favicon/favicon-16x16.png create mode 100644 src/app/resources/assets/favicon/favicon-32x32.png create mode 100644 src/app/resources/assets/favicon/favicon.ico create mode 100644 src/app/resources/assets/favicon/site.webmanifest create mode 100644 src/app/resources/assets/img/favicon.png rename CONTRIBUTING.md => src/app/types/.gitkeep (100%) delete mode 100644 src/app/types/UserLogin.ts diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 4d81694..0000000 --- a/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright © 2021 Garrett Mills - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the “Software”), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 5da2f2f..09e595c 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,9 @@ -
-
-The Extollo logo -

-extollo - (v. latin) - to lift up, to elevate -

-Extollo is a free & libre application framework in TypeScript. -
-
+# `garrettmills.dev` -Built on principles of modularity, strict-typing, inversion-of-control, and developer ergonomics, Extollo enables developers to build maintainable, scalable, and expressive applications. +This is my website, hosted at https://garrettmills.dev. -Node.js provides an excellent platform for quickly getting an application up and running, but this loose minimalism can lead to larger, more unweildy code-bases as your application grows. Extollo fixes this by providing an opinionated, robust framework and first-party modules that provide, among other things: +It is implemented with my [Extollo framework](https://extollo.garrettmills.dev). -- Type-based dependency injection -- Strongly-typed ORM with an expressive query-builder and models -- Customizable session & caching interfaces -- Modular, pre-compiled, nest-able routes -- First-party, extensible command line tools -- Unit-based application structure +![](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png) -## Getting Started -Writing an application with Extollo is very straightforward if you are familiar with Node.js/TypeScript, or similar frameworks like Laravel. - -Check out the [Getting Started](https://extollo.garrettmills.dev/pages/Documentation/Getting-Started.html) page on the documentation site for more information. - -## License & Philosophy -The Extollo project is, and will always be, free & libre software. The framework itself is open-source available [here](https://code.garrettmills.dev/Extollo), and is licensed under the terms of the MIT license. See the LICENSE file for more information. - -## Contributing -Have an improvement or fix to Extollo? Contributors are always welcome. See the CONTRIBUTING.md file for next steps. +This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-nc-sa/4.0/). diff --git a/example.env b/example.env deleted file mode 100644 index 1b6e92a..0000000 --- a/example.env +++ /dev/null @@ -1,4 +0,0 @@ -DEBUG_MODE=true -EXTOLLO_LOGGING_LEVEL=6 -DATABASE_PASSWORD=extollo -DATABASE_HOST=db01.platform.local diff --git a/src/app/configs/database.config.ts b/src/app/configs/database.config.ts index e8873e2..5d22477 100644 --- a/src/app/configs/database.config.ts +++ b/src/app/configs/database.config.ts @@ -1,4 +1,4 @@ -import { env } from "@extollo/lib"; +import { env } from '@extollo/lib' export default { connections: { diff --git a/src/app/configs/oauth2.config.ts b/src/app/configs/oauth2.config.ts index 27ff1f9..dec97e0 100644 --- a/src/app/configs/oauth2.config.ts +++ b/src/app/configs/oauth2.config.ts @@ -1,4 +1,4 @@ -import {OAuth2Client, OAuth2Scope, env, /*uuid4*/} from '@extollo/lib' +import {OAuth2Client, OAuth2Scope, env} from '@extollo/lib' export default { secret: env('OAUTH2_SECRET'), @@ -9,16 +9,5 @@ export default { description: 'access basic information about your account', }, } as {[key: string]: OAuth2Scope}, - clients: { - // 'test-1': { - // id: 'test-1', - // display: 'Test 1', - // secret: env('TEST_CLIENT_SECRET', uuid4()), - // allowedFlows: ['code'], - // allowedScopeIds: ['user-info'], - // allowedRedirectUris: [ - // 'http://localhost:1234/callback', - // ], - // }, - } as {[key: string]: OAuth2Client}, + clients: {} as {[key: string]: OAuth2Client}, } diff --git a/src/app/configs/server.config.ts b/src/app/configs/server.config.ts index 4514cc8..14a8730 100644 --- a/src/app/configs/server.config.ts +++ b/src/app/configs/server.config.ts @@ -7,7 +7,7 @@ import { RedisCache, CacheQueue, BusConnectorConfig, QueueConfig, SyncQueue -} from "@extollo/lib" +} from '@extollo/lib' export default { debug: env('DEBUG_MODE', false), diff --git a/src/app/http/controllers/Home.controller.ts b/src/app/http/controllers/Home.controller.ts index 30355ad..3ce1e24 100644 --- a/src/app/http/controllers/Home.controller.ts +++ b/src/app/http/controllers/Home.controller.ts @@ -1,4 +1,4 @@ -import {Controller, view, Injectable, SecurityContext, Inject, Collection, Config, Routing} from '@extollo/lib' +import {Controller, view, Injectable, SecurityContext, Inject, Collection, Config, Routing, file, Application} from '@extollo/lib' import {WorkItem} from '../../models/WorkItem.model' import {FeedPost} from '../../models/FeedPost.model' @@ -75,4 +75,11 @@ export class Home extends Controller { return query.get().collect() } + + favicon() { + return file( + Application.getApplication() + .appPath('resources', 'assets', 'favicon', 'favicon.ico') + ) + } } diff --git a/src/app/http/routes/app.routes.ts b/src/app/http/routes/app.routes.ts index cdb5c67..740c8e2 100644 --- a/src/app/http/routes/app.routes.ts +++ b/src/app/http/routes/app.routes.ts @@ -36,12 +36,9 @@ Route Route.any('/go/:short') .calls(GoLinks, go => go.launch) + + Route.get('/favicon.ico') + .calls(Home, home => home.favicon) }) .pre(SessionAuthMiddleware) .pre(PageView) - -// Route.group('', () => { -// Route.get('/dash') -// .pre(AuthRequiredMiddleware) -// .calls(Home, home => home.welcome) -// }).pre(SessionAuthMiddleware) diff --git a/src/app/jobs/LogMessage.job.ts b/src/app/jobs/LogMessage.job.ts deleted file mode 100644 index 87b09cd..0000000 --- a/src/app/jobs/LogMessage.job.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {Inject, Injectable, Logging, BaseJob} from '@extollo/lib' - -@Injectable() -export default class LogMessage extends BaseJob { - @Inject() - protected readonly logging!: Logging - - async execute(): Promise { - this.logging.info('Executing LogMessage...') - await new Promise(res => { - setTimeout(() => res(), 3000) - }) - this.logging.success('The LogMessage job has executed!') - } -} diff --git a/src/app/resources/assets/cc-by-nc-sa-small.png b/src/app/resources/assets/cc-by-nc-sa-small.png new file mode 100644 index 0000000000000000000000000000000000000000..4a00d04150275529f19829788b441a03d1a60302 GIT binary patch literal 467 zcmV;^0WAKBP)IWd00004XF*Lt007q5 z)K6G40001%P)t-s|NsB)?(W^)-OA3&%*@Ql%*e*d#>K|Py1%-+ySuZvva7MGs;a7) znVFQClaG*(h=_=XhlhrShJb*8eS&>=cXx7jac661W@ctvURzaFRZC1uL_|bGLqkGB zLP0`7J3Tu&J2^8mGchwUE-)@9C?_N(BO)RqAt50kARrkT84(c?4-gLy4h{_t4Gj$q z4Gjzc000fQuD$>O0O(0XK~#9!t&{6=0wD~A54v93=(^Toz2IHD>UOnx|Ce)+%gX34 zm&`CjLilnB0FG>6L^Ta0Z9kmZkSbH6=HJ`;3@|M-Uql^^_gW!^x5|HtuP03c(Y~%0%wLwbI@kRvvHx;py8*A2l&%#T-Vp!*002ov JPDHLkV1oKI#K`~v literal 0 HcmV?d00001 diff --git a/src/app/resources/assets/cc-by-nc-sa.png b/src/app/resources/assets/cc-by-nc-sa.png new file mode 100644 index 0000000000000000000000000000000000000000..4acf8c4ec36d493f16cdc812c3a318b96eaa9181 GIT binary patch literal 1672 zcmYk+X*Ane9|!Qi>FA=Q(P%AcC1aOXZKYKmq}KG5TFdC;p(Wbq85+h;D)xPus3o+h zQpX-iL=YrIRy0J@r)oTyXsMyp%vh&2fA8jdKKFj_@0|Pco}26L=B%Wkp#T7Y62`^B z6Kp?lA&wsbcki=%60nfLE}pIckf;j)Dd_;PdjR%F0EjUGfR!KsxJCj1Ra{9R*9pA) z?E|zc8UQFo_3l!(g=jP_# zNTpM6BoZlTa`H83VgfWJ7Eg&^NnX9093MY4CKijwC&tDOjgE;&M-PccUx`HHLg697 zsAyC$CJ>DA`J;TEh$j>Xcp@%W$QAJUT;a$FNWkF;I3s)xhd(^bA0Fbe*@sx{5f*D? zki{7s1Pu=i9O`GWSp7r&{X@)tc0ZHNWU~AESfJkCK~PW60E5xr-PhaO&7{-&y1M#k zUA;6~50%znFdG}hJE)z#M5)I6`Qt*x!8uC6Vwsv=dESC*GmmXgXVo{*jpONqoML}Kw_ zatm?`^74za^Ru(EGqN%=GBeUL(=t-i2&u^_DJhQ$csv20oPwYljf#%> zDJtS8Ttq~~qp+}t*wEm>dqF`#0sjv0_w{r4a0g@WU~gwg_*gj znW?FXiHWJvB_ksv6bfaCG6Z8_XaEMKuWz8Mr=z2zjX;7yz|X$UKp@trPc|qq5&lC>n^S%xO`shEc~)ee0H3jL{-Q(V8y4=t)So zU5-Xa*n%eBFT!P)(~uc5$T$>>ovJ!Ea%gb zlrX&kbu7~8>i1vS6U!QA^G?$3DNdw z-`qr3Fc`Lf0Y2tc#C)fyo%GoQ&CkZ2&tc{gDg{TU69jM?xjsaK_R$N8+~t!j0<5^w#> z#wB^TN}9~&koTIQoZ8hZTCiYovxD-dtDU)NL<5pAROTO7n4|Dk1(KAs4?hX3JUvqo zUa-8_9+=j$@q1tAh-w-3sPz1^YF}n4b>~-`2fpH7r#n#Mz1)j8yFOJ21>B0aKP#~Cwk)~uOBqcpqNS5X?`^8-6BOB6d}AHRdvMVClVY)(6! zx1x3iO=1eq@a(N4)u|GnHnn8dbm=8|vWms`@feka=GLWOHl89D0jsjo3%X05$+urT zVq8{ez%h2)-c3R*Ga3H~62Hu)dl5Evkj57p3Ou^)fGW*K=C)8+lcd4}_Z^ z1-qe{%;LNX_?bG=^2(>*P8GY}3MBn_Q;ngspo#P?`;O*s`O>&{nRGOQPhs^zOa-jclI>XiQ$xdOhGkANGqnUeS7LiWJ21v}pXJ9#tlJ zJnn5_2jiW`EC#=q5h_(*{ud#_(h^ZEl}*=GJqApY6UEc9DLA_S-2`+PA+9y_R<$w~ z-jpRZN}bw$^Czu@^C-^c0U0Od)lI7YFX>-J_D2>D_5&BpZ)3J`%*HUH+EZ8~_zwUW MM>mI#8$oG*16KD<`Tzg` literal 0 HcmV?d00001 diff --git a/src/app/resources/assets/favicon/android-chrome-192x192.png b/src/app/resources/assets/favicon/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9a669fe5422692845718a654e8dae569667777 GIT binary patch literal 5026 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 Ls#|~4IsX3u2#HIp literal 0 HcmV?d00001 diff --git a/src/app/resources/assets/favicon/android-chrome-512x512.png b/src/app/resources/assets/favicon/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..5aada7669b648bd5f6a0ca1d5be6e79f47fabe1f GIT binary patch literal 21304 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 V86WQTPeS0Iv4Q!?e0`^g{{z`_AAtY> literal 0 HcmV?d00001 diff --git a/src/app/resources/assets/favicon/apple-touch-icon.png b/src/app/resources/assets/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..70dd66b6634d348b59bd16a000a42263b7a3a0e7 GIT binary patch literal 4563 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 PtO4NadTQk=k6-*3dMl93 literal 0 HcmV?d00001 diff --git a/src/app/resources/assets/favicon/favicon-16x16.png b/src/app/resources/assets/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..ded168931658437a9092d91eed932131e31f7c3c GIT binary patch literal 327 zcmV-N0l5B&P)W|KZ9RTFvEepdw|jSfq{{cfk9GA zn!(!6j^X%`!-Ne0St~9f!JwsG)002ovPDHLkV1f|TjA;M> literal 0 HcmV?d00001 diff --git a/src/app/resources/assets/favicon/favicon-32x32.png b/src/app/resources/assets/favicon/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..d636c5428583f00e1d3a0856ce5bd914ee604ad4 GIT binary patch literal 628 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 VnI~5sa7zO+xM!+cq3!(YzW_}ZKRf^c literal 0 HcmV?d00001 diff --git a/src/app/resources/views/template_raj.pug b/src/app/resources/views/template_raj.pug index 13e1463..e92e0d3 100644 --- a/src/app/resources/views/template_raj.pug +++ b/src/app/resources/views/template_raj.pug @@ -19,15 +19,24 @@ head link(rel="alternate" href="/feed/atom.xml" title="Garrett Mills - Posts & Updates" type="application/atom+xml") link(rel="alternate" href="/feed/rss.xml" title="Garrett Mills - Posts & Updates" type="application/rss+xml") + link(rel='apple-touch-icon' sizes='180x180' href=asset('favicon/apple-touch-icon.png')) + link(rel='manifest' href=asset('favicon/site.webmanifest')) + link(rel='icon' type='image/png' sizes='32x32' href=asset('favicon/favicon-32x32.png')) + link(rel='icon' type='image/png' sizes='16x16' href=asset('favicon/favicon-16x16.png')) + link(rel='shortcut icon' href=asset('favicon/favicon.ico')) + body block content footer .ff-tag(style="margin-right: 80px") a(href="https://www.mozilla.org/en-US/firefox/browsers/" target="_blank") - img(src="/assets/ffox.png" width="75" style="margin-top: -1px") + img(src=asset('ffox.png') width="75" style="margin-top: -1px") .by-line garrettmills .copy#tagline(title="my, aren't you curious...") copyright © #{(new Date()).getFullYear()} garrett mills + .copyright + a(href='https://creativecommons.org/licenses/by-nc-sa/4.0/' target='_blank') + img(src=asset('cc-by-nc-sa-small.png') title='This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License') if false div.auth-container div.profile diff --git a/CONTRIBUTING.md b/src/app/types/.gitkeep similarity index 100% rename from CONTRIBUTING.md rename to src/app/types/.gitkeep diff --git a/src/app/types/UserLogin.ts b/src/app/types/UserLogin.ts deleted file mode 100644 index 6a69c8a..0000000 --- a/src/app/types/UserLogin.ts +++ /dev/null @@ -1,14 +0,0 @@ - -export interface UserLogin { - /** - * @minLength 1 - * @maxLength 100 - */ - username: string, - - /** - * @minLength 1 - * @maxLength 100 - */ - password: string, -}