8 Commits

Author SHA1 Message Date
96287ed710 1.0.12 2021-02-09 10:30:00 +00:00
ceb48fd45e fix(core): update 2021-02-09 10:30:00 +00:00
0ebd3c9872 1.0.11 2021-02-09 10:26:42 +00:00
397b6f13a7 fix(core): update 2021-02-09 10:26:42 +00:00
566a07a6b5 1.0.10 2020-03-28 22:48:18 +00:00
f3e1703eef fix(core): update 2020-03-28 22:48:17 +00:00
f1d180aefc 1.0.9 2019-10-01 20:03:37 +02:00
0753fae234 fix(core): update 2019-10-01 20:03:36 +02:00
8 changed files with 10198 additions and 739 deletions

5
.gitignore vendored
View File

@ -8,9 +8,12 @@ pages/
# installs # installs
node_modules/ node_modules/
# caches and builds # caches
.yarn/ .yarn/
.cache/ .cache/
.rpt2_cache
# builds
dist/ dist/
dist_web/ dist_web/
dist_serve/ dist_serve/

View File

@ -1,5 +1,5 @@
# gitzone standard # gitzone ci_default
image: hosttoday/ht-docker-node:npmci image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
cache: cache:
paths: paths:
@ -34,48 +34,11 @@ snyk:
- docker - docker
- notpriv - notpriv
sast:
stage: security
image: registry.gitlab.com/hosttoday/ht-docker-dbase:npmci
variables:
DOCKER_DRIVER: overlay2
allow_failure: true
services:
- docker:stable-dind
script:
- npmci npm prepare
- npmci npm install
- npmci command npm run build
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')
- docker run
--env SAST_CONFIDENCE_LEVEL="${SAST_CONFIDENCE_LEVEL:-3}"
--volume "$PWD:/code"
--volume /var/run/docker.sock:/var/run/docker.sock
"registry.gitlab.com/gitlab-org/security-products/sast:$SP_VERSION" /app/bin/run /code
artifacts:
reports:
sast: gl-sast-report.json
tags:
- docker
- priv
# ==================== # ====================
# test stage # test stage
# ==================== # ====================
testLTS: testStable:
stage: test
script:
- npmci npm prepare
- npmci node install lts
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
- notpriv
testSTABLE:
stage: test stage: test
script: script:
- npmci npm prepare - npmci npm prepare
@ -85,6 +48,18 @@ testSTABLE:
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
- priv
testBuild:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
- notpriv - notpriv
release: release:
@ -103,19 +78,12 @@ release:
# ==================== # ====================
codequality: codequality:
stage: metadata stage: metadata
image: docker:stable
allow_failure: true allow_failure: true
services:
- docker:stable-dind
script: script:
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') - npmci command npm install -g tslint typescript
- docker run - npmci npm prepare
--env SOURCE_CODE="$PWD" - npmci npm install
--volume "$PWD":/code - npmci command "tslint -c tslint.json ./ts/**/*.ts"
--volume /var/run/docker.sock:/var/run/docker.sock
"registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code
artifacts:
paths: [codeclimate.json]
tags: tags:
- docker - docker
- priv - priv
@ -131,13 +99,15 @@ trigger:
- notpriv - notpriv
pages: pages:
image: hosttoday/ht-docker-node:npmci image: hosttoday/ht-docker-dbase:npmci
services:
- docker:stable-dind
stage: metadata stage: metadata
script: script:
- npmci command npm install -g typedoc typescript - npmci command npm install -g @gitzone/tsdoc
- npmci npm prepare - npmci npm prepare
- npmci npm install - npmci npm install
- npmci command typedoc --module "commonjs" --target "ES2016" --out public/ ts/ - npmci command tsdoc
tags: tags:
- docker - docker
- notpriv - notpriv

10769
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,10 @@
{ {
"name": "@pushrocks/smartjwt", "name": "@pushrocks/smartjwt",
"version": "1.0.8", "version": "1.0.12",
"private": false, "private": false,
"description": "a package for handling jwt", "description": "a package for handling jwt",
"main": "dist/index.js", "main": "dist_ts/index.js",
"typings": "dist/index.d.ts", "typings": "dist_ts/index.d.ts",
"author": "Lossless GmbH", "author": "Lossless GmbH",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
@ -13,16 +13,27 @@
"format": "(gitzone format)" "format": "(gitzone format)"
}, },
"devDependencies": { "devDependencies": {
"@gitzone/tsbuild": "^2.1.17", "@gitzone/tsbuild": "^2.1.25",
"@gitzone/tstest": "^1.0.24", "@gitzone/tstest": "^1.0.52",
"@pushrocks/tapbundle": "^3.0.13", "@pushrocks/tapbundle": "^3.2.10",
"@types/node": "^12.7.8", "@types/node": "^14.14.25",
"tslint": "^5.20.0", "tslint": "^6.1.3",
"tslint-config-prettier": "^1.15.0" "tslint-config-prettier": "^1.15.0"
}, },
"dependencies": { "dependencies": {
"@pushrocks/smartcrypto": "^1.0.7", "@pushrocks/smartcrypto": "^1.0.9",
"@types/jsonwebtoken": "^8.3.4", "@types/jsonwebtoken": "^8.5.0",
"jsonwebtoken": "^8.5.1" "jsonwebtoken": "^8.5.1"
} },
"files": [
"ts/*",
"ts_web/*",
"dist/*",
"dist_web/*",
"dist_ts_web/*",
"assets/*",
"cli.js",
"npmextra.json",
"readme.md"
]
} }

