Initial working google auth

This commit is contained in:
JBB0807 2025-04-16 10:49:46 -07:00
parent fb52d49f74
commit 00a40f6bba
1058 changed files with 114441 additions and 0 deletions

82
auth-service/node_modules/passport/CHANGELOG.md generated vendored Normal file
View file

@ -0,0 +1,82 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [0.7.0] - 2023-11-27
### Changed
- Set `req.authInfo` by default when using the `assignProperty` option to
`authenticate()` middleware. This makes the behavior the same as when not using
the option, and can be disabled by setting `authInfo` option to `false`.
## [0.6.0] - 2022-05-20
### Added
- `authenticate()`, `req#login`, and `req#logout` accept a
`keepSessionInfo: true` option to keep session information after regenerating
the session.
### Changed
- `req#login()` and `req#logout()` regenerate the the session and clear session
information by default.
- `req#logout()` is now an asynchronous function and requires a callback
function as the last argument.
### Security
- Improved robustness against session fixation attacks in cases where there is
physical access to the same system or the application is susceptible to
cross-site scripting (XSS).
## [0.5.3] - 2022-05-16
### Fixed
- `initialize()` middleware extends request with `login()`, `logIn()`,
`logout()`, `logOut()`, `isAuthenticated()`, and `isUnauthenticated()` functions
again, reverting change from 0.5.1.
## [0.5.2] - 2021-12-16
### Fixed
- Introduced a compatibility layer for strategies that depend directly on
`passport@0.4.x` or earlier (such as `passport-azure-ad`), which were
broken by the removal of private variables in `passport@0.5.1`.
## [0.5.1] - 2021-12-15
### Added
- Informative error message in session strategy if session support is not
available.
### Changed
- `authenticate()` middleware, rather than `initialize()` middleware, extends
request with `login()`, `logIn()`, `logout()`, `logOut()`, `isAuthenticated()`,
and `isUnauthenticated()` functions.
## [0.5.0] - 2021-09-23
### Changed
- `initialize()` middleware extends request with `login()`, `logIn()`,
`logout()`, `logOut()`, `isAuthenticated()`, and `isUnauthenticated()`
functions.
### Removed
- `login()`, `logIn()`, `logout()`, `logOut()`, `isAuthenticated()`, and
`isUnauthenticated()` functions no longer added to `http.IncomingMessage.prototype`.
### Fixed
- `userProperty` option to `initialize()` middleware only affects the current
request, rather than all requests processed via singleton Passport instance,
eliminating a race condition in situations where `initialize()` middleware is
used multiple times in an application with `userProperty` set to different
values.
[Unreleased]: https://github.com/jaredhanson/passport/compare/v0.6.0...HEAD
[0.6.0]: https://github.com/jaredhanson/passport/compare/v0.5.3...v0.6.0
[0.5.3]: https://github.com/jaredhanson/passport/compare/v0.5.2...v0.5.3
[0.5.2]: https://github.com/jaredhanson/passport/compare/v0.5.1...v0.5.2
[0.5.1]: https://github.com/jaredhanson/passport/compare/v0.5.0...v0.5.1

20
auth-service/node_modules/passport/LICENSE generated vendored Normal file
View file

@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2011-2021 Jared Hanson
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.

185
auth-service/node_modules/passport/README.md generated vendored Normal file
View file

