npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@nephele/authenticator-custom

v1.0.0-alpha.45

Published

Custom logic authenticator for the Nephele WebDAV server.

Downloads

101

Readme

Custom Nephele Authenticator

A Nephele authenticator that uses customizable logic to authenticate users.

Installation

npm i -s @nephele/authenticator-custom

Usage

The default export is the authenticator, and it's also a named export "Authenticator". Instantiate this class, providing an options object, and give that to Nephele as the authenticator.

import express from 'express';
import nepheleServer from 'nephele';
import ExampleAdapter from '@nephele/adapter-example';
import CustomAuthenticator, { User } from '@nephele/authenticator-custom';

const app = express();
const port = 8080;

app.use(
  '/',
  nepheleServer({
    adapter: new ExampleAdapter(),
    authenticator: new CustomAuthenticator({
      getUser: async (username) => {
        if (username === 'admin') {
          const user = new User({ username });
          user.someArbitraryPropYouMayNeed = 'somevalue';
          return user;
        }
        return null;
      },
      // For Basic authentication.
      authBasic: async (user, password) => {
        if (user.username === 'admin' && password === 'password') {
          return true;
        }
        return false;
      },
      // For Digest authentication.
      authDigest: async (user) => {
        if (user.username === 'admin') {
          return { password: 'password' };
        }
        return null;
      },
      realm: 'My WebDAV Server',
    }),
  }),
);

app.listen(port, () => {
  console.log(`Nephele WebDAV server listening on port ${port}`);
});

Options / Defaults

  • realm = 'Nephele WebDAV Service': The realm is the name reported by the server when the user is prompted to authenticate.
  • unauthorizedAccess = false: Allow the user to proceed, even if they are not authenticated.
  • getUser: A function that takes a username and returns a promise that resolves to a user if the user exists or it's not possible to tell whether they exist, or null otherwise.
  • key = random_uuid(): A private key used to calculate nonce values for Digest authentication.
  • nonceTimeout = 1000 * 60 * 60 * 6: The number of milliseconds for which a nonce is valid once issued. Defaults to 6 hours.
  • authBasic: Authorize a User returned by getUser with a password.
  • authDigest: Retrieve a User's password or hash for Digest authentication.

realm

It should be HTTP header safe (shouldn't include double quotes or semicolon).

unauthorizedAccess

The authenticator will advertise that authentication is available, but the user will have access to the server without providing authentication.

In the unauthorized state, the user presented to the Nephele adapter will have the username "nobody".

WARNING: It is very dangerous to allow unauthorized access if write actions are allowed!

key

If you do not provide one, one will be generated, but this does mean that with Digest authentication, clients will only be able to authenticate to that particular server. If you have multiple servers or multiple instances of Nephele that serve the same source data, you should provide the same key to all of them in order to use Digest authentication correctly.

authBasic

The returned promise should resolve to true if the user is successfully authenticated, false otherwise.

The Basic mechanism requires the user to submit their username and password in plain text with the request, so only use this if the connection is secured through some means like TLS. If you provide authBasic, the server will advertise support for the Basic mechanism.

authDigest

The returned promise should resolve to the password or hash if the user exists, or null otherwise. If the password is returned, it will be hashed, however, you can also return a prehashed string of SHA256(username:realm:password) or MD5(username:realm:password), depending on the requested algorithm.

The Digest mechansism requires the user to cryptographically hash their password with the request, so it will not divulge their password to eaves droppers. However, it is still less safe than using TLS and Basic authentication. If you provide authDigest, the server will advertise support for the Digest mechanism.

License

Copyright 2022-2024 SciActive Inc

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.