Esempio n. 1
0
			it('should send "' + logLevels[i] + '" level', async () => {
				const level = logLevels[i];
				const server = Hapi.server({ port: 3000 });

				registerWithBunny(server, options);
				const rndMessage = randomString();
				expect(server.logger()).to.not.be.undefined;
				server.log([level], rndMessage);

				const msg = catcher.pop();
				expect(msg).to.be.not.undefined;
				expect(msg).to.have.all.keys(['name', 'hostname', 'pid', 'level', 'msg', 'tags', 'time', 'v']);
				expect(msg.msg).to.be.contain(rndMessage);
				expect(msg.tags).to.be.contain(level);
			});
Esempio n. 2
0
it('does allow remote access when localOnly is false IPv6', async () => {

    const barrier = new Barrier();
    const server = Hapi.server();
    const port = await internals.availablePort();

    await server.register({ plugin: Reptile, options: { port, localOnly: false } });

    const address = Net.Socket.prototype.address;
    Net.Socket.prototype.address = function () {

        Net.Socket.prototype.address = address;
        return {
            family: 'IPv6',
            address: '3ffe:1900:4545:3:200:f8ff:fe21:67cf'
        };
    };

    const sock = Net.connect(port);
    let state = 0;

    sock.on('readable', (size) => {

        const buffer = sock.read();
        if (!buffer) {
            return;
        }

        const result = buffer.toString('ascii');

        if (state === 0) {
            expect(result.indexOf('>')).to.not.equal(-1);
            sock.write('pack.hapi\n');
        }
        else if (state === 1) {
            sock.write('.exit\n');
        }
        else if (state === 2) {
            barrier.pass();
        }

        state++;
    });

    await barrier;
});
Esempio n. 3
0
it('creates a REPL that a client can connect to over TCP IPv6', async () => {

    const barrier = new Barrier();
    const server = Hapi.server();
    const port = await internals.availablePort();

    await server.register({ plugin: Reptile, options: { port } });

    const address = Net.Socket.prototype.address;
    Net.Socket.prototype.address = function () {

        Net.Socket.prototype.address = address;
        return {
            family: 'IPv6',
            address: '::1'
        };
    };

    const sock = Net.connect(port);
    let state = 0;

    sock.on('readable', () => {

        const buffer = sock.read();
        if (!buffer) {
            return;
        }

        const result = buffer.toString('ascii');

        if (state === 0) {
            expect(result.indexOf('>')).to.not.equal(-1);
            sock.write('pack.hapi\n');
        }
        else if (state === 1) {
            sock.write('.exit\n');
        }
        else if (state === 2) {
            barrier.pass();
        }

        state++;
    });

    return barrier;
});
Esempio n. 4
0
;(async () => {
    const server = HAPI.server({
        host:  "127.0.0.1",
        port:  12345,
        debug: { request: [ "error" ] }
    })

    await server.register(HAPIDucky)

    /*  provider  */
    server.route({
        method:  "POST",
        path:    "/foo",
        config: {
            payload: {
                output: "data", parse: true, allow: "application/json"
            },
            plugins: {
                ducky: "{ foo: string, bar?: boolean }"
            }
        },
        handler: async (request, h) => {
            return "OK"
        }
    })
    await server.start()

    /*  consumer  */
    let response = await server.inject({
        method:  "POST",
        url:     "/foo",
        payload: JSON.stringify({
            foo: "foo",
            bar: true
        })
    })
    if (response.result === "OK")
        console.log("-- internal request: /foo: OK")
    else
        console.log("-- internal request: /foo: ERROR: invalid response: ", response.result)

    await server.stop({ timeout: 1000 })
    process.exit(0)
})()
Esempio n. 5
0
async function getServer() {
  if (server) {
    return server;
  }
  server = hapi.server({debug: false, host: "localhost", port: 0});
  await server.register(require("vision")); // renders page templates (pug)
  server.views({
    engines: {pug: require("pug")},
    relativeTo: path.join(__dirname, "../.."),
    context: require("../../core/template-vars")({proSite: false})
  });
  const options = {
    galleries: require("./galleries-test"),
    baseDir: path.join(__dirname, "unit-test-galleries")
  };
  await server.register({plugin: require("./photos-plugin"), options});
  await server.start();
  return server;
}
Esempio n. 6
0
it('closes all connections when the server is stopped', async () => {

    const barrier = new Barrier();
    const server = Hapi.server();
    const port = await internals.availablePort();

    await server.register({ plugin: Reptile, options: { port } });

    const address = Net.Socket.prototype.address;
    Net.Socket.prototype.address = function () {

        Net.Socket.prototype.address = address;
        return {
            family: 'IPv4',
            address: '127.0.0.1'
        };
    };

    const sock = Net.connect(port);
    let state = 0;

    sock.once('close', () => {

        barrier.pass();
    });

    sock.on('readable', () => {

        const buffer = sock.read();
        if (!buffer) {
            return;
        }

        if (state === 0) {
            server.stop();
        }

        state++;
    });

    return barrier;
});
Esempio n. 7
0
const init = async () => {
  const api = server({
    port: 8000,
    host: 'localhost',
    routes: {
      cors: {
        origin: ['http://localhost:3000']
      }
    }
  })

  api.route({
    method: 'GET',
    path: '/hello',
    handler: () => 'hello world'
  })

  await api.start()

  console.log(`Server running at: ${api.info.uri}`)
}
Esempio n. 8
0
    it('calls through to handler on failed optional auth', async () => {

        const server = Hapi.server();
        await server.register(require('../'));

        server.auth.strategy('default', 'hawk', { getCredentialsFunc });
        server.route({
            method: 'POST',
            path: '/hawkOptional',
            handler: function (request, h) {

                return 'Success';
            },
            options: { auth: { mode: 'optional', strategy: 'default' } }
        });

        const request = { method: 'POST', url: 'http://example.com:8080/hawkOptional' };
        const res = await server.inject(request);

        expect(res.result).to.equal('Success');
    });