@ -0,0 +1,185 @@
[![passport banner](http://cdn.auth0.com/img/passport-banner-github.png)](http://passportjs.org)
# Passport
Passport is [Express](http://expressjs.com/)-compatible authentication
middleware for [Node.js](http://nodejs.org/).
Passport's sole purpose is to authenticate requests, which it does through an
extensible set of plugins known as _strategies_. Passport does not mount
routes or assume any particular database schema, which maximizes flexibility and
allows application-level decisions to be made by the developer. The API is
simple: you provide Passport a request to authenticate, and Passport provides
hooks for controlling what occurs when authentication succeeds or fails.
---
<p align="center">
<sup>Sponsors</sup>
<br>
<a href="https://workos.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=passport_js&utm_source=github"><img src="https://raw.githubusercontent.com/jaredhanson/passport/master/sponsors/workos.png"></a><br/>
<a href="https://workos.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=passport_js&utm_source=github"><b>Your app, enterprise-ready.</b><br/>Start selling to enterprise customers with just a few lines of code. Add Single Sign-On (and more) in minutes instead of months.</a>
<br>
<br>
<a href="https://www.descope.com/?utm_source=PassportJS&utm_medium=referral&utm_campaign=oss-sponsorship">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jaredhanson/passport/master/sponsors/descope-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/jaredhanson/passport/master/sponsors/descope.svg">
<img src="https://raw.githubusercontent.com/jaredhanson/passport/master/sponsors/descope.svg" width="275">
</picture>
</a><br/>
<a href="https://www.descope.com/?utm_source=PassportJS&utm_medium=referral&utm_campaign=oss-sponsorship"><b>Drag and drop your auth</b><br/>Add authentication and user management to your consumer and business apps with a few lines of code.</a>
<br>
<br>
<a href="https://fusionauth.io/?utm_source=passportjs&utm_medium=referral&utm_campaign=sponsorship"><img src="https://raw.githubusercontent.com/jaredhanson/passport/master/sponsors/fusionauth.png" width="275"></a><br/>
<a href="https://fusionauth.io/?utm_source=passportjs&utm_medium=referral&utm_campaign=sponsorship"><b>Auth. Built for Devs, by Devs</b><br/>Add login, registration, SSO, MFA, and a bazillion other features to your app in minutes. Integrates with any codebase and installs on any server, anywhere in the world.</a>
</p>
---
Status:
[![Build](https://travis-ci.org/jaredhanson/passport.svg?branch=master)](https://travis-ci.org/jaredhanson/passport)
[![Coverage](https://coveralls.io/repos/jaredhanson/passport/badge.svg?branch=master)](https://coveralls.io/r/jaredhanson/passport)
[![Dependencies](https://david-dm.org/jaredhanson/passport.svg)](https://david-dm.org/jaredhanson/passport)
## Install
```
$ npm install passport
```
## Usage
#### Strategies
Passport uses the concept of strategies to authenticate requests. Strategies
can range from verifying username and password credentials, delegated
authentication using [OAuth](http://oauth.net/) (for example, via [Facebook](http://www.facebook.com/)
or [Twitter](http://twitter.com/)), or federated authentication using [OpenID](http://openid.net/).
Before authenticating requests, the strategy (or strategies) used by an
application must be configured.
```javascript
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
```
There are 480+ strategies. Find the ones you want at: [passportjs.org](http://passportjs.org)
#### Sessions
Passport will maintain persistent login sessions. In order for persistent
sessions to work, the authenticated user must be serialized to the session, and
deserialized when subsequent requests are made.
Passport does not impose any restrictions on how your user records are stored.
Instead, you provide functions to Passport which implements the necessary
serialization and deserialization logic. In a typical application, this will be
as simple as serializing the user ID, and finding the user by ID when
deserializing.
```javascript
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
```
#### Middleware
To use Passport in an [Express](http://expressjs.com/) or
[Connect](http://senchalabs.github.com/connect/)-based application, configure it
with the required `passport.initialize()` middleware. If your application uses
persistent login sessions (recommended, but not required), `passport.session()`
middleware must also be used.
```javascript
var app = express();
app.use(require('serve-static')(__dirname + '/../../public'));
app.use(require('cookie-parser')());
app.use(require('body-parser').urlencoded({ extended: true }));
app.use(require('express-session')({ secret: 'keyboard cat', resave: true, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
```
#### Authenticate Requests
Passport provides an `authenticate()` function, which is used as route
middleware to authenticate requests.
```javascript
app.post('/login',
passport.authenticate('local', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
```
## Strategies
Passport has a comprehensive set of **over 480** authentication strategies
covering social networking, enterprise integration, API services, and more.
## Search all strategies
There is a **Strategy Search** at [passportjs.org](http://passportjs.org)
The following table lists commonly used strategies:
|Strategy | Protocol |Developer |
|---------------------------------------------------------------|--------------------------|------------------------------------------------|
|[Local](https://github.com/jaredhanson/passport-local) | HTML form |[Jared Hanson](https://github.com/jaredhanson) |
|[OpenID](https://github.com/jaredhanson/passport-openid) | OpenID |[Jared Hanson](https://github.com/jaredhanson) |
|[BrowserID](https://github.com/jaredhanson/passport-browserid) | BrowserID |[Jared Hanson](https://github.com/jaredhanson) |
|[Facebook](https://github.com/jaredhanson/passport-facebook) | OAuth 2.0 |[Jared Hanson](https://github.com/jaredhanson) |
|[Google](https://github.com/jaredhanson/passport-google) | OpenID |[Jared Hanson](https://github.com/jaredhanson) |
|[Google](https://github.com/jaredhanson/passport-google-oauth) | OAuth / OAuth 2.0 |[Jared Hanson](https://github.com/jaredhanson) |
|[Twitter](https://github.com/jaredhanson/passport-twitter) | OAuth |[Jared Hanson](https://github.com/jaredhanson) |
|[Azure Active Directory](https://github.com/AzureAD/passport-azure-ad) | OAuth 2.0 / OpenID / SAML |[Azure](https://github.com/azuread) |
## Examples
- For a complete, working example, refer to the [example](https://github.com/passport/express-4.x-local-example)
that uses [passport-local](https://github.com/jaredhanson/passport-local).
- **Local Strategy**: Refer to the following tutorials for setting up user authentication via LocalStrategy (`passport-local`):
- Mongo
- Express v3x - [Tutorial](http://mherman.org/blog/2016/09/25/node-passport-and-postgres/#.V-govpMrJE5) / [working example](https://github.com/mjhea0/passport-local-knex)
- Express v4x - [Tutorial](http://mherman.org/blog/2015/01/31/local-authentication-with-passport-and-express-4/) / [working example](https://github.com/mjhea0/passport-local-express4)
- Postgres
- [Tutorial](http://mherman.org/blog/2015/01/31/local-authentication-with-passport-and-express-4/) / [working example](https://github.com/mjhea0/passport-local-express4)
- **Social Authentication**: Refer to the following tutorials for setting up various social authentication strategies:
- Express v3x - [Tutorial](http://mherman.org/blog/2013/11/10/social-authentication-with-passport-dot-js/) / [working example](https://github.com/mjhea0/passport-examples)
- Express v4x - [Tutorial](http://mherman.org/blog/2015/09/26/social-authentication-in-node-dot-js-with-passport) / [working example](https://github.com/mjhea0/passport-social-auth)
## Related Modules
- [Locomotive](https://github.com/jaredhanson/locomotive) — Powerful MVC web framework
- [OAuthorize](https://github.com/jaredhanson/oauthorize) — OAuth service provider toolkit
- [OAuth2orize](https://github.com/jaredhanson/oauth2orize) — OAuth 2.0 authorization server toolkit
- [connect-ensure-login](https://github.com/jaredhanson/connect-ensure-login) — middleware to ensure login sessions
The [modules](https://github.com/jaredhanson/passport/wiki/Modules) page on the
[wiki](https://github.com/jaredhanson/passport/wiki) lists other useful modules
that build upon or integrate with Passport.
## License
[The MIT License](http://opensource.org/licenses/MIT)
Copyright (c) 2011-2021 Jared Hanson <[https://www.jaredhanson.me/](https://www.jaredhanson.me/)>

3
auth-service/node_modules/passport/etc/jsdoc.json generated vendored Normal file
View file

@ -0,0 +1,3 @@
{
"plugins": ["plugins/markdown"]
}

486
auth-service/node_modules/passport/lib/authenticator.js generated vendored Normal file
View file

@ -0,0 +1,486 @@
// Module dependencies.
var SessionStrategy = require('./strategies/session')
, SessionManager = require('./sessionmanager');
/**
* Create a new `Authenticator` object.
*
* @public
* @class
*/
function Authenticator() {
this._key = 'passport';
this._strategies = {};
this._serializers = [];
this._deserializers = [];
this._infoTransformers = [];
this._framework = null;
this.init();
}
/**
* Initialize authenticator.
*
* Initializes the `Authenticator` instance by creating the default `{@link SessionManager}`,
* {@link Authenticator#use `use()`}'ing the default `{@link SessionStrategy}`, and
* adapting it to work as {@link https://github.com/senchalabs/connect#readme Connect}-style
* middleware, which is also compatible with {@link https://expressjs.com/ Express}.
*
* @private
*/
Authenticator.prototype.init = function() {
this.framework(require('./framework/connect')());
this.use(new SessionStrategy({ key: this._key }, this.deserializeUser.bind(this)));
this._sm = new SessionManager({ key: this._key }, this.serializeUser.bind(this));
};
/**
* Register a strategy for later use when authenticating requests. The name
* with which the strategy is registered is passed to {@link Authenticator#authenticate `authenticate()`}.
*
* @public
* @param {string} [name=strategy.name] - Name of the strategy. When specified,
* this value overrides the strategy's name.
* @param {Strategy} strategy - Authentication strategy.
* @returns {this}
*
* @example <caption>Register strategy.</caption>
* passport.use(new GoogleStrategy(...));
*
* @example <caption>Register strategy and override name.</caption>
* passport.use('password', new LocalStrategy(function(username, password, cb) {
* // ...
* }));
*/
Authenticator.prototype.use = function(name, strategy) {
if (!strategy) {
strategy = name;
name = strategy.name;
}
if (!name) { throw new Error('Authentication strategies must have a name'); }
this._strategies[name] = strategy;
return this;
};
/**
* Deregister a strategy that was previously registered with the given name.
*
* In a typical application, the necessary authentication strategies are
* registered when initializing the app and, once registered, are always
* available. As such, it is typically not necessary to call this function.
*
* @public
* @param {string} name - Name of the strategy.
* @returns {this}
*
* @example
* passport.unuse('acme');
*/
Authenticator.prototype.unuse = function(name) {
delete this._strategies[name];
return this;
};
/**
* Adapt this `Authenticator` to work with a specific framework.
*
* By default, Passport works as {@link https://github.com/senchalabs/connect#readme Connect}-style
* middleware, which makes it compatible with {@link https://expressjs.com/ Express}.
* For any app built using Express, there is no need to call this function.
*
* @public
* @param {Object} fw
* @returns {this}
*/
Authenticator.prototype.framework = function(fw) {
this._framework = fw;
return this;
};
/**
* Create initialization middleware.
*
* Returns middleware that initializes Passport to authenticate requests.
*
* As of v0.6.x, it is typically no longer necessary to use this middleware. It
* exists for compatiblity with apps built using previous versions of Passport,
* in which this middleware was necessary.
*
* The primary exception to the above guidance is when using strategies that
* depend directly on `passport@0.4.x` or earlier. These earlier versions of
* Passport monkeypatch Node.js `http.IncomingMessage` in a way that expects
* certain Passport-specific properties to be available. This middleware
* provides a compatibility layer for this situation.
*
* @public
* @param {Object} [options]
* @param {string} [options.userProperty='user'] - Determines what property on
* `req` will be set to the authenticated user object.
* @param {boolean} [options.compat=true] - When `true`, enables a compatibility
* layer for packages that depend on `passport@0.4.x` or earlier.
* @returns {function}
*
* @example
* app.use(passport.initialize());
*/
Authenticator.prototype.initialize = function(options) {
options = options || {};
return this._framework.initialize(this, options);
};
/**
* Create authentication middleware.
*
* Returns middleware that authenticates the request by applying the given
* strategy (or strategies).
*
* Examples:
*
* passport.authenticate('local', function(err, user) {
* if (!user) { return res.redirect('/login'); }
* res.end('Authenticated!');
* })(req, res);
*
* @public
* @param {string|string[]|Strategy} strategy
* @param {Object} [options]
* @param {boolean} [options.session=true]
* @param {boolean} [options.keepSessionInfo=false]
* @param {string} [options.failureRedirect]
* @param {boolean|string|Object} [options.failureFlash=false]
* @param {boolean|string} [options.failureMessage=false]
* @param {boolean|string|Object} [options.successFlash=false]
* @param {string} [options.successReturnToOrRedirect]
* @param {string} [options.successRedirect]
* @param {boolean|string} [options.successMessage=false]
* @param {boolean} [options.failWithError=false]
* @param {string} [options.assignProperty]
* @param {boolean} [options.authInfo=true]
* @param {function} [callback]
* @returns {function}
*
* @example <caption>Authenticate username and password submitted via HTML form.</caption>
* app.get('/login/password', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' }));
*
* @example <caption>Authenticate bearer token used to access an API resource.</caption>
* app.get('/api/resource', passport.authenticate('bearer', { session: false }));
*/
Authenticator.prototype.authenticate = function(strategy, options, callback) {
return this._framework.authenticate(this, strategy, options, callback);
};
/**
* Create third-party service authorization middleware.
*
* Returns middleware that will authorize a connection to a third-party service.
*
* This middleware is identical to using {@link Authenticator#authenticate `authenticate()`}
* middleware with the `assignProperty` option set to `'account'`. This is
* useful when a user is already authenticated (for example, using a username
* and password) and they want to connect their account with a third-party
* service.
*
* In this scenario, the user's third-party account will be set at
* `req.account`, and the existing `req.user` and login session data will be
* be left unmodified. A route handler can then link the third-party account to
* the existing local account.
*
* All arguments to this function behave identically to those accepted by
* `{@link Authenticator#authenticate}`.
*
* @public
* @param {string|string[]|Strategy} strategy
* @param {Object} [options]
* @param {function} [callback]
* @returns {function}
*
* @example
* app.get('/oauth/callback/twitter', passport.authorize('twitter'));
*/
Authenticator.prototype.authorize = function(strategy, options, callback) {
options = options || {};
options.assignProperty = 'account';
var fn = this._framework.authorize || this._framework.authenticate;
return fn(this, strategy, options, callback);
};
/**
* Middleware that will restore login state from a session.
*
* Web applications typically use sessions to maintain login state between
* requests. For example, a user will authenticate by entering credentials into
* a form which is submitted to the server. If the credentials are valid, a
* login session is established by setting a cookie containing a session
* identifier in the user's web browser. The web browser will send this cookie
* in subsequent requests to the server, allowing a session to be maintained.
*
* If sessions are being utilized, and a login session has been established,
* this middleware will populate `req.user` with the current user.
*
* Note that sessions are not strictly required for Passport to operate.
* However, as a general rule, most web applications will make use of sessions.
* An exception to this rule would be an API server, which expects each HTTP
* request to provide credentials in an Authorization header.
*
* Examples:
*
* app.use(connect.cookieParser());
* app.use(connect.session({ secret: 'keyboard cat' }));
* app.use(passport.initialize());
* app.use(passport.session());
*
* Options:
* - `pauseStream` Pause the request stream before deserializing the user
* object from the session. Defaults to _false_. Should
* be set to true in cases where middleware consuming the
* request body is configured after passport and the
* deserializeUser method is asynchronous.
*
* @param {Object} options
* @return {Function} middleware
* @api public
*/
Authenticator.prototype.session = function(options) {
return this.authenticate('session', options);
};
// TODO: Make session manager pluggable
/*
Authenticator.prototype.sessionManager = function(mgr) {
this._sm = mgr;
return this;
}
*/
/**
* Registers a function used to serialize user objects into the session.
*
* Examples:
*
* passport.serializeUser(function(user, done) {
* done(null, user.id);
* });
*
* @api public
*/
Authenticator.prototype.serializeUser = function(fn, req, done) {
if (typeof fn === 'function') {
return this._serializers.push(fn);
}
// private implementation that traverses the chain of serializers, attempting
// to serialize a user
var user = fn;
// For backwards compatibility
if (typeof req === 'function') {
done = req;
req = undefined;
}
var stack = this._serializers;
(function pass(i, err, obj) {
// serializers use 'pass' as an error to skip processing
if ('pass' === err) {
err = undefined;
}
// an error or serialized object was obtained, done
if (err || obj || obj === 0) { return done(err, obj); }
var layer = stack[i];
if (!layer) {
return done(new Error('Failed to serialize user into session'));
}
function serialized(e, o) {
pass(i + 1, e, o);
}
try {
var arity = layer.length;
if (arity == 3) {
layer(req, user, serialized);
} else {
layer(user, serialized);
}
} catch(e) {
return done(e);
}
})(0);
};
/**
* Registers a function used to deserialize user objects out of the session.
*
* Examples:
*
* passport.deserializeUser(function(id, done) {
* User.findById(id, function (err, user) {
* done(err, user);
* });
* });
*
* @api public
*/
Authenticator.prototype.deserializeUser = function(fn, req, done) {
if (typeof fn === 'function') {
return this._deserializers.push(fn);
}
// private implementation that traverses the chain of deserializers,
// attempting to deserialize a user
var obj = fn;
// For backwards compatibility
if (typeof req === 'function') {
done = req;
req = undefined;
}
var stack = this._deserializers;
(function pass(i, err, user) {
// deserializers use 'pass' as an error to skip processing
if ('pass' === err) {
err = undefined;
}
// an error or deserialized user was obtained, done
if (err || user) { return done(err, user); }
// a valid user existed when establishing the session, but that user has
// since been removed
if (user === null || user === false) { return done(null, false); }
var layer = stack[i];
if (!layer) {
return done(new Error('Failed to deserialize user out of session'));
}
function deserialized(e, u) {
pass(i + 1, e, u);
}
try {
var arity = layer.length;
if (arity == 3) {
layer(req, obj, deserialized);
} else {
layer(obj, deserialized);
}
} catch(e) {
return done(e);
}
})(0);
};
/**
* Registers a function used to transform auth info.
*
* In some circumstances authorization details are contained in authentication
* credentials or loaded as part of verification.
*
* For example, when using bearer tokens for API authentication, the tokens may
* encode (either directly or indirectly in a database), details such as scope
* of access or the client to which the token was issued.
*
* Such authorization details should be enforced separately from authentication.
* Because Passport deals only with the latter, this is the responsiblity of
* middleware or routes further along the chain. However, it is not optimal to
* decode the same data or execute the same database query later. To avoid
* this, Passport accepts optional `info` along with the authenticated `user`
* in a strategy's `success()` action. This info is set at `req.authInfo`,
* where said later middlware or routes can access it.
*
* Optionally, applications can register transforms to proccess this info,
* which take effect prior to `req.authInfo` being set. This is useful, for
* example, when the info contains a client ID. The transform can load the
* client from the database and include the instance in the transformed info,
* allowing the full set of client properties to be convieniently accessed.
*
* If no transforms are registered, `info` supplied by the strategy will be left
* unmodified.
*
* Examples:
*
* passport.transformAuthInfo(function(info, done) {
* Client.findById(info.clientID, function (err, client) {
* info.client = client;
* done(err, info);
* });
* });
*
* @api public
*/
Authenticator.prototype.transformAuthInfo = function(fn, req, done) {
if (typeof fn === 'function') {
return this._infoTransformers.push(fn);
}
// private implementation that traverses the chain of transformers,
// attempting to transform auth info
var info = fn;
// For backwards compatibility
if (typeof req === 'function') {
done = req;
req = undefined;
}
var stack = this._infoTransformers;
(function pass(i, err, tinfo) {
// transformers use 'pass' as an error to skip processing
if ('pass' === err) {
err = undefined;
}
// an error or transformed info was obtained, done
if (err || tinfo) { return done(err, tinfo); }
var layer = stack[i];
if (!layer) {
// if no transformers are registered (or they all pass), the default
// behavior is to use the un-transformed info as-is
return done(null, info);
}
function transformed(e, t) {
pass(i + 1, e, t);
}
try {
var arity = layer.length;
if (arity == 1) {
// sync
var t = layer(info);
transformed(null, t);
} else if (arity == 3) {
layer(req, info, transformed);
} else {
layer(info, transformed);
}
} catch(e) {
return done(e);
}
})(0);
};
/**
* Return strategy with given `name`.
*
* @param {String} name
* @return {Strategy}
* @api private
*/
Authenticator.prototype._strategy = function(name) {
return this._strategies[name];
};
/**
* Expose `Authenticator`.
*/
module.exports = Authenticator;

View file

@ -0,0 +1,20 @@
/**
* `AuthenticationError` error.
*
* @constructor
* @api private
*/
function AuthenticationError(message, status) {
Error.call(this);
Error.captureStackTrace(this, arguments.callee);
this.name = 'AuthenticationError';
this.message = message;
this.status = status || 401;
}
// Inherit from `Error`.
AuthenticationError.prototype.__proto__ = Error.prototype;
// Expose constructor.
module.exports = AuthenticationError;

View file

@ -0,0 +1,22 @@
/**
* Module dependencies.
*/
var initialize = require('../middleware/initialize')
, authenticate = require('../middleware/authenticate');
/**
* Framework support for Connect/Express.
*
* This module provides support for using Passport with Express. It exposes
* middleware that conform to the `fn(req, res, next)` signature.
*
* @return {Object}
* @api protected
*/
exports = module.exports = function() {
return {
initialize: initialize,
authenticate: authenticate
};
};

92
auth-service/node_modules/passport/lib/http/request.js generated vendored Normal file
View file

@ -0,0 +1,92 @@
var req = exports = module.exports = {};
/**
* Initiate a login session for `user`.
*
* Options:
* - `session` Save login state in session, defaults to _true_
*
* Examples:
*
* req.logIn(user, { session: false });
*
* req.logIn(user, function(err) {
* if (err) { throw err; }
* // session saved
* });
*
* @param {User} user
* @param {Object} options
* @param {Function} done
* @api public
*/
req.login =
req.logIn = function(user, options, done) {
if (typeof options == 'function') {
done = options;
options = {};
}
options = options || {};
var property = this._userProperty || 'user';
var session = (options.session === undefined) ? true : options.session;
this[property] = user;
if (session && this._sessionManager) {
if (typeof done != 'function') { throw new Error('req#login requires a callback function'); }
var self = this;
this._sessionManager.logIn(this, user, options, function(err) {
if (err) { self[property] = null; return done(err); }
done();
});
} else {
done && done();
}
};
/**
* Terminate an existing login session.
*
* @api public
*/
req.logout =
req.logOut = function(options, done) {
if (typeof options == 'function') {
done = options;
options = {};
}
options = options || {};
var property = this._userProperty || 'user';
this[property] = null;
if (this._sessionManager) {
if (typeof done != 'function') { throw new Error('req#logout requires a callback function'); }
this._sessionManager.logOut(this, options, done);
} else {
done && done();
}
};
/**
* Test if request is authenticated.
*
* @return {Boolean}
* @api public
*/
req.isAuthenticated = function() {
var property = this._userProperty || 'user';
return (this[property]) ? true : false;
};
/**
* Test if request is unauthenticated.
*
* @return {Boolean}
* @api public
*/
req.isUnauthenticated = function() {
return !this.isAuthenticated();
};

24
auth-service/node_modules/passport/lib/index.js generated vendored Normal file
View file

@ -0,0 +1,24 @@
// Module dependencies.
var Passport = require('./authenticator')
, SessionStrategy = require('./strategies/session');
/**
* Export default singleton.
*
* @api public
*/
exports = module.exports = new Passport();
/**
* Expose constructors.
*/
exports.Passport =
exports.Authenticator = Passport;
exports.Strategy = require('passport-strategy');
/*
* Expose strategies.
*/
exports.strategies = {};
exports.strategies.SessionStrategy = SessionStrategy;

View file

@ -0,0 +1,381 @@
/**
* Module dependencies.
*/
var http = require('http')
, IncomingMessageExt = require('../http/request')
, AuthenticationError = require('../errors/authenticationerror');
/**
* Authenticates requests.
*
* Applies the `name`ed strategy (or strategies) to the incoming request, in
* order to authenticate the request. If authentication is successful, the user
* will be logged in and populated at `req.user` and a session will be
* established by default. If authentication fails, an unauthorized response
* will be sent.
*
* Options:
* - `session` Save login state in session, defaults to _true_
* - `successRedirect` After successful login, redirect to given URL
* - `successMessage` True to store success message in
* req.session.messages, or a string to use as override
* message for success.
* - `successFlash` True to flash success messages or a string to use as a flash
* message for success (overrides any from the strategy itself).
* - `failureRedirect` After failed login, redirect to given URL
* - `failureMessage` True to store failure message in
* req.session.messages, or a string to use as override
* message for failure.
* - `failureFlash` True to flash failure messages or a string to use as a flash
* message for failures (overrides any from the strategy itself).
* - `assignProperty` Assign the object provided by the verify callback to given property
*
* An optional `callback` can be supplied to allow the application to override
* the default manner in which authentication attempts are handled. The
* callback has the following signature, where `user` will be set to the
* authenticated user on a successful authentication attempt, or `false`
* otherwise. An optional `info` argument will be passed, containing additional
* details provided by the strategy's verify callback - this could be information about
* a successful authentication or a challenge message for a failed authentication.
* An optional `status` argument will be passed when authentication fails - this could
* be a HTTP response code for a remote authentication failure or similar.
*
* app.get('/protected', function(req, res, next) {
* passport.authenticate('local', function(err, user, info, status) {
* if (err) { return next(err) }
* if (!user) { return res.redirect('/signin') }
* res.redirect('/account');
* })(req, res, next);
* });
*
* Note that if a callback is supplied, it becomes the application's
* responsibility to log-in the user, establish a session, and otherwise perform
* the desired operations.
*
* Examples:
*
* passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' });
*
* passport.authenticate('basic', { session: false });
*
* passport.authenticate('twitter');
*
* @param {Strategy|String|Array} name
* @param {Object} options
* @param {Function} callback
* @return {Function}
* @api public
*/
module.exports = function authenticate(passport, name, options, callback) {
if (typeof options == 'function') {
callback = options;
options = {};
}
options = options || {};
var multi = true;
// Cast `name` to an array, allowing authentication to pass through a chain of
// strategies. The first strategy to succeed, redirect, or error will halt
// the chain. Authentication failures will proceed through each strategy in
// series, ultimately failing if all strategies fail.
//
// This is typically used on API endpoints to allow clients to authenticate
// using their preferred choice of Basic, Digest, token-based schemes, etc.
// It is not feasible to construct a chain of multiple strategies that involve
// redirection (for example both Facebook and Twitter), since the first one to
// redirect will halt the chain.
if (!Array.isArray(name)) {
name = [ name ];
multi = false;
}
return function authenticate(req, res, next) {
req.login =
req.logIn = req.logIn || IncomingMessageExt.logIn;
req.logout =
req.logOut = req.logOut || IncomingMessageExt.logOut;
req.isAuthenticated = req.isAuthenticated || IncomingMessageExt.isAuthenticated;
req.isUnauthenticated = req.isUnauthenticated || IncomingMessageExt.isUnauthenticated;
req._sessionManager = passport._sm;
// accumulator for failures from each strategy in the chain
var failures = [];
function allFailed() {
if (callback) {
if (!multi) {
return callback(null, false, failures[0].challenge, failures[0].status);
} else {
var challenges = failures.map(function(f) { return f.challenge; });
var statuses = failures.map(function(f) { return f.status; });
return callback(null, false, challenges, statuses);
}
}
// Strategies are ordered by priority. For the purpose of flashing a
// message, the first failure will be displayed.
var failure = failures[0] || {}
, challenge = failure.challenge || {}
, msg;
if (options.failureFlash) {
var flash = options.failureFlash;
if (typeof flash == 'string') {
flash = { type: 'error', message: flash };
}
flash.type = flash.type || 'error';
var type = flash.type || challenge.type || 'error';
msg = flash.message || challenge.message || challenge;
if (typeof msg == 'string') {
req.flash(type, msg);
}
}
if (options.failureMessage) {
msg = options.failureMessage;
if (typeof msg == 'boolean') {
msg = challenge.message || challenge;
}
if (typeof msg == 'string') {
req.session.messages = req.session.messages || [];
req.session.messages.push(msg);
}
}
if (options.failureRedirect) {
return res.redirect(options.failureRedirect);
}
// When failure handling is not delegated to the application, the default
// is to respond with 401 Unauthorized. Note that the WWW-Authenticate
// header will be set according to the strategies in use (see
// actions#fail). If multiple strategies failed, each of their challenges
// will be included in the response.
var rchallenge = []
, rstatus, status;
for (var j = 0, len = failures.length; j < len; j++) {
failure = failures[j];
challenge = failure.challenge;
status = failure.status;
rstatus = rstatus || status;
if (typeof challenge == 'string') {
rchallenge.push(challenge);
}
}
res.statusCode = rstatus || 401;
if (res.statusCode == 401 && rchallenge.length) {
res.setHeader('WWW-Authenticate', rchallenge);
}
if (options.failWithError) {
return next(new AuthenticationError(http.STATUS_CODES[res.statusCode], rstatus));
}
res.end(http.STATUS_CODES[res.statusCode]);
}
(function attempt(i) {
var layer = name[i];
// If no more strategies exist in the chain, authentication has failed.
if (!layer) { return allFailed(); }
// Get the strategy, which will be used as prototype from which to create
// a new instance. Action functions will then be bound to the strategy
// within the context of the HTTP request/response pair.
var strategy, prototype;
if (typeof layer.authenticate == 'function') {
strategy = layer;
} else {
prototype = passport._strategy(layer);
if (!prototype) { return next(new Error('Unknown authentication strategy "' + layer + '"')); }
strategy = Object.create(prototype);
}
// ----- BEGIN STRATEGY AUGMENTATION -----
// Augment the new strategy instance with action functions. These action
// functions are bound via closure the the request/response pair. The end
// goal of the strategy is to invoke *one* of these action methods, in
// order to indicate successful or failed authentication, redirect to a
// third-party identity provider, etc.
/**
* Authenticate `user`, with optional `info`.
*
* Strategies should call this function to successfully authenticate a
* user. `user` should be an object supplied by the application after it
* has been given an opportunity to verify credentials. `info` is an
* optional argument containing additional user information. This is
* useful for third-party authentication strategies to pass profile
* details.
*
* @param {Object} user
* @param {Object} info
* @api public
*/
strategy.success = function(user, info) {
if (callback) {
return callback(null, user, info);
}
info = info || {};
var msg;
if (options.successFlash) {
var flash = options.successFlash;
if (typeof flash == 'string') {
flash = { type: 'success', message: flash };
}
flash.type = flash.type || 'success';
var type = flash.type || info.type || 'success';
msg = flash.message || info.message || info;
if (typeof msg == 'string') {
req.flash(type, msg);
}
}
if (options.successMessage) {
msg = options.successMessage;
if (typeof msg == 'boolean') {
msg = info.message || info;
}
if (typeof msg == 'string') {
req.session.messages = req.session.messages || [];
req.session.messages.push(msg);
}
}
if (options.assignProperty) {
req[options.assignProperty] = user;
if (options.authInfo !== false) {
passport.transformAuthInfo(info, req, function(err, tinfo) {
if (err) { return next(err); }
req.authInfo = tinfo;
next();
});
} else {
next();
}
return;
}
req.logIn(user, options, function(err) {
if (err) { return next(err); }
function complete() {
if (options.successReturnToOrRedirect) {
var url = options.successReturnToOrRedirect;
if (req.session && req.session.returnTo) {
url = req.session.returnTo;
delete req.session.returnTo;
}
return res.redirect(url);
}
if (options.successRedirect) {
return res.redirect(options.successRedirect);
}
next();
}
if (options.authInfo !== false) {
passport.transformAuthInfo(info, req, function(err, tinfo) {
if (err) { return next(err); }
req.authInfo = tinfo;
complete();
});
} else {
complete();
}
});
};
/**
* Fail authentication, with optional `challenge` and `status`, defaulting
* to 401.
*
* Strategies should call this function to fail an authentication attempt.
*
* @param {String} challenge
* @param {Number} status
* @api public
*/
strategy.fail = function(challenge, status) {
if (typeof challenge == 'number') {
status = challenge;
challenge = undefined;
}
// push this failure into the accumulator and attempt authentication
// using the next strategy
failures.push({ challenge: challenge, status: status });
attempt(i + 1);
};
/**
* Redirect to `url` with optional `status`, defaulting to 302.
*
* Strategies should call this function to redirect the user (via their
* user agent) to a third-party website for authentication.
*
* @param {String} url
* @param {Number} status
* @api public
*/
strategy.redirect = function(url, status) {
// NOTE: Do not use `res.redirect` from Express, because it can't decide
// what it wants.
//
// Express 2.x: res.redirect(url, status)
// Express 3.x: res.redirect(status, url) -OR- res.redirect(url, status)
// - as of 3.14.0, deprecated warnings are issued if res.redirect(url, status)
// is used
// Express 4.x: res.redirect(status, url)
// - all versions (as of 4.8.7) continue to accept res.redirect(url, status)
// but issue deprecated versions
res.statusCode = status || 302;
res.setHeader('Location', url);
res.setHeader('Content-Length', '0');
res.end();
};
/**
* Pass without making a success or fail decision.
*
* Under most circumstances, Strategies should not need to call this
* function. It exists primarily to allow previous authentication state
* to be restored, for example from an HTTP session.
*
* @api public
*/
strategy.pass = function() {
next();
};
/**
* Internal error while performing authentication.
*
* Strategies should call this function when an internal error occurs
* during the process of performing authentication; for example, if the
* user directory is not available.
*
* @param {Error} err
* @api public
*/
strategy.error = function(err) {
if (callback) {
return callback(err);
}
next(err);
};
// ----- END STRATEGY AUGMENTATION -----
strategy.authenticate(req, options);
})(0); // attempt
};
};

View file

@ -0,0 +1,100 @@
/**
* Module dependencies.
*/
var IncomingMessageExt = require('../http/request');
/**
* Passport initialization.
*
* Intializes Passport for incoming requests, allowing authentication strategies
* to be applied.
*
* If sessions are being utilized, applications must set up Passport with
* functions to serialize a user into and out of a session. For example, a
* common pattern is to serialize just the user ID into the session (due to the
* fact that it is desirable to store the minimum amount of data in a session).
* When a subsequent request arrives for the session, the full User object can
* be loaded from the database by ID.
*
* Note that additional middleware is required to persist login state, so we
* must use the `connect.session()` middleware _before_ `passport.initialize()`.
*
* If sessions are being used, this middleware must be in use by the
* Connect/Express application for Passport to operate. If the application is
* entirely stateless (not using sessions), this middleware is not necessary,
* but its use will not have any adverse impact.
*
* Examples:
*
* app.use(connect.cookieParser());
* app.use(connect.session({ secret: 'keyboard cat' }));
* app.use(passport.initialize());
* app.use(passport.session());
*
* passport.serializeUser(function(user, done) {
* done(null, user.id);
* });
*
* passport.deserializeUser(function(id, done) {
* User.findById(id, function (err, user) {
* done(err, user);
* });
* });
*
* @return {Function}
* @api public
*/
module.exports = function initialize(passport, options) {
options = options || {};
return function initialize(req, res, next) {
req.login =
req.logIn = req.logIn || IncomingMessageExt.logIn;
req.logout =
req.logOut = req.logOut || IncomingMessageExt.logOut;
req.isAuthenticated = req.isAuthenticated || IncomingMessageExt.isAuthenticated;
req.isUnauthenticated = req.isUnauthenticated || IncomingMessageExt.isUnauthenticated;
req._sessionManager = passport._sm;
if (options.userProperty) {
req._userProperty = options.userProperty;
}
var compat = (options.compat === undefined) ? true : options.compat;
if (compat) {
// `passport@0.5.1` [removed][1] all internal use of `req._passport`.
// From the standpoint of this package, this should have been a
// non-breaking change. However, some strategies (such as `passport-azure-ad`)
// depend directly on `passport@0.4.x` or earlier. `require`-ing earlier
// versions of `passport` has the effect of monkeypatching `http.IncomingMessage`
// with `logIn`, `logOut`, `isAuthenticated` and `isUnauthenticated`
// functions that [expect][2] the `req._passport` property to exist.
// Since pre-existing functions on `req` are given [preference][3], this
// results in [issues][4].
//
// The changes here restore the expected properties needed when earlier
// versions of `passport` are `require`-ed. This compatibility mode is
// enabled by default, and can be disabld by simply not `use`-ing `passport.initialize()`
// middleware or setting `compat: false` as an option to the middleware.
//
// An alternative approach to addressing this issue would be to not
// preferentially use pre-existing functions on `req`, but rather always
// overwrite `req.logIn`, etc. with the versions of those functions shiped
// with `authenticate()` middleware. This option should be reconsidered
// in a future major version release.
//
// [1]: https://github.com/jaredhanson/passport/pull/875
// [2]: https://github.com/jaredhanson/passport/blob/v0.4.1/lib/http/request.js
// [3]: https://github.com/jaredhanson/passport/blob/v0.5.1/lib/middleware/authenticate.js#L96
// [4]: https://github.com/jaredhanson/passport/issues/877
passport._userProperty = options.userProperty || 'user';
req._passport = {};
req._passport.instance = passport;
}
next();
};
};

View file

@ -0,0 +1,96 @@
var merge = require('utils-merge');
function SessionManager(options, serializeUser) {
if (typeof options == 'function') {
serializeUser = options;
options = undefined;
}
options = options || {};
this._key = options.key || 'passport';
this._serializeUser = serializeUser;
}
SessionManager.prototype.logIn = function(req, user, options, cb) {
if (typeof options == 'function') {
cb = options;
options = {};
}
options = options || {};
if (!req.session) { return cb(new Error('Login sessions require session support. Did you forget to use `express-session` middleware?')); }
var self = this;
var prevSession = req.session;
// regenerate the session, which is good practice to help
// guard against forms of session fixation
req.session.regenerate(function(err) {
if (err) {
return cb(err);
}
self._serializeUser(user, req, function(err, obj) {
if (err) {
return cb(err);
}
if (options.keepSessionInfo) {
merge(req.session, prevSession);
}
if (!req.session[self._key]) {
req.session[self._key] = {};
}
// store user information in session, typically a user id
req.session[self._key].user = obj;
// save the session before redirection to ensure page
// load does not happen before session is saved
req.session.save(function(err) {
if (err) {
return cb(err);
}
cb();
});
});
});
}
SessionManager.prototype.logOut = function(req, options, cb) {
if (typeof options == 'function') {
cb = options;
options = {};
}
options = options || {};
if (!req.session) { return cb(new Error('Login sessions require session support. Did you forget to use `express-session` middleware?')); }
var self = this;
// clear the user from the session object and save.
// this will ensure that re-using the old session id
// does not have a logged in user
if (req.session[this._key]) {
delete req.session[this._key].user;
}
var prevSession = req.session;
req.session.save(function(err) {
if (err) {
return cb(err)
}
// regenerate the session, which is good practice to help
// guard against forms of session fixation
req.session.regenerate(function(err) {
if (err) {
return cb(err);
}
if (options.keepSessionInfo) {
merge(req.session, prevSession);
}
cb();
});
});
}
module.exports = SessionManager;

View file

@ -0,0 +1,131 @@
// Module dependencies.
var pause = require('pause')
, util = require('util')
, Strategy = require('passport-strategy');
/**
* Create a new `SessionStrategy` object.
*
* An instance of this strategy is automatically used when creating an
* `{@link Authenticator}`. As such, it is typically unnecessary to create an
* instance using this constructor.
*
* @classdesc This `Strategy` authenticates HTTP requests based on the contents
* of session data.
*
* The login session must have been previously initiated, typically upon the
* user interactively logging in using a HTML form. During session initiation,
* the logged-in user's information is persisted to the session so that it can
* be restored on subsequent requests.
*
* Note that this strategy merely restores the authentication state from the
* session, it does not authenticate the session itself. Authenticating the
* underlying session is assumed to have been done by the middleware
* implementing session support. This is typically accomplished by setting a
* signed cookie, and verifying the signature of that cookie on incoming
* requests.
*
* In {@link https://expressjs.com/ Express}-based apps, session support is
* commonly provided by {@link https://github.com/expressjs/session `express-session`}
* or {@link https://github.com/expressjs/cookie-session `cookie-session`}.
*
* @public
* @class
* @augments base.Strategy
* @param {Object} [options]
* @param {string} [options.key='passport'] - Determines what property ("key") on
* the session data where login session data is located. The login
* session is stored and read from `req.session[key]`.
* @param {function} deserializeUser - Function which deserializes user.
*/
function SessionStrategy(options, deserializeUser) {
if (typeof options == 'function') {
deserializeUser = options;
options = undefined;
}
options = options || {};
Strategy.call(this);
/** The name of the strategy, set to `'session'`.
*
* @type {string}
* @readonly
*/
this.name = 'session';
this._key = options.key || 'passport';
this._deserializeUser = deserializeUser;
}
// Inherit from `passport.Strategy`.
util.inherits(SessionStrategy, Strategy);
/**
* Authenticate request based on current session data.
*
* When login session data is present in the session, that data will be used to
* restore login state across across requests by calling the deserialize user
* function.
*
* If login session data is not present, the request will be passed to the next
* middleware, rather than failing authentication - which is the behavior of
* most other strategies. This deviation allows session authentication to be
* performed at the application-level, rather than the individual route level,
* while allowing both authenticated and unauthenticated requests and rendering
* responses accordingly. Routes that require authentication will need to guard
* that condition.
*
* This function is protected, and should not be called directly. Instead,
* use `passport.authenticate()` middleware and specify the {@link SessionStrategy#name `name`}
* of this strategy and any options.
*
* @protected
* @param {http.IncomingMessage} req - The Node.js {@link https://nodejs.org/api/http.html#class-httpincomingmessage `IncomingMessage`}
* object.
* @param {Object} [options]
* @param {boolean} [options.pauseStream=false] - When `true`, data events on
* the request will be paused, and then resumed after the asynchronous
* `deserializeUser` function has completed. This is only necessary in
* cases where later middleware in the stack are listening for events,
* and ensures that those events are not missed.
*
* @example
* passport.authenticate('session');
*/
SessionStrategy.prototype.authenticate = function(req, options) {
if (!req.session) { return this.error(new Error('Login sessions require session support. Did you forget to use `express-session` middleware?')); }
options = options || {};
var self = this,
su;
if (req.session[this._key]) {
su = req.session[this._key].user;
}
if (su || su === 0) {
// NOTE: Stream pausing is desirable in the case where later middleware is
// listening for events emitted from request. For discussion on the
// matter, refer to: https://github.com/jaredhanson/passport/pull/106
var paused = options.pauseStream ? pause(req) : null;
this._deserializeUser(su, req, function(err, user) {
if (err) { return self.error(err); }
if (!user) {
delete req.session[self._key].user;
} else {
var property = req._userProperty || 'user';
req[property] = user;
}
self.pass();
if (paused) {
paused.resume();
}
});
} else {
self.pass();
}
};
// Export `SessionStrategy`.
module.exports = SessionStrategy;

56
auth-service/node_modules/passport/package.json generated vendored Normal file
View file

@ -0,0 +1,56 @@
{
"name": "passport",
"version": "0.7.0",
"description": "Simple, unobtrusive authentication for Node.js.",
"keywords": [
"express",
"connect",
"auth",
"authn",
"authentication"
],
"author": {
"name": "Jared Hanson",
"email": "jaredhanson@gmail.com",
"url": "https://www.jaredhanson.me/"
},
"homepage": "https://www.passportjs.org/",
"repository": {
"type": "git",
"url": "git://github.com/jaredhanson/passport.git"
},
"bugs": {
"url": "https://github.com/jaredhanson/passport/issues"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/jaredhanson"
},
"license": "MIT",
"licenses": [
{
"type": "MIT",
"url": "https://opensource.org/licenses/MIT"
}
],
"main": "./lib",
"dependencies": {
"passport-strategy": "1.x.x",
"pause": "0.0.1",
"utils-merge": "^1.0.1"
},
"devDependencies": {
"make-node": "0.3.x",
"mocha": "2.x.x",
"chai": "2.x.x",
"chai-connect-middleware": "0.3.x",
"chai-passport-strategy": "0.2.x",
"proxyquire": "1.4.x"
},
"engines": {
"node": ">= 0.4.0"
},
"scripts": {
"test": "node_modules/.bin/mocha --reporter spec --require test/bootstrap/node test/*.test.js test/**/*.test.js"
}
}

View file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="435.5px" height="113.8px" viewBox="0 0 435.5 113.8" style="enable-background:new 0 0 435.5 113.8;" xml:space="preserve"
>
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{fill:url(#SVGID_00000060714236283336436740000012165199764159594676_);}
.st2{fill:#FFFFFF;}
.st3{fill:url(#SVGID_00000117676273289031915570000007337032735197337243_);}
.st4{fill:url(#SVGID_00000034783717221445088740000004717251064617269158_);}
</style>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="264.2229" y1="93.8124" x2="301.8265" y2="35.4162">
<stop offset="1.481436e-07" style="stop-color:#0083B5"/>
<stop offset="0.4173" style="stop-color:#00FFFF"/>
<stop offset="0.9952" style="stop-color:#6FF12D"/>
</linearGradient>
<path class="st0" d="M284,78.5c2.5-0.5,4.5-1.6,6.2-3.1c2.5-2.3,2.8-5.5,2.8-9.5V48.2c0-4-0.4-7.1-2.8-9.5c-1.7-1.6-3.7-2.6-6.2-3.1
v-8.5c4,0.6,7.4,2.1,10,4.6c3.4,3.2,6.4,7.6,6.4,13.1V69c0,5.5-3,9.8-6.4,13.1c-2.6,2.5-6,4-10,4.6V78.5z"/>
<linearGradient id="SVGID_00000175323035056965818540000002857480534814513585_" gradientUnits="userSpaceOnUse" x1="243.7969" y1="80.6594" x2="281.4005" y2="22.2632">
<stop offset="1.481436e-07" style="stop-color:#0083B5"/>
<stop offset="0.4173" style="stop-color:#00FFFF"/>
<stop offset="0.9952" style="stop-color:#6FF12D"/>
</linearGradient>
<path style="fill:url(#SVGID_00000175323035056965818540000002857480534814513585_);" d="M253.1,31.7c2.6-2.5,6-4,10-4.6v8.5
c-2.5,0.5-4.5,1.6-6.2,3.1c-2.5,2.3-2.8,5.5-2.8,9.4v17.8c0,4,0.4,7.1,2.8,9.5c1.7,1.6,3.7,2.6,6.2,3.1v8.1c-4-0.6-7.4-2.1-10-4.6
c-3.4-3.2-6.4-7.6-6.4-13.1V44.7C246.7,39.3,249.7,35,253.1,31.7z"/>
<g>
<g>
<g>
<path class="st2" d="M29.6,86.5c-5.7,0-10.2-1.9-13.7-5.7c-3.5-3.8-5.2-8.8-5.2-15V48.1c0-6.2,1.7-11.3,5.2-15.1
c3.5-3.8,8-5.7,13.7-5.7c3.7,0,6.9,0.8,9.6,2.3c2.7,1.6,4.7,3.7,6,6.5h0.3V9.6h5.2v75.9h-5.2v-7.8h-0.3c-1.2,2.8-3.2,4.9-6,6.5
C36.5,85.8,33.3,86.5,29.6,86.5z M30.7,82.1c4.7,0,8.3-1.4,10.9-4.3c2.6-2.9,3.9-6.8,3.9-11.9V48.1c0-5.1-1.3-9.1-3.9-12
c-2.6-2.9-6.2-4.3-10.9-4.3c-4.6,0-8.2,1.4-10.8,4.3C17.3,39,16,43,16,48.1v17.8c0,5.1,1.3,9,3.9,11.9S26,82.1,30.7,82.1z"/>
<path class="st2" d="M86.3,86.5c-6.4,0-11.3-1.9-14.9-5.7c-3.6-3.8-5.4-8.8-5.4-15.1V48.1c0-6.3,1.8-11.3,5.4-15.1
c3.6-3.8,8.6-5.7,14.9-5.7s11.2,1.9,14.8,5.7c3.6,3.8,5.3,8.8,5.3,15.1V58H71.2v7.8c0,5,1.3,8.9,3.9,11.8
c2.6,2.9,6.4,4.4,11.2,4.4c3.9,0,7.1-0.9,9.6-2.8c2.5-1.9,4.3-4.4,5.2-7.7h5.2c-1,4.6-3.3,8.3-6.8,11
C96,85.2,91.6,86.5,86.3,86.5z M71.2,53.5h30v-5.4c0-5-1.3-8.9-3.9-11.9c-2.6-2.9-6.3-4.4-11-4.4c-4.8,0-8.6,1.4-11.2,4.3
c-2.6,2.9-3.9,6.8-3.9,11.9V53.5z"/>
<path class="st2" d="M143.2,86.4c-4.4,0-8.2-0.7-11.5-2c-3.3-1.4-5.9-3.3-7.7-5.8c-1.8-2.5-2.7-5.4-2.7-8.8h13.1
c0,2,0.8,3.6,2.4,4.6c1.6,1.1,3.8,1.6,6.6,1.6h4.5c3.2,0,5.7-0.6,7.3-1.8c1.6-1.2,2.4-2.8,2.4-4.9c0-4-2.9-6.4-8.8-7.3l-8-1
c-12-1.7-17.9-7.4-17.9-17.1c0-5.4,1.8-9.5,5.4-12.3c3.6-2.8,8.9-4.2,15.8-4.2h3.9c6.4,0,11.6,1.4,15.5,4.3
c3.9,2.9,5.9,6.7,5.9,11.4h-13.1c0-1.7-0.7-3-2.2-3.9c-1.5-0.9-3.5-1.4-6.2-1.4h-3.9c-5.7,0-8.5,2-8.5,6.1c0,3.5,2.5,5.7,7.6,6.4
l8.1,1.2c6.4,0.9,11.2,2.8,14.3,5.6c3.1,2.8,4.7,6.8,4.7,11.8c0,5.5-1.9,9.7-5.6,12.8c-3.8,3-9.3,4.6-16.6,4.6H143.2z"/>
<path class="st2" d="M207.9,86.5c-4.8,0-9.1-0.9-12.7-2.8c-3.6-1.8-6.4-4.4-8.4-7.8c-2-3.4-3-7.3-3-11.9V49.7c0-4.6,1-8.5,3-11.9
c2-3.4,4.8-6,8.4-7.8c3.6-1.8,7.9-2.8,12.7-2.8c7.2,0,12.9,1.9,17.2,5.6c4.3,3.7,6.5,8.8,6.7,15.1h-12.6c-0.2-3-1.3-5.3-3.4-6.9
c-2-1.6-4.7-2.4-7.9-2.4c-3.5,0-6.2,1-8.2,2.9c-2,1.9-3,4.6-3,8.2v14.4c0,3.5,1,6.3,3,8.2c2,1.9,4.7,2.9,8.2,2.9
c3.3,0,6-0.8,8-2.4c2-1.6,3.1-3.9,3.3-6.9h12.6c-0.2,6.4-2.5,11.4-6.7,15.1C220.8,84.7,215.1,86.5,207.9,86.5z"/>
<path class="st2" d="M315.6,104.2V28.3h12.6v10.3h0.2c1-3.6,2.9-6.4,5.5-8.4c2.7-2,6-3,9.9-3c5.6,0,10.1,2,13.5,5.9
c3.4,4,5.1,9.2,5.1,15.9v15.5c0,6.7-1.7,12.1-5.1,16c-3.4,3.9-7.9,5.9-13.5,5.9c-3.9,0-7.1-1-9.8-3c-2.7-2-4.6-4.8-5.6-8.4h-0.2
l0.3,13v16H315.6z M339.1,75.3c3.3,0,5.9-1,7.7-2.9c1.8-1.9,2.7-4.7,2.7-8.3V49.7c0-3.6-0.9-6.4-2.7-8.3
c-1.8-1.9-4.4-2.9-7.7-2.9s-5.9,1-7.8,3c-1.9,2-2.8,4.8-2.8,8.5v13.7c0,3.7,0.9,6.5,2.8,8.5C333.2,74.3,335.8,75.3,339.1,75.3z"
/>
<path class="st2" d="M401,86.5c-4.8,0-9.1-0.9-12.6-2.8c-3.6-1.9-6.4-4.5-8.3-7.8c-2-3.4-3-7.3-3-11.8V49.7c0-4.5,1-8.4,3-11.8
c2-3.4,4.7-6,8.3-7.8c3.6-1.9,7.8-2.8,12.6-2.8c4.8,0,8.9,0.9,12.5,2.8c3.6,1.9,6.3,4.5,8.3,7.8s3,7.3,3,11.8V60h-35.1v4.1
c0,8.1,3.8,12.2,11.5,12.2c5.9,0,9.4-2,10.5-5.9h12.7c-1,4.9-3.6,8.9-7.8,11.8C412.2,85.1,407.1,86.5,401,86.5z M389.6,49.7v2.2
l22.6-0.1v-2.2c0-3.9-0.9-7-2.8-9.1c-1.9-2.1-4.7-3.2-8.4-3.2c-3.8,0-6.6,1.1-8.5,3.2C390.5,42.7,389.6,45.8,389.6,49.7z"/>
</g>
</g>
</g>
<g>
<linearGradient id="SVGID_00000103947595425660589550000005526308025592261518_" gradientUnits="userSpaceOnUse" x1="249.2748" y1="84.1868" x2="286.8784" y2="25.7906">
<stop offset="1.481436e-07" style="stop-color:#0083B5"/>
<stop offset="0.4173" style="stop-color:#00FFFF"/>
<stop offset="0.9952" style="stop-color:#6FF12D"/>
</linearGradient>
<path style="fill:url(#SVGID_00000103947595425660589550000005526308025592261518_);" d="M280.9,50.5l2.8-4.4l-5.7-3l-2.4,4.6
c-0.4,0.7-1,1.1-1.8,1.1c-0.8,0-1.4-0.4-1.8-1.1l-2.4-4.6l-5.7,3l4,6.3L280.9,50.5z"/>
<linearGradient id="SVGID_00000078009363152260107870000015150860037042020742_" gradientUnits="userSpaceOnUse" x1="254.4131" y1="87.4956" x2="292.0167" y2="29.0994">
<stop offset="1.481436e-07" style="stop-color:#0083B5"/>
<stop offset="0.4173" style="stop-color:#00FFFF"/>
<stop offset="0.9952" style="stop-color:#6FF12D"/>
</linearGradient>
<path style="fill:url(#SVGID_00000078009363152260107870000015150860037042020742_);" d="M288.1,53.7l-28.3,0.2v5.7l8.9,0l-4.8,7.7
l5.7,3l2.4-4.6c0.4-0.7,1-1.1,1.8-1.1c0.8,0,1.4,0.4,1.8,1.1l2.4,4.6l5.7-3l-3.9-6.2l-7.4-1.4l15.7-0.1V53.7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6 KiB

View file

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="435.5px" height="113.8px" viewBox="0 0 435.5 113.8" style="enable-background:new 0 0 435.5 113.8;" xml:space="preserve"
>
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{fill:url(#SVGID_00000143605424200090091780000011623765709916896406_);}
.st2{fill:url(#SVGID_00000138565903497494471720000000391863059388008379_);}
.st3{fill:url(#SVGID_00000052805360677258260660000009439953359654764474_);}
.st4{fill:#121217;}
</style>
<g>
<g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="264.1459" y1="93.8943" x2="301.7899" y2="35.4353">
<stop offset="1.481436e-07" style="stop-color:#0083B5"/>
<stop offset="0.4172" style="stop-color:#0ED8D2"/>
<stop offset="1" style="stop-color:#65CC29"/>
</linearGradient>
<path class="st0" d="M284,78.6c2.5-0.5,4.5-1.6,6.2-3.1c2.5-2.3,2.8-5.5,2.8-9.5V48.2c0-4-0.4-7.1-2.8-9.5
c-1.7-1.6-3.7-2.6-6.2-3.1v-8.5c4,0.6,7.4,2.1,10,4.6c3.4,3.2,6.4,7.6,6.4,13.1V69c0,5.5-3,9.8-6.4,13.1c-2.6,2.5-6,4-10,4.6
V78.6z"/>
<linearGradient id="SVGID_00000003100166481268514150000002116687147852764846_" gradientUnits="userSpaceOnUse" x1="243.6979" y1="80.7271" x2="281.342" y2="22.2681">
<stop offset="1.481436e-07" style="stop-color:#0083B5"/>
<stop offset="0.4172" style="stop-color:#0ED8D2"/>
<stop offset="1" style="stop-color:#65CC29"/>
</linearGradient>
<path style="fill:url(#SVGID_00000003100166481268514150000002116687147852764846_);" d="M253,31.7c2.6-2.5,6-4,10-4.6v8.5
c-2.5,0.5-4.5,1.6-6.2,3.1c-2.5,2.3-2.8,5.5-2.8,9.4V66c0,4,0.4,7.1,2.8,9.5c1.7,1.6,3.7,2.6,6.2,3.1v8.1c-4-0.6-7.4-2.1-10-4.6
c-3.4-3.2-6.4-7.6-6.4-13.1V44.7C246.6,39.3,249.6,35,253,31.7z"/>
</g>
</g>
<g>
<g>
<linearGradient id="SVGID_00000165207668536328037610000003137193851011018140_" gradientUnits="userSpaceOnUse" x1="249.1818" y1="84.2583" x2="286.8258" y2="25.7993">
<stop offset="1.481436e-07" style="stop-color:#0083B5"/>
<stop offset="0.4172" style="stop-color:#0ED8D2"/>
<stop offset="1" style="stop-color:#65CC29"/>
</linearGradient>
<path style="fill:url(#SVGID_00000165207668536328037610000003137193851011018140_);" d="M280.9,50.5l2.8-4.4l-5.8-3l-2.4,4.6
c-0.4,0.7-1,1.1-1.8,1.1c-0.8,0-1.4-0.4-1.8-1.1l-2.4-4.6l-5.7,3l4,6.4L280.9,50.5z"/>
<linearGradient id="SVGID_00000126305117708078827990000016861189679397598356_" gradientUnits="userSpaceOnUse" x1="254.3256" y1="87.5706" x2="291.9696" y2="29.1116">
<stop offset="1.481436e-07" style="stop-color:#0083B5"/>
<stop offset="0.4172" style="stop-color:#0ED8D2"/>
<stop offset="1" style="stop-color:#65CC29"/>
</linearGradient>
<path style="fill:url(#SVGID_00000126305117708078827990000016861189679397598356_);" d="M288,53.7L259.7,54v5.7l8.9,0l-4.8,7.7
l5.7,3l2.4-4.6c0.4-0.7,1-1.1,1.8-1.1c0.8,0,1.4,0.4,1.8,1.1l2.4,4.6l5.8-3l-3.9-6.2l-7.4-1.4l15.7-0.1V53.7z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st4" d="M29.6,86.5c-5.7,0-10.2-1.9-13.7-5.7c-3.5-3.8-5.2-8.8-5.2-15V48.1c0-6.2,1.7-11.3,5.2-15.1
c3.5-3.8,8-5.7,13.7-5.7c3.7,0,6.9,0.8,9.6,2.3c2.7,1.6,4.7,3.7,6,6.5h0.3V9.6h5.2v75.9h-5.2v-7.8h-0.3c-1.2,2.8-3.2,4.9-6,6.5
C36.5,85.8,33.3,86.5,29.6,86.5z M30.7,82.1c4.7,0,8.3-1.4,10.9-4.3c2.6-2.9,3.9-6.8,3.9-11.9V48.1c0-5.1-1.3-9.1-3.9-12
c-2.6-2.9-6.2-4.3-10.9-4.3c-4.6,0-8.2,1.4-10.8,4.3C17.3,39,16,43,16,48.1v17.8c0,5.1,1.3,9,3.9,11.9S26,82.1,30.7,82.1z"/>
<path class="st4" d="M86.3,86.5c-6.4,0-11.3-1.9-14.9-5.7c-3.6-3.8-5.4-8.8-5.4-15.1V48.1c0-6.3,1.8-11.3,5.4-15.1
c3.6-3.8,8.6-5.7,14.9-5.7s11.2,1.9,14.8,5.7c3.6,3.8,5.3,8.8,5.3,15.1V58H71.2v7.8c0,5,1.3,8.9,3.9,11.8
c2.6,2.9,6.4,4.4,11.2,4.4c3.9,0,7.1-0.9,9.6-2.8c2.5-1.9,4.3-4.4,5.2-7.7h5.2c-1,4.6-3.3,8.3-6.8,11
C96,85.2,91.6,86.5,86.3,86.5z M71.2,53.5h30v-5.4c0-5-1.3-8.9-3.9-11.9c-2.6-2.9-6.3-4.4-11-4.4c-4.8,0-8.6,1.4-11.2,4.3
c-2.6,2.9-3.9,6.8-3.9,11.9V53.5z"/>
<path class="st4" d="M143.2,86.4c-4.4,0-8.2-0.7-11.5-2c-3.3-1.4-5.9-3.3-7.7-5.8c-1.8-2.5-2.7-5.4-2.7-8.8h13.1
c0,2,0.8,3.6,2.4,4.6c1.6,1.1,3.8,1.6,6.6,1.6h4.5c3.2,0,5.7-0.6,7.3-1.8c1.6-1.2,2.4-2.8,2.4-4.9c0-4-2.9-6.4-8.8-7.3l-8-1
c-12-1.7-17.9-7.4-17.9-17.1c0-5.4,1.8-9.5,5.4-12.3c3.6-2.8,8.9-4.2,15.8-4.2h3.9c6.4,0,11.6,1.4,15.5,4.3
c3.9,2.9,5.9,6.7,5.9,11.4h-13.1c0-1.7-0.7-3-2.2-3.9c-1.5-0.9-3.5-1.4-6.2-1.4h-3.9c-5.7,0-8.5,2-8.5,6.1c0,3.5,2.5,5.7,7.6,6.4
l8.1,1.2c6.4,0.9,11.2,2.8,14.3,5.6c3.1,2.8,4.7,6.8,4.7,11.8c0,5.5-1.9,9.7-5.6,12.8c-3.8,3-9.3,4.6-16.6,4.6H143.2z"/>
<path class="st4" d="M207.9,86.5c-4.8,0-9.1-0.9-12.7-2.8c-3.6-1.8-6.4-4.4-8.4-7.8c-2-3.4-3-7.3-3-11.9V49.7c0-4.6,1-8.5,3-11.9
c2-3.4,4.8-6,8.4-7.8c3.6-1.8,7.9-2.8,12.7-2.8c7.2,0,12.9,1.9,17.2,5.6c4.3,3.7,6.5,8.8,6.7,15.1h-12.6c-0.2-3-1.3-5.3-3.4-6.9
c-2-1.6-4.7-2.4-7.9-2.4c-3.5,0-6.2,1-8.2,2.9c-2,1.9-3,4.6-3,8.2v14.4c0,3.5,1,6.3,3,8.2c2,1.9,4.7,2.9,8.2,2.9
c3.3,0,6-0.8,8-2.4c2-1.6,3.1-3.9,3.3-6.9h12.6c-0.2,6.4-2.5,11.4-6.7,15.1C220.8,84.7,215.1,86.5,207.9,86.5z"/>
<path class="st4" d="M315.6,104.2V28.3h12.6v10.3h0.2c1-3.6,2.9-6.4,5.5-8.4c2.7-2,6-3,9.9-3c5.6,0,10.1,2,13.5,5.9
c3.4,4,5.1,9.2,5.1,15.9v15.5c0,6.7-1.7,12.1-5.1,16c-3.4,3.9-7.9,5.9-13.5,5.9c-3.9,0-7.1-1-9.8-3c-2.7-2-4.6-4.8-5.6-8.4h-0.2
l0.3,13v16H315.6z M339.1,75.3c3.3,0,5.9-1,7.7-2.9c1.8-1.9,2.7-4.7,2.7-8.3V49.7c0-3.6-0.9-6.4-2.7-8.3
c-1.8-1.9-4.4-2.9-7.7-2.9s-5.9,1-7.8,3c-1.9,2-2.8,4.8-2.8,8.5v13.7c0,3.7,0.9,6.5,2.8,8.5C333.2,74.3,335.8,75.3,339.1,75.3z"
/>
<path class="st4" d="M401,86.5c-4.8,0-9.1-0.9-12.6-2.8c-3.6-1.9-6.4-4.5-8.3-7.8c-2-3.4-3-7.3-3-11.8V49.7c0-4.5,1-8.4,3-11.8
c2-3.4,4.7-6,8.3-7.8c3.6-1.9,7.8-2.8,12.6-2.8c4.8,0,8.9,0.9,12.5,2.8c3.6,1.9,6.3,4.5,8.3,7.8s3,7.3,3,11.8V60h-35.1v4.1
c0,8.1,3.8,12.2,11.5,12.2c5.9,0,9.4-2,10.5-5.9h12.7c-1,4.9-3.6,8.9-7.8,11.8C412.2,85.1,407.1,86.5,401,86.5z M389.6,49.7v2.2
l22.6-0.1v-2.2c0-3.9-0.9-7-2.8-9.1c-1.9-2.1-4.7-3.2-8.4-3.2c-3.8,0-6.6,1.1-8.5,3.2C390.5,42.7,389.6,45.8,389.6,49.7z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View file

@ -0,0 +1,171 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 120 60.000001"
xml:space="preserve"
sodipodi:docname="fusionauthio-ar21.svg"
width="120"
height="60"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata
id="metadata49"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs47" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1001"
id="namedview45"
showgrid="false"
inkscape:zoom="4.205303"
inkscape:cx="94.166817"
inkscape:cy="80.099998"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<style
type="text/css"
id="style2">
.st0{fill:#EC8D53;}
.st1{fill:#FFFFFF;}
</style>
<g
id="g944"
transform="matrix(0.98295521,0,0,0.98295521,0.95993983,0.51134348)"><g
transform="translate(2,-1.7320577)"
id="g920"><g
id="g28"
style="fill:#ec8d53;fill-opacity:1"
transform="matrix(0.15722805,0,0,0.15722805,13.258327,18.768605)">
<path
class="st1"
d="m 170.9,49.6 h 44.4 v 10.7 h -32.2 v 18.8 h 30.3 v 10.3 h -30.3 v 29 h -12.2 z"
id="path16"
style="fill:#ec8d53;fill-opacity:1"
inkscape:connector-curvature="0" />
<path
class="st1"
d="m 262.4,118.4 h -11.1 v -7.5 h -0.2 c -1,2.3 -2.8,4.4 -5.4,6.2 -2.6,1.8 -5.6,2.7 -9.1,2.7 -3,0 -5.7,-0.5 -7.8,-1.6 -2.2,-1.1 -4,-2.5 -5.3,-4.2 -1.4,-1.7 -2.4,-3.8 -3.1,-6 -0.6,-2.3 -1,-4.6 -1,-7 V 71.8 h 11.7 v 25.8 c 0,1.4 0.1,2.8 0.3,4.3 0.2,1.5 0.6,2.8 1.3,4 0.6,1.2 1.5,2.2 2.7,3 1.1,0.8 2.6,1.2 4.5,1.2 1.8,0 3.4,-0.4 4.8,-1.1 1.4,-0.7 2.5,-1.7 3.4,-2.9 0.9,-1.2 1.5,-2.5 2,-4 0.5,-1.5 0.7,-3.1 0.7,-4.6 V 71.8 h 11.7 v 46.6 z"
id="path18"
style="fill:#ec8d53;fill-opacity:1"
inkscape:connector-curvature="0" />
<path
class="st1"
d="m 299.5,84.2 c -1,-1.4 -2.5,-2.5 -4.3,-3.5 -1.8,-1 -3.8,-1.5 -5.9,-1.5 -1.9,0 -3.6,0.4 -5.1,1.2 -1.6,0.8 -2.3,2.1 -2.3,3.9 0,1.8 0.9,3.1 2.6,3.8 1.7,0.7 4.2,1.5 7.5,2.3 1.7,0.4 3.5,0.9 5.3,1.6 1.8,0.6 3.4,1.5 4.9,2.6 1.5,1.1 2.6,2.4 3.5,4 0.9,1.6 1.4,3.5 1.4,5.8 0,2.9 -0.5,5.3 -1.6,7.2 -1.1,2 -2.5,3.6 -4.3,4.8 -1.8,1.2 -3.9,2.1 -6.2,2.7 -2.4,0.5 -4.8,0.8 -7.3,0.8 -3.6,0 -7.2,-0.7 -10.6,-2 -3.4,-1.3 -6.3,-3.2 -8.5,-5.7 l 7.7,-7.2 c 1.3,1.7 3,3.1 5.1,4.2 2.1,1.1 4.4,1.7 6.9,1.7 0.8,0 1.7,-0.1 2.6,-0.3 0.9,-0.2 1.7,-0.5 2.4,-0.9 0.7,-0.4 1.3,-1 1.8,-1.7 0.5,-0.7 0.7,-1.6 0.7,-2.6 0,-1.9 -0.9,-3.3 -2.7,-4.2 -1.8,-0.8 -4.5,-1.7 -8,-2.5 -1.7,-0.4 -3.4,-0.9 -5.1,-1.5 -1.7,-0.6 -3.1,-1.4 -4.4,-2.4 -1.3,-1 -2.3,-2.3 -3.1,-3.7 -0.8,-1.5 -1.2,-3.3 -1.2,-5.5 0,-2.6 0.5,-4.8 1.6,-6.7 1.1,-1.9 2.5,-3.4 4.2,-4.6 1.7,-1.2 3.7,-2.1 5.9,-2.7 2.2,-0.6 4.5,-0.9 6.8,-0.9 3.4,0 6.7,0.6 9.9,1.7 3.2,1.2 5.7,2.9 7.6,5.3 z"
id="path20"
style="fill:#ec8d53;fill-opacity:1"
inkscape:connector-curvature="0" />
<path
class="st1"
d="m 313.2,55.9 c 0,-1.9 0.7,-3.5 2.1,-4.9 1.4,-1.4 3.2,-2.1 5.3,-2.1 2.1,0 3.9,0.7 5.4,2 1.5,1.3 2.2,3 2.2,5 0,2 -0.7,3.7 -2.2,5 -1.5,1.3 -3.3,2 -5.4,2 -2.1,0 -3.9,-0.7 -5.3,-2.1 -1.4,-1.3 -2.1,-3 -2.1,-4.9 z m 1.6,15.9 h 11.7 v 46.6 h -11.7 z"
id="path22"
style="fill:#ec8d53;fill-opacity:1"
inkscape:connector-curvature="0" />
<path
class="st1"
d="m 333.1,94.9 c 0,-3.7 0.7,-7 2,-10.1 1.3,-3 3.1,-5.6 5.4,-7.7 2.3,-2.1 5,-3.8 8.1,-5 3.1,-1.2 6.4,-1.7 9.9,-1.7 3.5,0 6.8,0.6 9.9,1.7 3.1,1.2 5.8,2.8 8.1,5 2.3,2.1 4.1,4.7 5.4,7.7 1.3,3 2,6.4 2,10.1 0,3.7 -0.7,7.1 -2,10.1 -1.3,3 -3.1,5.7 -5.4,7.8 -2.3,2.2 -5,3.9 -8.1,5.1 -3.1,1.2 -6.4,1.8 -9.9,1.8 -3.5,0 -6.8,-0.6 -9.9,-1.8 -3.1,-1.2 -5.8,-2.9 -8.1,-5.1 -2.3,-2.2 -4.1,-4.8 -5.4,-7.8 -1.3,-3 -2,-6.4 -2,-10.1 z m 11.9,0 c 0,1.8 0.3,3.6 0.8,5.4 0.6,1.8 1.4,3.4 2.5,4.9 1.1,1.4 2.5,2.6 4.2,3.5 1.7,0.9 3.7,1.4 6,1.4 2.3,0 4.3,-0.5 6,-1.4 1.7,-0.9 3.1,-2.1 4.2,-3.5 1.1,-1.4 1.9,-3 2.5,-4.9 0.6,-1.8 0.8,-3.6 0.8,-5.4 0,-1.8 -0.3,-3.6 -0.8,-5.4 -0.6,-1.8 -1.4,-3.4 -2.5,-4.8 -1.1,-1.4 -2.5,-2.6 -4.2,-3.4 -1.7,-0.9 -3.7,-1.3 -6,-1.3 -2.3,0 -4.3,0.4 -6,1.3 -1.7,0.9 -3.1,2 -4.2,3.4 -1.1,1.4 -1.9,3 -2.5,4.8 -0.6,1.8 -0.8,3.6 -0.8,5.4 z"
id="path24"
style="fill:#ec8d53;fill-opacity:1"
inkscape:connector-curvature="0" />
<path
class="st1"
d="m 390.2,71.8 h 11.1 v 7.5 h 0.2 c 1,-2.3 2.8,-4.4 5.4,-6.2 2.6,-1.8 5.6,-2.7 9.1,-2.7 3,0 5.7,0.5 7.8,1.6 2.2,1.1 3.9,2.5 5.3,4.2 1.4,1.7 2.4,3.8 3.1,6 0.6,2.3 1,4.6 1,7 v 29.1 H 421.5 V 92.6 c 0,-1.4 -0.1,-2.8 -0.3,-4.3 -0.2,-1.5 -0.6,-2.8 -1.3,-4 -0.6,-1.2 -1.5,-2.2 -2.7,-3 -1.1,-0.8 -2.6,-1.2 -4.5,-1.2 -1.9,0 -3.5,0.4 -4.9,1.1 -1.4,0.7 -2.5,1.7 -3.4,2.9 -0.9,1.2 -1.5,2.5 -2,4 -0.5,1.5 -0.7,3.1 -0.7,4.6 v 25.6 H 390 V 71.8 Z"
id="path26"
style="fill:#ec8d53;fill-opacity:1"
inkscape:connector-curvature="0" />
</g><g
id="g38"
transform="matrix(0.15722805,0,0,0.15722805,13.258327,18.768605)">
<path
class="st0"
d="m 468.1,49.6 h 10.6 l 29.6,68.8 h -14 l -6.4,-15.7 H 458 l -6.2,15.7 h -13.7 z m 15.5,42.6 -10.6,-28 -10.8,28 z"
id="path30"
inkscape:connector-curvature="0"
style="fill:#ec8d53" />
<path
class="st0"
d="m 552.2,118.4 h -11.1 v -7.5 h -0.2 c -1,2.3 -2.8,4.4 -5.4,6.2 -2.6,1.8 -5.6,2.7 -9.1,2.7 -3,0 -5.7,-0.5 -7.8,-1.6 -2.2,-1.1 -4,-2.5 -5.3,-4.2 -1.4,-1.7 -2.4,-3.8 -3.1,-6 -0.6,-2.3 -1,-4.6 -1,-7 V 71.8 h 11.7 v 25.8 c 0,1.4 0.1,2.8 0.3,4.3 0.2,1.5 0.6,2.8 1.3,4 0.6,1.2 1.5,2.2 2.7,3 1.1,0.8 2.6,1.2 4.5,1.2 1.8,0 3.4,-0.4 4.8,-1.1 1.4,-0.7 2.5,-1.7 3.4,-2.9 0.9,-1.2 1.5,-2.5 2,-4 0.5,-1.5 0.7,-3.1 0.7,-4.6 V 71.8 h 11.7 v 46.6 z"
id="path32"
inkscape:connector-curvature="0"
style="fill:#ec8d53" />
<path
class="st0"
d="m 558,81.1 v -9.3 h 8.2 V 58.3 h 11.5 v 13.5 h 11.7 v 9.3 h -11.7 v 21.7 c 0,2.1 0.4,3.8 1.1,5.1 0.7,1.4 2.4,2 5,2 0.8,0 1.6,-0.1 2.5,-0.2 0.9,-0.2 1.7,-0.4 2.4,-0.7 l 0.4,9.1 c -1,0.4 -2.3,0.7 -3.7,0.9 -1.4,0.2 -2.8,0.3 -4.1,0.3 -3.1,0 -5.6,-0.4 -7.6,-1.3 -1.9,-0.9 -3.5,-2.1 -4.6,-3.6 -1.1,-1.5 -1.9,-3.3 -2.3,-5.2 -0.4,-2 -0.6,-4.1 -0.6,-6.4 V 81.1 Z"
id="path34"
inkscape:connector-curvature="0"
style="fill:#ec8d53" />
<path
class="st0"
d="m 622.7,70.4 c 3,0 5.7,0.5 7.8,1.6 2.2,1.1 3.9,2.5 5.3,4.2 1.4,1.7 2.4,3.8 3.1,6 0.6,2.3 1,4.6 1,7 v 29.1 H 628.2 V 92.8 c 0,-1.4 -0.1,-2.8 -0.3,-4.2 -0.2,-1.5 -0.6,-2.8 -1.2,-4 -0.6,-1.2 -1.5,-2.2 -2.6,-3 -1.1,-0.8 -2.6,-1.2 -4.5,-1.2 -1.9,0 -3.5,0.4 -4.9,1.1 -1.4,0.7 -2.5,1.7 -3.4,2.9 -0.9,1.2 -1.6,2.5 -2,4 -0.5,1.5 -0.7,3 -0.7,4.6 v 25.5 H 597 V 45 h 11.7 v 33.3 h 0.2 c 0.5,-1 1.1,-1.9 2,-2.9 0.9,-0.9 1.9,-1.8 3.1,-2.5 1.2,-0.7 2.5,-1.3 4,-1.8 1.3,-0.5 3,-0.7 4.7,-0.7 z"
id="path36"
inkscape:connector-curvature="0"
style="fill:#ec8d53" />
</g></g><g
transform="matrix(1.3270122,0,0,1.3270122,-14.144627,-11.451601)"
id="g906"><g
id="g6"
style="fill:#ec8d53;fill-opacity:1"
transform="matrix(0.15722805,0,0,0.15722805,13.258327,18.768605)">
<path
class="st0"
d="m 77.7,2.2 c -3.9,0 -7.5,2.1 -9.4,5.5 -2.9,5.1 -1,11.7 4.2,14.5 1.6,0.9 3.4,1.3 5.2,1.3 3.9,0 7.5,-2.1 9.4,-5.5 C 90,12.8 88.1,6.3 82.9,3.5 81.2,2.7 79.4,2.2 77.7,2.2 Z"
id="path4"
style="fill:#ec8d53;fill-opacity:1"
inkscape:connector-curvature="0" />
</g><g
id="g10"
style="fill:#ec8d53;fill-opacity:1"
transform="matrix(0.15722805,0,0,0.15722805,13.258327,18.768605)">
<path
class="st0"
d="m 16,103.6 c -3.9,0 -7.5,2.1 -9.4,5.5 -2.9,5.1 -1,11.7 4.2,14.5 1.6,0.9 3.4,1.3 5.2,1.3 3.9,0 7.5,-2.1 9.4,-5.5 2.9,-5.2 1,-11.7 -4.2,-14.5 -1.6,-0.8 -3.4,-1.3 -5.2,-1.3 z"
id="path8"
style="fill:#ec8d53;fill-opacity:1"
inkscape:connector-curvature="0" />
</g><g
id="g14"
style="fill:#ec8d53;fill-opacity:1"
transform="matrix(0.15722805,0,0,0.15722805,13.258327,18.768605)">
<path
class="st0"
d="m 136.4,109.1 c -3.9,0 -7.5,2.1 -9.4,5.5 -2.9,5.1 -1,11.7 4.2,14.5 1.6,0.9 3.4,1.3 5.2,1.3 3.9,0 7.5,-2.1 9.4,-5.5 2.9,-5.2 1,-11.7 -4.2,-14.5 -1.6,-0.9 -3.4,-1.3 -5.2,-1.3 z"
id="path12"
style="fill:#ec8d53;fill-opacity:1"
inkscape:connector-curvature="0" />
</g><path
class="st1"
d="m 29.657213,20.891185 c -0.330179,-0.125783 -0.707527,0.04717 -0.849032,0.377347 -0.125782,0.330179 0.04717,0.707526 0.377347,0.849031 2.971611,1.132042 5.125635,3.490463 6.084726,6.304845 l -4.056484,1.084874 c -0.251565,-0.676081 -0.628912,-1.28927 -1.116319,-1.855291 -1.084873,-1.257825 -2.594263,-1.996797 -4.26088,-2.122579 -1.650895,-0.11006 -3.191729,0.440239 -4.37094,1.415052 l -2.877273,-2.845827 c 1.352161,-1.226379 3.034501,-2.091133 4.842624,-2.468481 -0.172951,-0.408793 -0.220119,-0.864754 -0.125783,-1.304992 -4.229434,0.833308 -7.814234,4.009315 -9.009167,8.301641 -0.39307,1.446498 -0.518852,2.924441 -0.361624,4.402385 0.03144,0.330179 0.314456,0.581744 0.644635,0.581744 0.03144,0 0.04717,0 0.07861,0 0.361624,-0.04717 0.613189,-0.361625 0.581743,-0.723249 -0.141505,-1.304993 -0.04717,-2.625709 0.314457,-3.899256 0.408792,-1.493666 1.147764,-2.830105 2.122578,-3.946424 l 2.892996,2.830105 c -0.754694,0.959091 -1.242101,2.138301 -1.336438,3.427571 -0.188674,2.720046 1.39933,5.141358 3.789196,6.147617 l -1.194933,3.930701 c -1.745232,-0.660357 -3.238898,-1.760954 -4.386663,-3.207452 -0.298733,0.345902 -0.67608,0.581744 -1.116319,0.691804 1.509389,1.949627 3.616245,3.396126 6.069003,4.072206 1.037705,0.283011 2.091133,0.424516 3.144561,0.424516 2.499926,0 4.93696,-0.817586 6.996648,-2.374144 0.28301,-0.220119 0.345902,-0.628912 0.125782,-0.911922 -0.220119,-0.283011 -0.628912,-0.345902 -0.911922,-0.125783 -2.499926,1.886737 -5.644487,2.547095 -8.663266,1.808123 l 1.194933,-3.946424 c 0.235842,0.04717 0.487407,0.07861 0.738972,0.09434 0.141505,0.01572 0.283011,0.01572 0.440239,0.01572 3.238898,0 5.958943,-2.531371 6.179062,-5.785992 0.03145,-0.471684 0.01572,-0.943368 -0.06289,-1.383607 l 4.056484,-1.084873 c 0.314456,1.556557 0.267287,3.191729 -0.172951,4.826901 -0.09434,0.314456 -0.188674,0.628912 -0.314456,0.943368 0.220119,0.04717 0.440238,0.125783 0.644635,0.235842 0.188673,0.11006 0.361624,0.235842 0.518852,0.39307 0.157228,-0.39307 0.298733,-0.801863 0.408793,-1.210656 1.588003,-5.817437 -1.430775,-11.807826 -7.059539,-13.96185 z m -9.213564,10.48711 c 0.172951,-2.609985 2.374143,-4.65395 4.984129,-4.65395 0.11006,0 0.235842,0 0.345902,0.01572 1.336438,0.09434 2.547094,0.691803 3.427571,1.698063 0.880477,1.006259 1.304993,2.295529 1.210656,3.631968 -0.09434,1.336438 -0.707526,2.547094 -1.713785,3.427571 -1.00626,0.880477 -2.29553,1.304993 -3.616246,1.210656 -2.751491,-0.188673 -4.826901,-2.57854 -4.638227,-5.330031 z"
id="path40"
style="fill:#ec8d53;fill-opacity:1;stroke-width:0.15722805"
inkscape:connector-curvature="0" /><path
class="st0"
d="M 29.216974,28.422408 C 28.336497,27.400426 27.110118,26.787236 25.77368,26.6929 c -0.11006,-0.01572 -0.235842,-0.01572 -0.345902,-0.01572 -2.625708,0 -4.826901,2.059687 -5.015575,4.685396 -0.188673,2.767213 1.90246,5.172803 4.669673,5.361476 2.782937,0.204397 5.172803,-1.933905 5.361477,-4.669673 0.09434,-1.336438 -0.345902,-2.625708 -1.226379,-3.631968 z m -3.773473,6.383459 c -0.754695,0 -1.367884,0.06289 -1.367884,-0.345902 l 0.597466,-3.411848 c -0.345901,-0.235843 -0.566021,-0.628913 -0.566021,-1.084874 0,-0.723249 0.597467,-1.320716 1.320716,-1.320716 0.723249,0 1.320716,0.597467 1.320716,1.320716 0,0.440239 -0.22012,0.833309 -0.566021,1.084874 l 0.613189,3.380403 c 0,0.01572 0,0.01572 0,0.03144 0.01572,0.408793 -0.597466,0.345902 -1.352161,0.345902 z"
id="path42"
style="fill:#ec8d53;fill-opacity:1;stroke-width:0.15722805"
inkscape:connector-curvature="0" /></g></g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
auth-service/node_modules/passport/sponsors/snyk.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
auth-service/node_modules/passport/sponsors/workos.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB