aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBobby <[email protected]>2022-03-15 12:21:38 -0400
committerBobby <[email protected]>2022-03-15 12:21:38 -0400
commitc3bdbb343462ddbba3da04d815158a9a36c09c1c (patch)
tree8b8f9d00c5462adeebc8f066721a88de9db5d745
parentc9a13b8c5cd4aeca96b62532d530d2c10083788f (diff)
downloadluciferreeves.github.io-c3bdbb343462ddbba3da04d815158a9a36c09c1c.tar.xz
luciferreeves.github.io-c3bdbb343462ddbba3da04d815158a9a36c09c1c.zip
repositories page and api
-rw-r--r--api/github.js21
-rw-r--r--package-lock.json300
-rw-r--r--package.json1
-rw-r--r--public/index.html1
-rw-r--r--public/views/about.html3
-rw-r--r--public/views/admin.html1
-rw-r--r--public/views/repositories.html98
-rw-r--r--routes/api.js33
-rw-r--r--routes/index.js6
9 files changed, 444 insertions, 20 deletions
diff --git a/api/github.js b/api/github.js
new file mode 100644
index 0000000..d08663f
--- /dev/null
+++ b/api/github.js
@@ -0,0 +1,21 @@
+const { Octokit } = require("@octokit/rest");
+class Github {
+ octokit = null;
+ username = null;
+ constructor(username) {
+ this.octokit = new Octokit();
+ this.username = username;
+ }
+ async getRepos(page) {
+ const { data } = await this.octokit.repos.listForUser({
+ username: this.username,
+ type: "all",
+ sort: "updated",
+ per_page: 25,
+ page: page
+ });
+ return data;
+ }
+}
+
+exports.Github = Github;
diff --git a/package-lock.json b/package-lock.json
index 3280246..5f66478 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,7 @@
"version": "1.0.0",
"license": "GPL-3.0-or-later",
"dependencies": {
+ "@octokit/rest": "^18.12.0",
"body-parser": "^1.19.2",
"cors": "^2.8.5",
"dotenv": "^16.0.0",
@@ -278,6 +279,126 @@
"node": ">=6"
}
},
+ "node_modules/@octokit/auth-token": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
+ "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
+ "dependencies": {
+ "@octokit/types": "^6.0.3"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz",
+ "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
+ "dependencies": {
+ "@octokit/auth-token": "^2.4.4",
+ "@octokit/graphql": "^4.5.8",
+ "@octokit/request": "^5.6.3",
+ "@octokit/request-error": "^2.0.5",
+ "@octokit/types": "^6.0.3",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
+ "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
+ "dependencies": {
+ "@octokit/types": "^6.0.3",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
+ "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
+ "dependencies": {
+ "@octokit/request": "^5.6.0",
+ "@octokit/types": "^6.0.3",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz",
+ "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA=="
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "2.17.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz",
+ "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==",
+ "dependencies": {
+ "@octokit/types": "^6.34.0"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=2"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
+ "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz",
+ "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==",
+ "dependencies": {
+ "@octokit/types": "^6.34.0",
+ "deprecation": "^2.3.1"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
+ "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
+ "dependencies": {
+ "@octokit/endpoint": "^6.0.1",
+ "@octokit/request-error": "^2.1.0",
+ "@octokit/types": "^6.16.1",
+ "is-plain-object": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
+ "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
+ "dependencies": {
+ "@octokit/types": "^6.0.3",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "18.12.0",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
+ "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
+ "dependencies": {
+ "@octokit/core": "^3.5.1",
+ "@octokit/plugin-paginate-rest": "^2.16.8",
+ "@octokit/plugin-request-log": "^1.0.4",
+ "@octokit/plugin-rest-endpoint-methods": "^5.12.0"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "6.34.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz",
+ "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==",
+ "dependencies": {
+ "@octokit/openapi-types": "^11.2.0"
+ }
+ },
"node_modules/@panva/asn1.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
@@ -634,6 +755,11 @@
],
"optional": true
},
+ "node_modules/before-after-hook": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
+ "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
+ },
"node_modules/bignumber.js": {
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz",
@@ -1038,6 +1164,11 @@
"node": ">= 0.6"
}
},
+ "node_modules/deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+ },
"node_modules/destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
@@ -1834,6 +1965,14 @@
"node": ">=8"
}
},
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -2289,7 +2428,6 @@
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
- "optional": true,
"dependencies": {
"whatwg-url": "^5.0.0"
},
@@ -2422,7 +2560,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "devOptional": true,
"dependencies": {
"wrappy": "1"
}
@@ -3031,8 +3168,7 @@
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "optional": true
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"node_modules/tslib": {
"version": "2.3.1",
@@ -3090,6 +3226,11 @@
"node": ">=8"
}
},
+ "node_modules/universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ },
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -3187,8 +3328,7 @@
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
- "optional": true
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"node_modules/websocket-driver": {
"version": "0.7.4",
@@ -3215,7 +3355,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "optional": true,
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
@@ -3253,8 +3392,7 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "devOptional": true
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"node_modules/write-file-atomic": {
"version": "3.0.3",
@@ -3548,6 +3686,118 @@
"yargs": "^16.2.0"
}
},
+ "@octokit/auth-token": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
+ "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
+ "requires": {
+ "@octokit/types": "^6.0.3"
+ }
+ },
+ "@octokit/core": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz",
+ "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
+ "requires": {
+ "@octokit/auth-token": "^2.4.4",
+ "@octokit/graphql": "^4.5.8",
+ "@octokit/request": "^5.6.3",
+ "@octokit/request-error": "^2.0.5",
+ "@octokit/types": "^6.0.3",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/endpoint": {
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
+ "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
+ "requires": {
+ "@octokit/types": "^6.0.3",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/graphql": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
+ "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
+ "requires": {
+ "@octokit/request": "^5.6.0",
+ "@octokit/types": "^6.0.3",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/openapi-types": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz",
+ "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA=="
+ },
+ "@octokit/plugin-paginate-rest": {
+ "version": "2.17.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz",
+ "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==",
+ "requires": {
+ "@octokit/types": "^6.34.0"
+ }
+ },
+ "@octokit/plugin-request-log": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
+ "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
+ "requires": {}
+ },
+ "@octokit/plugin-rest-endpoint-methods": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz",
+ "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==",
+ "requires": {
+ "@octokit/types": "^6.34.0",
+ "deprecation": "^2.3.1"
+ }
+ },
+ "@octokit/request": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
+ "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
+ "requires": {
+ "@octokit/endpoint": "^6.0.1",
+ "@octokit/request-error": "^2.1.0",
+ "@octokit/types": "^6.16.1",
+ "is-plain-object": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/request-error": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
+ "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
+ "requires": {
+ "@octokit/types": "^6.0.3",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ }
+ },
+ "@octokit/rest": {
+ "version": "18.12.0",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
+ "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
+ "requires": {
+ "@octokit/core": "^3.5.1",
+ "@octokit/plugin-paginate-rest": "^2.16.8",
+ "@octokit/plugin-request-log": "^1.0.4",
+ "@octokit/plugin-rest-endpoint-methods": "^5.12.0"
+ }
+ },
+ "@octokit/types": {
+ "version": "6.34.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz",
+ "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==",
+ "requires": {
+ "@octokit/openapi-types": "^11.2.0"
+ }
+ },
"@panva/asn1.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
@@ -3848,6 +4098,11 @@
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"optional": true
},
+ "before-after-hook": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
+ "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
+ },
"bignumber.js": {
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz",
@@ -4155,6 +4410,11 @@
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
+ "deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+ },
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
@@ -4768,6 +5028,11 @@
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true
},
+ "is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+ },
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -5149,7 +5414,6 @@
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
- "optional": true,
"requires": {
"whatwg-url": "^5.0.0"
}
@@ -5238,7 +5502,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "devOptional": true,
"requires": {
"wrappy": "1"
}
@@ -5713,8 +5976,7 @@
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "optional": true
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"tslib": {
"version": "2.3.1",
@@ -5760,6 +6022,11 @@
"crypto-random-string": "^2.0.0"
}
},
+ "universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -5832,8 +6099,7 @@
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
- "optional": true
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"websocket-driver": {
"version": "0.7.4",
@@ -5854,7 +6120,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "optional": true,
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
@@ -5883,8 +6148,7 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "devOptional": true
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"write-file-atomic": {
"version": "3.0.3",
diff --git a/package.json b/package.json
index 1cf3b0c..06ac7a0 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
},
"homepage": "https://github.com/luciferreeves/luciferreeves.github.io#readme",
"dependencies": {
+ "@octokit/rest": "^18.12.0",
"body-parser": "^1.19.2",
"cors": "^2.8.5",
"dotenv": "^16.0.0",
diff --git a/public/index.html b/public/index.html
index c9a2884..0f225bc 100644
--- a/public/index.html
+++ b/public/index.html
@@ -25,6 +25,7 @@
<ul class="nav">
<li class="active"><a href="./">Home</a></li>
<li><a href="/about">About</a></li>
+ <li><a href="/repos">Repositories</a></li>
<li><a href="https://github.com/luciferreeves" target="_blank">Github</a></li>
</ul>
</div>
diff --git a/public/views/about.html b/public/views/about.html
index 52eca11..148b55d 100644
--- a/public/views/about.html
+++ b/public/views/about.html
@@ -44,6 +44,7 @@
<ul class="nav">
<li><a href="../">Home</a></li>
<li class="active"><a href="../about">About</a></li>
+ <li><a href="../repos">Repositories</a></li>
<li><a href="https://github.com/luciferreeves" target="_blank">Github</a></li>
</ul>
</div>
@@ -111,7 +112,7 @@
</div>
<div class="thumbnail">
<div class="caption">
- <h3>A Comprehensive Approache to Analysis and Detection of Emerging Threats due to Network Intrusion.</h3>
+ <h3>A Comprehensive Approach to Analysis and Detection of Emerging Threats due to Network Intrusion.</h3>
<ul class="simpleList">
<li>CURRENTLY IN PROGRESS</li>
<li>This project aims to build a predictive model to fit the data and evaluate performance of the network intrusion detection mechanisms based on the ML methods. This also aims to provide the new researchers with the updated knowledge, recent trends, and progress of the field – which is very imperative in this era.</li>
diff --git a/public/views/admin.html b/public/views/admin.html
index 473849b..c098bfe 100644
--- a/public/views/admin.html
+++ b/public/views/admin.html
@@ -29,6 +29,7 @@
<ul class="nav">
<li><a href="../">Home</a></li>
<li><a href="../about">About</a></li>
+ <li><a href="../repos">Repositories</a></li>
<li><a href="https://github.com/luciferreeves" target="_blank">Github</a></li>
</ul>
</div>
diff --git a/public/views/repositories.html b/public/views/repositories.html
new file mode 100644
index 0000000..28af74a
--- /dev/null
+++ b/public/views/repositories.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <title>That Computer Scientist</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="">
+ <link href="static/assets/css/bootstrap.css" rel="stylesheet">
+ <link href="static/assets/css/bootstrap-responsive.css" rel="stylesheet">
+ <link href="static/assets/css/docs.css" rel="stylesheet">
+ <link rel="shortcut icon" href="static/images/favicon.png">
+</head>
+
+<body>
+ <!-- Navbar -->
+ <div class="navbar navbar-inverse navbar-fixed-top">
+ <div class="navbar-inner">
+ <div class="container">
+ <button type="button" class="btn btn-navbar" data-toggle="collapse"
+ data-target=".nav-collapse"></button>
+ <a class="brand" href="./">That Computer Scientist</a>
+ <div class="nav-collapse collapse">
+ <ul class="nav">
+ <li><a href="../">Home</a></li>
+ <li><a href="../about">About</a></li>
+ <li class="active"><a href="../repos">Repositories</a></li>
+ <li><a href="https://github.com/luciferreeves" target="_blank">Github</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- Hero Unit -->
+ <div class="container margin-top-375" style="margin-top: 3.75rem;">
+ <h2>Repositories</h2>
+ </div>
+ <table class="table table-striped">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Description</th>
+ <th>Language</th>
+ <th>Stars</th>
+ <th>Forks</th>
+ <th>License</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody id="repos"></tbody>
+ </table>
+ <script type="text/javascript" src="//platform.twitter.com/widgets.js"></script>
+ <script src="static/assets/js/jquery.js"></script>
+ <script src="static/assets/js/bootstrap-386.js"></script>
+ <script src="static/assets/js/bootstrap-transition.js"></script>
+ <script src="static/assets/js/bootstrap-collapse.js"></script>
+ <script>
+ const repos = document.getElementById('repos');
+ // Get the repositories from 'api/repos'
+ $.getJSON('api/repos', function(data) {
+ console.log(data);
+ $.each(data.repositories, function(key, val) {
+ const tableRow = document.createElement('tr');
+ const name = document.createElement('td');
+ const description = document.createElement('td');
+ const language = document.createElement('td');
+ const stars = document.createElement('td');
+ const forks = document.createElement('td');
+ const license = document.createElement('td');
+ const viewButton = document.createElement('td');
+ const viewLink = document.createElement('a');
+
+ name.innerHTML = val.name;
+ description.innerHTML = val.description;
+ language.innerHTML = val.language;
+ stars.innerHTML = val.stars;
+ forks.innerHTML = val.forks;
+ license.innerHTML = val.license;
+ viewLink.href = val.url;
+ viewLink.innerHTML = 'Browse';
+ viewButton.appendChild(viewLink);
+
+ tableRow.appendChild(name);
+ tableRow.appendChild(description);
+ tableRow.appendChild(language);
+ tableRow.appendChild(stars);
+ tableRow.appendChild(forks);
+ tableRow.appendChild(license);
+ tableRow.appendChild(viewButton);
+
+ repos.appendChild(tableRow);
+ });
+ });
+ </script>
+</body>
+
+</html> \ No newline at end of file
diff --git a/routes/api.js b/routes/api.js
new file mode 100644
index 0000000..4dafcf2
--- /dev/null
+++ b/routes/api.js
@@ -0,0 +1,33 @@
+const express = require("express");
+const router = express.Router();
+const { Github } = require("../api/github");
+const github = new Github("luciferreeves");
+
+router.get('/repos', (req, res) => {
+ const page = req.query.page || 1;
+ github.getRepos(page).then(repos => {
+ const count = repos.length;
+ const repositories = [];
+ repos.forEach(repo => {
+ repositories.push({
+ name: repo.name,
+ description: repo.description,
+ url: repo.html_url,
+ language: repo.language,
+ stars: repo.stargazers_count,
+ forks: repo.forks_count,
+ issues: repo.open_issues_count,
+ license: repo.license ? repo.license.name : null,
+ updated: repo.updated_at,
+ created: repo.created_at
+ });
+ });
+ res.json({
+ count: count,
+ repositories: repositories
+ });
+ });
+})
+
+
+module.exports = router; \ No newline at end of file
diff --git a/routes/index.js b/routes/index.js
index 9b777c0..45c1096 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -3,9 +3,10 @@ const express = require("express");
const router = express.Router();
// Import the routes
const admin = require("./admin");
-
+const api = require("./api");
// Set the routes
router.use("/admin", admin);
+router.use("/api", api);
// Create the routes
router.get("/", (req, res) => {
@@ -14,6 +15,9 @@ router.get("/", (req, res) => {
router.get("/about", (req, res) => {
res.render("about.html");
});
+router.get("/repos", (req, res) => {
+ res.render("repositories.html");
+});
// Export the routes
module.exports = router;