Skip to content

Commit

Permalink
fix(component): make passport packages optional
Browse files Browse the repository at this point in the history
All passport packages are made optional, and the user should install them only if required.

GH-125
  • Loading branch information
RaghavaroraSF committed Apr 19, 2023
2 parents 5fc916f + df582fb commit 2d9998a
Show file tree
Hide file tree
Showing 31 changed files with 395 additions and 199 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Client, createClientForHandler} from '@loopback/testlab';
import {RestServer} from '@loopback/rest';
import {Application, Provider} from '@loopback/core';
import {RestServer, Request} from '@loopback/rest';
import {Application, Constructor, Provider} from '@loopback/core';
import {get} from '@loopback/openapi-v3';
import {authenticate} from '../../../../decorators';
import {STRATEGY} from '../../../../strategy-name.enum';
Expand All @@ -9,14 +9,17 @@ import {MyAuthenticationSequence} from '../../../fixtures/sequences/authenticati
import {Strategies} from '../../../../strategies/keys';
import {VerifyFunction} from '../../../../strategies';
import {userWithoutReqObj} from '../../../fixtures/data/bearer-data';
import {Request} from '@loopback/rest';
import AppleStrategy, {DecodedIdToken} from 'passport-apple';
import {AppleAuthStrategyFactoryProvider} from '../../../../strategies/passport/passport-apple-oauth2';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';