Esempio n. 9
0
    it('returns an error on insufficient scope', async () => {

        const server = Hapi.server();
        await server.register(require('../'));

        server.auth.strategy('default', 'hawk', { getCredentialsFunc });
        server.route({
            method: 'POST',
            path: '/hawkScope',
            handler: function (request, h) {

                return 'Success';
            },
            options: { auth: { scope: 'x', strategy: 'default' } }
        });

        const request = { method: 'POST', url: 'http://example.com:8080/hawkScope', payload: '{}', headers: { authorization: hawkHeader('john', '/hawkScope').header } };
        const res = await server.inject(request);

        expect(res.statusCode).to.equal(403);
    });
Esempio n. 10
0
async function start() {
	try {
		const server = Hapi.server({
			host: 'localhost',
			port: Number(process.argv[2] || 8080)
		})
		server.route({
			method:'POST',
			path: '/upload',
			config: {
				handler: function(request, h) {
					return new Promise((resolve,reject) => {
						let fileContent = ''
						request.payload.file.pipe(through((chunk,enc,callback) => {
							fileContent += chunk.toString()
							callback()
						})).on('finish',() => {
							return resolve(JSON.stringify({
								description: request.payload.description,
								file: {
									data: fileContent,
									filename: request.payload.file.hapi.filename,
									headers: request.payload.file.hapi.headers
								}	
							}))
						})
					})
				},
				payload: {
					output: 'stream',
					parse: true,
					allow: 'multipart/form-data'
				}
			}
		})
		await server.start()
    } catch (error) {
        throw error
    }
}
Esempio n. 11
0
;(async () => {
    const server = HAPI.server({
        host:  "127.0.0.1",
        port:  12345,
        debug: { request: [ "error" ] }
    })

    await server.register({
        plugin: HAPIHeader,
        options: {
            "Server":        "Example/1.2.3",
            "X-Request-Id":  (server, request, h) => request.info.id,
            "X-External-IP": (server, request, h) => {
                return Request.get("http://myexternalip.com/raw")
                    .then((value) => value.replace(/\r?\n/g, ""))
            }
        }
    })

    server.route({
        method:  "GET",
        path:    "/foo",
        handler: async (request, h) => {
            return "OK"
        }
    })
    await server.start()

    let response = await server.inject({
        method:  "GET",
        url:     "/foo"
    })
    if (response.result === "OK")
        console.log("-- internal request: /foo: OK", response.headers)
    else
        console.log("-- internal request: /foo: ERROR: invalid response: ", response.result)

    await server.stop({ timeout: 1000 })
    process.exit(0)
})()
Esempio n. 12
0
    it('calls through to handler on successful auth', async () => {

        const server = Hapi.server();
        await server.register(require('../'));

        server.auth.strategy('default', 'hawk', { getCredentialsFunc });
        server.route({
            method: 'POST',
            path: '/hawk',
            handler: function (request, h) {

                return 'Success';
            },
            options: { auth: 'default' }
        });

        const request = { method: 'POST', url: 'http://example.com:8080/hawk', headers: { authorization: hawkHeader('john', '/hawk').header } };
        const res = await server.inject(request);

        expect(res.statusCode).to.equal(200);
        expect(res.result).to.equal('Success');
    });
