@gapi/playground
    TypeScript icon, indicating that this package has built-in type declarations

    1.8.125 • Public • Published

    @Gapi authentication Module

    For questions/issues you can write ticket here
    This module is intended to be used with rxdi or gapi

    Installation and basic examples:

    To install this Gapi module, run:
    $ npm install @gapi/auth --save

    Consuming @gapi/auth

    Import inside AppModule or CoreModule
    import { Module } from "@rxdi/core";
    import { AuthModule } from "@gapi/auth";
    
    @Module({
        imports: [
           AuthModule.forRoot({
                algorithm: 'HS256',
                cert: 'dadada',
                cyper: {
                    algorithm: 'dada',
                    iv: '',
                    privateKey: 'dadada'
                }
            }),
        ]
    })
    export class CoreModule {}
    Create Auth Service and provide it
    import { Service } from '@rxdi/core';
    import * as Boom from 'boom';
    import { AuthInterface, AuthInternalService, TokenData } from '@gapi/auth';
    
    export interface UserInfo {
        scope: ['ADMIN', 'USER'];
        type: 'ADMIN' | 'USER';
        iat: number;
    }
    
    @Service()
    export class AuthService implements AuthInterface {
    
        constructor(
            private authService: AuthInternalService
        ) { }
    
        onSubOperation(message, params, webSocket) {
            return params;
        }
    
        onSubConnection(connectionParams): TokenData {
            if (connectionParams.token) {
                return this.validateToken(connectionParams.token, 'Subscription');
            } else {
                throw Boom.unauthorized();
            }
        }
    
        validateToken(token: string, requestType: 'Query' | 'Subscription' = 'Query'): any {
            const user = <any>this.authService.verifyToken(token);
            user.type = user.scope[0];
            console.log(`${requestType} from: ${JSON.stringify(user)}`);
            if (user) {
                return user;
            } else {
                throw Boom.unauthorized();
            }
        }
    
        signJWTtoken(tokenData: TokenData): string {
            return this.authService.sign(tokenData);
        }
    
        issueJWTToken(tokenData: TokenData) {
            const jwtToken = this.authService.sign({
                email: '',
                id: 1,
                scope: ['ADMIN', 'USER']
            });
            return jwtToken;
        }
    
        verifyToken(token: string): TokenData {
            return this.authService.verifyToken(token);
        }
    
        decryptPassword(password: string): string {
            return this.authService.decrypt(password);
        }
    
        encryptPassword(password: string): string {
            return this.authService.encrypt(password);
        }
    
    }
    Provide this particular Auth Service to authentication parameter inside CoreModule.forRoot
    import { CoreModule, Module } from '@gapi/core';
    import { AuthService } from './app/core/services/auth/auth.service';
    import { AuthModule } from '@gapi/auth';
    import { readFileSync } from 'fs';
    
    @Module({
        imports: [
            AuthModule.forRoot({
                algorithm: 'HS256',
                cert: readFileSync('./cert.key'),
                cyper: {
                    algorithm: 'aes256',
                    iv: 'Jkyt1H3FA8JK9L3B',
                    privateKey: '8zTVzr3p53VC12jHV54rIYu2545x47lA'
                }
            }),
            CoreModule.forRoot({
                pubsub: {
                    authentication: AuthService
                },
                graphql: {
                    authentication: AuthService
                },
            }),
    
        ]
    })
    export class FrameworkImports {}

    Then Subscriptions, Mutations and Queries will be secured via single authentication method validateToken inside AuthService!

    TODO: Better documentation...

    Enjoy ! :)

    Install

    npm i @gapi/playground

    DownloadsWeekly Downloads

    436

    Version

    1.8.125

    License

    MIT

    Unpacked Size

    13.6 kB

    Total Files

    16

    Last publish

    Collaborators

    • gapi