describe('getting apple oauth2 strategy with options', () => {
let app: Application;
let server: RestServer;
beforeEach(givenAServer);
beforeEach(givenAuthenticatedSequence);
beforeEach(getAuthVerifier);
afterEach(closeServer);

it('should return 302 when client id is passed and passReqToCallback is set true', async () => {
Expand Down Expand Up @@ -48,6 +51,17 @@ describe('getting apple oauth2 strategy with options', () => {
}

function getAuthVerifier() {
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
app.bind(Strategies.Passport.APPLE_OAUTH2_STRATEGY_FACTORY).toProvider(
AppleAuthStrategyFactoryProvider as unknown as Constructor<
Provider<AppleAuthStrategyFactoryProvider>
>, //To be fixed
);
app
.bind(Strategies.Passport.APPLE_OAUTH2_VERIFIER)
.toProvider(AppleAuthVerifyProvider);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import {MyAuthenticationSequence} from '../../../fixtures/sequences/authenticati
import {Strategies} from '../../../../strategies/keys';
import {AuthenticationBindings} from '../../../../keys';
import {BearerTokenVerifyProvider} from '../../../fixtures/providers/bearer-passport.provider';
import {BearerStrategyFactoryProvider} from '../../../../strategies/passport/passport-bearer';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';

/**
* Testing overall flow of authentication with bearer strategy
Expand Down Expand Up @@ -239,6 +242,15 @@ describe('Bearer-token strategy', () => {
app
.bind(Strategies.Passport.BEARER_TOKEN_VERIFIER)
.toProvider(BearerTokenVerifyProvider);
app
.bind(Strategies.Passport.BEARER_STRATEGY_FACTORY)
.toProvider(BearerStrategyFactoryProvider);
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
}

function givenAuthenticatedSequence() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {MyAuthenticationSequence} from '../../../fixtures/sequences/authenticati
import {Strategies} from '../../../../strategies/keys';
import {AuthenticationBindings} from '../../../../keys';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';

describe('Client-password strategy', () => {
let app: Application;
Expand Down Expand Up @@ -143,6 +144,9 @@ describe('Client-password strategy', () => {
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
}

function givenAuthenticatedSequence() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Client, createClientForHandler} from '@loopback/testlab';
import {RestServer, Request} from '@loopback/rest';
import {Application, Provider} from '@loopback/core';
import {Application, Constructor, Provider} from '@loopback/core';
import {get} from '@loopback/openapi-v3';
import {authenticate} from '../../../../decorators';
import {STRATEGY} from '../../../../strategy-name.enum';
Expand All @@ -10,6 +10,9 @@ import {Strategies} from '../../../../strategies/keys';
import {VerifyFunction} from '../../../../strategies';
import {userWithoutReqObj} from '../../../fixtures/data/bearer-data';
import {Cognito} from '../../../../types';
import {CognitoStrategyFactoryProvider} from '../../../../strategies/passport/passport-cognito-oauth2';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';

describe('getting cognito oauth2 strategy with options', () => {
let app: Application;
Expand Down Expand Up @@ -46,9 +49,20 @@ describe('getting cognito oauth2 strategy with options', () => {
}

function getAuthVerifier() {
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
app
.bind(Strategies.Passport.COGNITO_OAUTH2_VERIFIER)
.toProvider(CognitoAuthVerifyProvider);
app.bind(Strategies.Passport.COGNITO_OAUTH2_STRATEGY_FACTORY).toProvider(
CognitoStrategyFactoryProvider as unknown as Constructor<
Provider<CognitoStrategyFactoryProvider>
>, //To be fixed
);
}

function givenAuthenticatedSequence() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Client, createClientForHandler} from '@loopback/testlab';
import {RestServer} from '@loopback/rest';
import {Application, Provider} from '@loopback/core';
import {RestServer, Request} from '@loopback/rest';
import {Application, Constructor, Provider} from '@loopback/core';
import {get} from '@loopback/openapi-v3';
import {authenticate} from '../../../../decorators';
import {STRATEGY} from '../../../../strategy-name.enum';
Expand All @@ -10,7 +10,9 @@ import {Strategies} from '../../../../strategies/keys';
import {VerifyFunction} from '../../../../strategies';
import {userWithoutReqObj} from '../../../fixtures/data/bearer-data';
import * as GoogleStrategy from 'passport-google-oauth20';
import {Request} from '@loopback/rest';
import {GoogleAuthStrategyFactoryProvider} from '../../../../strategies/passport/passport-google-oauth2';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';

describe('getting google oauth2 strategy with options', () => {
let app: Application;
Expand Down Expand Up @@ -47,9 +49,20 @@ describe('getting google oauth2 strategy with options', () => {
}

function getAuthVerifier() {
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
app
.bind(Strategies.Passport.GOOGLE_OAUTH2_VERIFIER)
.toProvider(GoogleAuthVerifyProvider);
app.bind(Strategies.Passport.GOOGLE_OAUTH2_STRATEGY_FACTORY).toProvider(
GoogleAuthStrategyFactoryProvider as unknown as Constructor<
Provider<GoogleAuthStrategyFactoryProvider>
>, //To be fixed
);
}

function givenAuthenticatedSequence() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Client, createClientForHandler} from '@loopback/testlab';
import {RestServer} from '@loopback/rest';
import {Application, Provider} from '@loopback/core';
import {RestServer, Request} from '@loopback/rest';
import {Application, Constructor, Provider} from '@loopback/core';
import {get} from '@loopback/openapi-v3';
import {authenticate} from '../../../../decorators';
import {STRATEGY} from '../../../../strategy-name.enum';
Expand All @@ -10,7 +10,9 @@ import {Strategies} from '../../../../strategies/keys';
import {VerifyCallback, VerifyFunction} from '../../../../strategies';
import {userWithoutReqObj} from '../../../fixtures/data/bearer-data';
import * as InstagramStrategy from 'passport-instagram';
import {Request} from '@loopback/rest';
import {InstagramAuthStrategyFactoryProvider} from '../../../../strategies/passport/passport-insta-oauth2';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';

describe('getting instagram oauth2 strategy with options', () => {
let app: Application;
Expand Down Expand Up @@ -47,6 +49,17 @@ describe('getting instagram oauth2 strategy with options', () => {
}

function getAuthVerifier() {
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
app.bind(Strategies.Passport.INSTAGRAM_OAUTH2_STRATEGY_FACTORY).toProvider(
InstagramAuthStrategyFactoryProvider as unknown as Constructor<
Provider<InstagramAuthStrategyFactoryProvider>
>, //To be fixed
);
app
.bind(Strategies.Passport.INSTAGRAM_OAUTH2_VERIFIER)
.toProvider(InstagramAuthVerifyProvider);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Client, createClientForHandler} from '@loopback/testlab';
import {RestServer} from '@loopback/rest';
import {Application, Provider} from '@loopback/core';
import {RestServer, Request} from '@loopback/rest';
import {Application, Constructor, Provider} from '@loopback/core';
import {get} from '@loopback/openapi-v3';
import {authenticate} from '../../../../decorators';
import {STRATEGY} from '../../../../strategy-name.enum';
Expand All @@ -9,8 +9,10 @@ import {MyAuthenticationSequence} from '../../../fixtures/sequences/authenticati
import {Strategies} from '../../../../strategies/keys';
import {Keycloak, VerifyFunction} from '../../../../strategies';
import {userWithoutReqObj} from '../../../fixtures/data/bearer-data';
import {Request} from '@loopback/rest';
import {IAuthUser} from '../../../../types';
import {KeycloakStrategyFactoryProvider} from '../../../../strategies/passport/passport-keycloak';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';

describe('getting keycloak oauth2 strategy with options', () => {
let app: Application;
Expand Down Expand Up @@ -53,9 +55,20 @@ describe('getting keycloak oauth2 strategy with options', () => {
}

function getAuthVerifier() {
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
app
.bind(Strategies.Passport.KEYCLOAK_VERIFIER)
.toProvider(KeycloakAuthVerifyProvider);
app.bind(Strategies.Passport.KEYCLOAK_STRATEGY_FACTORY).toProvider(
KeycloakStrategyFactoryProvider as unknown as Constructor<
Provider<KeycloakStrategyFactoryProvider>
>, //To be fixed
);
}

function givenAuthenticatedSequence() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ import {LocalVerifyProvider} from '../../../fixtures/providers/local-password.pr
import {AuthenticationBindings} from '../../../../keys';
import {IAuthUser} from '../../../../types';
import {UserCred} from '../../../fixtures/user-cred.model';
import {LocalPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-local';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
/**
* Testing overall flow of authentication with bearer strategy
*/
Expand Down Expand Up @@ -173,6 +176,15 @@ describe('Local passport strategy', () => {
app
.bind(Strategies.Passport.LOCAL_PASSWORD_VERIFIER)
.toProvider(LocalVerifyProvider);
app
.bind(Strategies.Passport.LOCAL_STRATEGY_FACTORY)
.toProvider(LocalPasswordStrategyFactoryProvider);
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
}

function givenAuthenticatedSequence() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ import {Strategies} from '../../../../strategies/keys';
import {ResourceOwnerVerifyProvider} from '../../../fixtures/providers/resource-owner.provider';
import {AuthenticationBindings} from '../../../../keys';
import {IAuthUser} from '../../../../types';
import {ResourceOwnerPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-resource-owner-password';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';

describe('Resource-owner-password strategy', () => {
let app: Application;
Expand Down Expand Up @@ -204,6 +207,15 @@ describe('Resource-owner-password strategy', () => {
app
.bind(Strategies.Passport.RESOURCE_OWNER_PASSWORD_VERIFIER)
.toProvider(ResourceOwnerVerifyProvider);
app
.bind(Strategies.Passport.RESOURCE_OWNER_STRATEGY_FACTORY)
.toProvider(ResourceOwnerPasswordStrategyFactoryProvider);
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
}

function givenAuthenticatedSequence() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Client, createClientForHandler} from '@loopback/testlab';
import {RestServer} from '@loopback/rest';
import {Application, Provider} from '@loopback/core';
import {RestServer, Request} from '@loopback/rest';
import {Application, Constructor, Provider} from '@loopback/core';
import {get} from '@loopback/openapi-v3';
import {authenticate} from '../../../../decorators';
import {STRATEGY} from '../../../../strategy-name.enum';
Expand All @@ -9,14 +9,19 @@ import {MyAuthenticationMiddlewareSequence} from '../../../fixtures/sequences/au
import {Strategies} from '../../../../strategies/keys';
import {VerifyFunction} from '../../../../strategies';
import {userWithoutReqObj} from '../../../fixtures/data/bearer-data';
import {Request} from '@loopback/rest';
import AppleStrategy, {DecodedIdToken} from 'passport-apple';
import {AppleAuthStrategyFactoryProvider} from '../../../../strategies/passport/passport-apple-oauth2';
import {
ClientPasswordStrategyFactoryProvider,
ClientPasswordVerifyProvider,
} from '../../../../strategies/passport/passport-client-password';

describe('getting apple oauth2 strategy with options using Middleware Sequence', () => {
let app: Application;
let server: RestServer;
beforeEach(givenAServer);
beforeEach(givenAuthenticatedSequence);
beforeEach(getAuthVerifier);
afterEach(closeServer);

it('should return 302 when client id is passed and passReqToCallback is set true', async () => {
Expand Down Expand Up @@ -48,6 +53,17 @@ describe('getting apple oauth2 strategy with options using Middleware Sequence',
}

function getAuthVerifier() {
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
app.bind(Strategies.Passport.APPLE_OAUTH2_STRATEGY_FACTORY).toProvider(
AppleAuthStrategyFactoryProvider as unknown as Constructor<
Provider<AppleAuthStrategyFactoryProvider>
>, //To be Fixed
);
app
.bind(Strategies.Passport.APPLE_OAUTH2_VERIFIER)
.toProvider(AppleAuthVerifyProvider);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import {MyAuthenticationMiddlewareSequence} from '../../../fixtures/sequences/au
import {Strategies} from '../../../../strategies/keys';
import {AuthenticationBindings} from '../../../../keys';
import {BearerTokenVerifyProvider} from '../../../fixtures/providers/bearer-passport.provider';
import {BearerStrategyFactoryProvider} from '../../../../strategies/passport/passport-bearer';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';

/**
* Testing overall flow of authentication with bearer strategy
Expand Down Expand Up @@ -239,6 +242,15 @@ describe('Bearer-token strategy using Middleware Sequence', () => {
app
.bind(Strategies.Passport.BEARER_TOKEN_VERIFIER)
.toProvider(BearerTokenVerifyProvider);
app
.bind(Strategies.Passport.BEARER_STRATEGY_FACTORY)
.toProvider(BearerStrategyFactoryProvider);
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
}

function givenAuthenticatedSequence() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {MyAuthenticationMiddlewareSequence} from '../../../fixtures/sequences/au
import {Strategies} from '../../../../strategies/keys';
import {AuthenticationBindings} from '../../../../keys';
import {ClientPasswordVerifyProvider} from '../../../fixtures/providers/passport-client.provider';
import {ClientPasswordStrategyFactoryProvider} from '../../../../strategies/passport/passport-client-password';

describe('Client-password strategy using Middleware Sequence', () => {
let app: Application;
Expand Down Expand Up @@ -140,6 +141,9 @@ describe('Client-password strategy using Middleware Sequence', () => {
}

function getAuthVerifier() {
app
.bind(Strategies.Passport.CLIENT_PASSWORD_STRATEGY_FACTORY)
.toProvider(ClientPasswordStrategyFactoryProvider);
app
.bind(Strategies.Passport.OAUTH2_CLIENT_PASSWORD_VERIFIER)
.toProvider(ClientPasswordVerifyProvider);
Expand Down
Loading

0 comments on commit 2d9998a

Please sign in to comment.