Esempio n. 13
0
    it('does not include authorization header in response when the response is an error', async () => {

        const server = Hapi.server();
        await server.register(require('../'));

        server.auth.strategy('default', 'hawk', { getCredentialsFunc });
        server.route({
            method: 'POST',
            path: '/hawkError',
            handler: function (request, h) {

                return new Error();
            },
            options: { auth: 'default' }
        });

        const request = { method: 'POST', url: 'http://example.com:8080/hawkError', headers: { authorization: hawkHeader('john', '/hawkError').header } };
        const res = await server.inject(request);

        expect(res.statusCode).to.equal(500);
        expect(res.headers.authorization).to.not.exist();
    });
Esempio n. 14
0
    it('returns an error on bad scheme', async () => {

        const server = Hapi.server();
        await server.register(require('../'));

        server.auth.strategy('default', 'hawk', { getCredentialsFunc });
        server.route({
            method: 'POST',
            path: '/hawk',
            handler: function (request, h) {

                return 'Success';
            },
            options: { auth: 'default' }
        });

        const request = { method: 'POST', url: 'http://example.com:8080/hawk', headers: { authorization: 'junk something' } };
        const res = await server.inject(request);

        expect(res.result).to.exist();
        expect(res.statusCode).to.equal(401);
    });
Esempio n. 15
0
function Server () {
  const server = hapi.server({host: 'localhost'})

  server.route({
    method: 'GET',
    path: '/',
    handler () {
      throw new Error('unexpected')
    }
  })

  server.route({
    method: 'GET',
    path: '/boom',
    handler () {
      throw boom.forbidden()
    }
  })

  server.initialize()
  return server
}
async function start () {
  const server = Hapi.server({ port: 3000 })

  server.route({
    method: 'GET',
    path: '/',
    handler: async function (request, h) {
      return 'hello world'
    }
  })

  await server.register({
    plugin: require('..'),
    options: {
      mergeHapiLogData: false
    }
  })

  server.events.on('response', () => {
    server.log(['info'], { hello: 'world' })
  })

  await server.start()
}
Esempio n. 17
0
'use strict'
const Hapi = require('hapi');
const H2o2 = require('h2o2');
const server = Hapi.server({
    host:'localhost',
    port: Number(process.argv[2] || 8080)
})
async function start(){
    try {
      await server.register({plugin:H2o2})
      server.route({
        method: 'GET',
        path: '/proxy',
        handler:{
          proxy:{
            host:'localhost',
            port:65535
          }
        }
      })
      await server.start()
    } catch (error) {
        throw error
    }
}
start()
Esempio n. 18
0
'use strict'

const mongoose = require('mongoose')
const Hapi = require('hapi')

const server = Hapi.server({
  port: process.env.PORT || 3000
})
const mongoHost = process.env.mongo_host || 'mongo'
const mongoPort = process.env.mongo_port || '27017'
const mongoCollection = process.env.mongo_collection || 'movieupc'
const mongoDbUrl = `mongodb://${mongoHost}:${mongoPort}/${mongoCollection}`

mongoose.connect(mongoDbUrl)

