From c6fcc96c17ba9315fa172635b584e96984b24a70 Mon Sep 17 00:00:00 2001 From: Horiuchi_H Date: Tue, 1 Apr 2014 12:37:43 -0700 Subject: [PATCH 1/2] add test file --- passport/passport-test.ts | 61 +++++++++++++++++++++++++++++++++++++++ passport/passport.d.ts | 60 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 passport/passport-test.ts create mode 100644 passport/passport.d.ts diff --git a/passport/passport-test.ts b/passport/passport-test.ts new file mode 100644 index 000000000..f102b306e --- /dev/null +++ b/passport/passport-test.ts @@ -0,0 +1,61 @@ +/// +/// + +import express = require('express'); +import passport = require('passport'); + +class TestStrategy implements passport.Strategy { + public name: string = 'test'; + constructor() {} + authenticate(req: passport.Request) {} +} + +passport.use(new TestStrategy()); +passport.framework('test'); +passport.serializeUser((user, done) => {}); +passport.deserializeUser((id, done) => {}); + +passport.use(new TestStrategy()) + .unuse('test') + .use(new TestStrategy()) + .framework('test-fw'); + + +var app = express(); +app.configure(() => { + app.use(passport.initialize()); + app.use(passport.session()); +}); + +app.post('/login', + passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }), + function(req, res) { + res.redirect('/'); + }); + +app.post('/login', function(req: passport.Request, res: passport.Response, next: (err?: any) => void) { + passport.authenticate('local', function(err, user, info) { + if (err) { return next(err) } + if (!user) { + req.session.error = info.message; + return res.redirect('/login') + } + req.logIn(user, function(err) { + if (err) { return next(err); } + return res.redirect('/users/' + user.username); + }); + })(req, res, next); +}); + +app.get('/logout', function(req: passport.Request, res: passport.Response) { + req.logout(); + res.redirect('/'); +}); + +function ensureAuthenticated(req: passport.Request, res: passport.Response, next: (err?: any) => void) { + if (req.isAuthenticated()) { return next(); } + if (req.isUnauthenticated()) { + res.redirect('/login'); + } +} + diff --git a/passport/passport.d.ts b/passport/passport.d.ts new file mode 100644 index 000000000..ae401b252 --- /dev/null +++ b/passport/passport.d.ts @@ -0,0 +1,60 @@ +// Type definitions for Passport v0.2.0 +// Project: http://passportjs.org +// Definitions by: Horiuchi_H +// DefinitelyTyped: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module 'passport' { + import express = require('express'); + + function use(strategy: Strategy): Passport; + function use(name: string, strategy: Strategy): Passport; + function unuse(name: string): Passport; + function framework(fw: string): Passport; + function initialize(options?: { userProperty: string; }): express.Handler; + function session(options?: { pauseStream: boolean; }): express.Handler; + + function authenticate(strategy: string, options: Object, callback?: express.Handler): express.Handler; + function authenticate(strategy: string, callback2: (err: any, user: any, info: any) => void): express.Handler; + function authorize(strategy: string, options: Object, callback?: express.Handler): express.Handler; + function serializeUser(fn: (user: any, done: (err: any, id: any) => void) => void): void; + function deserializeUser(fn: (id: any, done: (err: any, user: any) => void) => void): void; + function transformAuthInfo(fn: (info: any, done: (err: any, info: any) => void) => void): void; + + interface Passport { + use(strategy: Strategy): Passport; + use(name: string, strategy: Strategy): Passport; + unuse(name: string): Passport; + framework(fw: string): Passport; + initialize(options?: { userProperty: string; }): express.Handler; + session(options?: { pauseStream: boolean; }): express.Handler; + + authenticate(strategy: string, callback2: (err: any, user: any, info: any) => void): express.Handler; + authenticate(strategy: string, options: Object, callback?: express.Handler): express.Handler; + authorize(strategy: string, options: Object, callback?: express.Handler): express.Handler; + serializeUser(fn: (user: any, done: (err: any, id: any) => void) => void): void; + deserializeUser(fn: (id: any, done: (err: any, user: any) => void) => void): void; + transformAuthInfo(fn: (info: any, done: (err: any, info: any) => void) => void): void; + } + + interface Request extends express.Request { + login(user: any, done: (err: any) => void): void; + login(user: any, options: Object, done: (err: any) => void): void; + logIn(user: any, done: (err: any) => void): void; + logIn(user: any, options: Object, done: (err: any) => void): void; + + logout(): void; + logOut(): void; + + isAuthenticated(): boolean; + isUnauthenticated(): boolean; + } + interface Response extends express.Response {} + + interface Strategy { + name?: string; + authenticate(req: Request, options?: Object): void; + } +} + From a66b047ffa4b0937acfc76c85e3b3820f2449dcf Mon Sep 17 00:00:00 2001 From: Horiuchi_H Date: Tue, 1 Apr 2014 18:42:18 -0700 Subject: [PATCH 2/2] add passport library --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 30c81dd14..0b06d7a0c 100755 --- a/README.md +++ b/README.md @@ -218,6 +218,7 @@ List of Definitions * [NProgress](https://github.com/rstacruz/nprogress) (by [Judah Gabriel Himango](https://github.com/judahgabriel)) * [Numeral.js](https://github.com/adamwdraper/Numeral-js) (by [Vincent Bortone](https://github.com/vbortone/)) * [OpenLayers](https://github.com/openlayers/openlayers) (by [Ilya Bolkhovsky](https://github.com/bolhovsky/)) +* [Passport](http://passportjs.org/) (by [Hiroki Horiuchi](https://github.com/horiuchi/)) * [Parallel.js](https://github.com/adambom/parallel.js) (by [Josh Baldwin](https://github.com/jbaldwin)) * [PDF.js](https://github.com/mozilla/pdf.js) (by [Josh Baldwin](https://github.com/jbaldwin)) * [Persona](http://www.mozilla.org/en-US/persona) (by [James Frasca](https://github.com/Nycto))