View File

@ -20,9 +20,7 @@ a package for handling jwt
For further information read the linked docs at the top of this readme. For further information read the linked docs at the top of this readme.
This package is intended for being used serverside. There is a corresponding client package for browsers calls @pushrocks/webtoken
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) > MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
[![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://maintainedby.lossless.com) [![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)

View File

@ -21,7 +21,10 @@ tap.test('should create a new jwt', async () => {
tap.test('should verify a jwt', async () => { tap.test('should verify a jwt', async () => {
const data = await smartjwtInstance.verifyJWTAndGetData(testJwt); const data = await smartjwtInstance.verifyJWTAndGetData(testJwt);
// tslint:disable-next-line: no-unused-expression
expect(data).to.not.be.null;
console.log(data); console.log(data);
console.log(smartjwtInstance.publicKey.toPemString());
}); });
tap.test('should not verify a wrong jwt', async () => { tap.test('should not verify a wrong jwt', async () => {
@ -38,4 +41,11 @@ tap.test('should not verify a wrong jwt', async () => {
expect(error).to.be.instanceOf(Error); expect(error).to.be.instanceOf(Error);
}); });
tap.test('should verify a jwt on another instance', async () => {
const secondSmartJwtInstance = new smartjwt.SmartJwt();
secondSmartJwtInstance.setPublicPemKeyForVerification(smartjwtInstance.publicKey.toPemString());
const result = secondSmartJwtInstance.verifyJWTAndGetData(testJwt);
console.log(result);
});
tap.start(); tap.start();

View File

@ -8,17 +8,17 @@ export interface ISmartJWTJSONKeypair {
/** /**
* A class to create and validate JWTs and their keys * A class to create and validate JWTs and their keys
*/ */
export class SmartJwt { export class SmartJwt<T extends object = any> {
public smartcryptoInstance = new plugins.smartcrypto.Smartcrypto(); public smartcryptoInstance = new plugins.smartcrypto.Smartcrypto();
public publicKey: plugins.smartcrypto.PublicKey; public publicKey: plugins.smartcrypto.PublicKey;
public privateKey: plugins.smartcrypto.PrivateKey; public privateKey: plugins.smartcrypto.PrivateKey;
constructor() {}; constructor() {}
/** /**
* creates a JWT * creates a JWT
*/ */
public async createJWT(payloadArg: any) { public async createJWT(payloadArg: T) {
return plugins.jsonwebtoken.sign(payloadArg, this.privateKey.toPemString(), { return plugins.jsonwebtoken.sign(payloadArg, this.privateKey.toPemString(), {
algorithm: 'RS256' algorithm: 'RS256'
}); });
@ -27,10 +27,11 @@ export class SmartJwt {
/** /**
* checks a JWT * checks a JWT
*/ */
public async verifyJWTAndGetData(jwtArg: string) { public async verifyJWTAndGetData(jwtArg: string): Promise<T> {
return plugins.jsonwebtoken.verify(jwtArg, this.publicKey.toPemString(), { const result = plugins.jsonwebtoken.verify(jwtArg, this.publicKey.toPemString(), {
algorithms: ['RS256'] algorithms: ['RS256']
}); });
return result as any;
} }
/** /**
@ -41,7 +42,7 @@ export class SmartJwt {
} }
/** /**
* sets a public key * sets a public key
*/ */
public async setPublicKey(publicKey: plugins.smartcrypto.PublicKey) { public async setPublicKey(publicKey: plugins.smartcrypto.PublicKey) {
this.publicKey = publicKey; this.publicKey = publicKey;
@ -65,7 +66,6 @@ export class SmartJwt {
this.publicKey = plugins.smartcrypto.PublicKey.fromPemString(jsonKeyPair.publicPem); this.publicKey = plugins.smartcrypto.PublicKey.fromPemString(jsonKeyPair.publicPem);
} }
/** /**
* creates a new keypair * creates a new keypair
*/ */
@ -74,4 +74,16 @@ export class SmartJwt {
this.setPrivateKey(keypair.privateKey); this.setPrivateKey(keypair.privateKey);
this.setPublicKey(keypair.publicKey); this.setPublicKey(keypair.publicKey);
} }
}
/**
* when you just want to validate something
* @param publicPemKey
*/
public setPublicPemKeyForVerification(publicPemKey: string) {
this.publicKey = plugins.smartcrypto.PublicKey.fromPemString(publicPemKey);
}
public async init() {
await this.createNewKeyPair();
}
}

View File

@ -1,12 +1,8 @@
// @pushrocks scope // @pushrocks scope
import * as smartcrypto from '@pushrocks/smartcrypto'; import * as smartcrypto from '@pushrocks/smartcrypto';
export { export { smartcrypto };
smartcrypto
};
// thirdparty scope // thirdparty scope
import * as jsonwebtoken from 'jsonwebtoken'; import * as jsonwebtoken from 'jsonwebtoken';
export { export { jsonwebtoken };
jsonwebtoken
};