const schema = new mongoose.Schema({
  DVD_Title: String,
  Studio: String,
  Released: String,
  Status: String,
  Sound: String,
  Versions: String,
  Price: String,
  Rating: String,
  Year: String,
  Genre: String,
  Aspect: String,
  UPC: String,
  DVD_ReleaseDate: String,
  ID: String,
  Timestamp: String
Esempio n. 19
0
    it('authenticates with mock', async (flags) => {

        const mock = await Mock.v2(flags);
        const server = Hapi.server({ host: 'localhost', port: 80 });
        await server.register(Bell);

        const custom = Bell.providers.bitbucket();
        Hoek.merge(custom, mock.provider);

        Mock.override('https://api.bitbucket.org/2.0/user', {
            repositories: [{}],
            uuid: '1E9C5160-E436-11E5-9897-4FCB70D5A8C7',
            username: '******',
            display_name: 'steve'
        });

        server.auth.strategy('custom', 'bell', {
            password: '******',
            isSecure: false,
            clientId: 'bitbucket',
            clientSecret: 'secret',
            provider: custom
        });

        server.route({
            method: '*',
            path: '/login',
            config: {
                auth: 'custom',
                handler: function (request, h) {

                    return request.auth.credentials;
                }
            }
        });

        const res1 = await server.inject('/login');
        const cookie = res1.headers['set-cookie'][0].split(';')[0] + ';';

        const res2 = await mock.server.inject(res1.headers.location);

        const res3 = await server.inject({ url: res2.headers.location, headers: { cookie } });
        expect(res3.result).to.equal({
            provider: 'custom',
            token: '456',
            refreshToken: undefined,
            expiresIn: 3600,
            query: {},
            profile: {
                id: '1E9C5160-E436-11E5-9897-4FCB70D5A8C7',
                username: '******',
                displayName: 'steve',
                raw: {
                    repositories: [{}],
                    uuid: '1E9C5160-E436-11E5-9897-4FCB70D5A8C7',
                    username: '******',
                    display_name: 'steve'
                }
            }
        });
    });
Esempio n. 20
0
 beforeEach(() => {
   server = Hapi.server({ port: 0 })
 })
 * @fileOverview Hapi server main configuration file
 */

const Hapi = require('hapi')
const Boom = require('boom')
const auth = require('./auth')
const swagger = require('./swagger')
const jsdoc = require('./jsdoc')

const routes = require('../src/routes')

const server = Hapi.server({
  port: process.env.PORT,
  routes: {
    validate: {
      failAction: async (req, response, err) => {
        throw Boom.badRequest(err.message)
      },
    },
  },
})

auth.register(server)

if (process.env.SWAGGER === 'true') {
  swagger.register(server)
}

if (process.env.JSDOC === 'true') {
  jsdoc.register(server)
}
Esempio n. 22
0
    it('authenticates with mock (with custom fields)', async (flags) => {

        const mock = await Mock.v2(flags);
        const server = Hapi.server({ host: 'localhost', port: 80 });
        await server.register(Bell);

        const custom = Bell.providers.facebook({ fields: 'id,name,email,first_name,last_name,middle_name,picture' });
        Hoek.merge(custom, mock.provider);

        const profile = {
            id: '1234567890',
            username: '******',
            name: 'steve',
            first_name: 'steve',
            last_name: 'smith',
            email: '*****@*****.**',
            picture: {
                data: {
                    is_silhouette: false,
                    url: 'https://example.com/profile.png'
                }
            }
        };

        Mock.override('https://graph.facebook.com/v3.1/me', profile);

        server.auth.strategy('custom', 'bell', {
            password: '******',
            isSecure: false,
            clientId: 'facebook',
            clientSecret: 'secret',
            provider: custom
        });

        server.route({
            method: '*',
            path: '/login',
            config: {
                auth: 'custom',
                handler: function (request, h) {

                    return request.auth.credentials;
                }
            }
        });

        const res1 = await server.inject('/login');
        const cookie = res1.headers['set-cookie'][0].split(';')[0] + ';';

        const res2 = await mock.server.inject(res1.headers.location);

        const res3 = await server.inject({ url: res2.headers.location, headers: { cookie } });
        expect(res3.result).to.equal({
            provider: 'custom',
            token: '456',
            expiresIn: 3600,
            refreshToken: undefined,
            query: {},
            profile: {
                id: '1234567890',
                username: '******',
                displayName: 'steve',
                name: {
                    first: 'steve',
                    last: 'smith',
                    middle: undefined
                },
                email: '*****@*****.**',
                picture: {
                    data: {
                        is_silhouette: false,
                        url: 'https://example.com/profile.png'
                    }
                },
                raw: profile
            }
        });
    });
Esempio n. 23
0
    it('performs a full authorization flow', async () => {

        const encryptionPassword = '******';

        const apps = {
            social: {
                id: 'social',
                scope: ['a', 'b', 'c'],
                key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
                algorithm: 'sha256'
            },
            network: {
                id: 'network',
                scope: ['b', 'x'],
                key: 'witf745itwn7ey4otnw7eyi4t7syeir7bytise7rbyi',
                algorithm: 'sha256'
            }
        };

        const grant = {
            id: 'a1b2c3d4e5f6g7h8i9j0',
            app: 'social',
            user: '******',
            exp: Oz.hawk.utils.now() + 60000
        };

        const options = {
            oz: {
                encryptionPassword,

                loadAppFunc: (id) => apps[id],
                loadGrantFunc: function (id) {

                    const ext = {
                        public: 'everybody knows',
                        private: 'the the dice are loaded'
                    };

                    return { grant, ext };
                }
            }
        };

        const server = Hapi.server();
        await server.register(Scarecrow);

        // Add strategy

        server.auth.strategy('oz', 'oz', options);
        server.auth.default('oz');

        // Add a protected resource

        server.route({
            path: '/protected',
            method: 'GET',
            config: {
                auth: {
                    entity: 'user'
                },
                handler: function (request) {

                    return request.auth.credentials.user + ' your in!';
                }
            }
        });

        // The app requests an app ticket using Hawk authentication

        let req = {
            method: 'POST',
            url: 'http://example.com/oz/app',
            headers: {
                authorization: Oz.client.header('http://example.com/oz/app', 'POST', apps.social).header
            }
        };

        const res1 = await server.inject(req);
        expect(res1.statusCode).to.equal(200);

        // The user is redirected to the server, logs in, and grant app access, resulting in an rsvp

        const appTicket = res1.result;
        const rsvp = await Oz.ticket.rsvp(apps.social, grant, encryptionPassword);

        // After granting app access, the user returns to the app with the rsvp
        // The app exchanges the rsvp for a ticket

        req = {
            method: 'POST',
            url: 'http://example.com/oz/rsvp',
            headers: {
                authorization: Oz.client.header('http://example.com/oz/rsvp', 'POST', appTicket).header
            },
            payload: JSON.stringify({ rsvp })
        };

        const res2 = await server.inject(req);
        const userTicket = res2.result;

        // The app reissues the ticket

        req = {
            method: 'POST',
            url: 'http://example.com/oz/reissue',
            headers: {
                authorization: Oz.client.header('http://example.com/oz/reissue', 'POST', userTicket).header
            }
        };

        const res3 = await server.inject(req);
        const newTicket = res3.result;

        req = {
            method: 'GET',
            url: 'http://example.com/protected',
            headers: {
                authorization: Oz.client.header('http://example.com/protected', 'GET', newTicket).header
            }
        };

        const res4 = await server.inject(req);
        expect(res4.payload).to.equal('john your in!');
    });
Esempio n. 24
0
    it('fails to authenticate a request with mismatching app id', async () => {

        const encryptionPassword = '******';

        const app = {
            id: 'social',
            scope: ['a', 'b', 'c'],
            key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
            algorithm: 'sha256'
        };

        const grant = {
            id: 'a1b2c3d4e5f6g7h8i9j0',
            app: 'social',
            user: '******',
            exp: Oz.hawk.utils.now() + 60000
        };

        const options = {
            oz: {
                encryptionPassword,
                loadAppFunc: () => app,
                loadGrantFunc: () => ({ grant })
            }
        };

        const server = Hapi.server();
        await server.register(Scarecrow);

        // Add strategy

        server.auth.strategy('oz', 'oz', options);
        server.auth.default('oz');

        // Add a protected resource

        server.route({
            path: '/protected',
            method: 'GET',
            config: {
                auth: {
                    entity: 'user'
                },
                handler: function (request) {

                    return request.auth.credentials.user + ' your in!';
                }
            }
        });

        // The app requests an app ticket using Hawk authentication

        let req = {
            method: 'POST',
            url: 'http://example.com/oz/app',
            headers: {
                authorization: Oz.client.header('http://example.com/oz/app', 'POST', app).header
            }
        };

        const res1 = await server.inject(req);

        // The user is redirected to the server, logs in, and grant app access, resulting in an rsvp

        const appTicket = res1.result;

        const rsvp = await Oz.ticket.rsvp(app, grant, encryptionPassword);

        // After granting app access, the user returns to the app with the rsvp
        // The app exchanges the rsvp for a ticket

        req = {
            method: 'POST',
            url: 'http://example.com/oz/rsvp',
            headers: {
                authorization: Oz.client.header('http://example.com/oz/rsvp', 'POST', appTicket).header
            },
            payload: JSON.stringify({ rsvp })
        };

        const res2 = await server.inject(req);
        const userTicket = res2.result;
        userTicket.app = '567';

        req = {
            method: 'GET',
            url: 'http://example.com/protected',
            headers: {
                authorization: Oz.client.header('http://example.com/protected', 'GET', userTicket).header
            }
        };

        const res3 = await server.inject(req);
        expect(res3.statusCode).to.equal(401);
        expect(res3.result.message).to.equal('Mismatching application id');
    });
Esempio n. 25
0
const Hapi = require('hapi');

const server = Hapi.server({
    host: 'localhost',
    port: 3010
});

server.route({
    method: 'GET',
    path: '/hello',
    handler: function(request, h) {

        return 'Hello World';
    }
});

//start server
async function start() {

    try {
        await server.start();
    }
    catch(err) {
        console.log(err);
        process.exit(1);
    }

    console.log('Server running at:', server.info.url);
}

start();
Esempio n. 26
0
function createServer(host, port) {
  const server = Hapi.server({ port: port, host: host });
  return server;
}
Esempio n. 27
0
'use strict';

var Hapi = require('hapi');

var server = Hapi.server({
    port: 3000,
    host: 'localhost'
});

server.route({
    method: 'GET',
    path: '/',
    handler: (request, h) => {
        return 'Hello world!';
    }
});

var helloWorld = async () => {
    await server.start();
    console.log(`Listening at: ${server.info.uri}`);
};

process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

helloWorld();
Esempio n. 28
0
import Hapi from 'hapi'
import path from 'path'
import fs from 'fs'
import { address } from 'ip'

const server = Hapi.server({
    port: 4200,
    host: process.argv[2] === 'dev' ? '127.0.0.1' : address()
});

export const start = async ({

}) => {

    await server.register(require('inert'))
    console.log('ADDRESS', address())
    server.route({
        method: 'GET',
        path: '/{file*}',
        handler: {
            directory: {
                path: request => {
                    console.log('App location:', request.headers.applocation)
                    console.log('file request:', request.params.file)
                    console.log('----->', fs.existsSync(request.params.file))
                    const { applocation: dir } = request.headers
                    console.log('dir', dir)
                    return request.params.file
                },
                listing: true
            }  
Esempio n. 29
0
'use strict';

const Config = require('getconfig');
const Hapi = require('hapi');
const Pug = require('pug');
const Markdown = require('./lib/markdown');
const Path = require('path');

if (Config.server.cache) {
    Config.server.cache.engine = require(Config.server.cache.engine);
}

const server = Hapi.server(Config.server);

Pug.filters.markdown = Markdown.parseSync;
const start = async function () {

    server.ext({
        type: 'onPreResponse',
        method: function (request, h) {

            if (!request.response.isBoom) {
                return h.continue;
            }
            return h.view('error', request.response).code(request.response.output.statusCode);
        } });

    server.method(require('./lib/npm').methods);
    server.method(require('./lib/github').methods);
    server.method(require('./lib/markdown').methods);
    server.method(require('./lib/community').methods);
Esempio n. 30
0
	it('should register successfully', async () => {
		const server = Hapi.server({ port: 3000 });
		await registerWithBunny(server, null);
		expect(server.logger()).to.not.be.undefined;
	});