<commit_before>HTTP Authentication implementation in Go
========================================

This is an implementation of HTTP Basic and HTTP Digest authentication
in Go language. It is designed as a simple wrapper for
http.RequestHandler functions.

Features
--------
 
 * Supports HTTP Basic and HTTP Digest authentication.
 * Supports htpasswd and htdigest formatted files.
 * Automatic reloading of password files.
 * Pluggable interface for user/password storage.
 * Supports MD5 and SHA1 for Basic authentication password storage.
 * Configurable Digest nonce cache size with expiration.
 * Wrapper for legacy http handlers (http.HandlerFunc interface)
 
Example usage
-------------

This is a complete working example for Basic auth:

    package main

    import (
            auth "github.com/abbot/go-http-auth"
            "fmt"
            "net/http"
    )

    func Secret(user, realm string) string {
            if user == "john" {
                    // password is "<PASSWORD>"
                    return <PASSWORD>"
            }<commit_msg>Updated features list.<commit_after>HTTP Authentication implementation in Go
========================================

This is an implementation of HTTP Basic and HTTP Digest authentication
in Go language. It is designed as a simple wrapper for
http.RequestHandler functions.

Features
--------
 
 * Supports HTTP Basic and HTTP Digest authentication.
 * Supports htpasswd and htdigest formatted files.
 * Automatic reloading of password files.
 * Pluggable interface for user/password storage.
 * Supports MD5, SHA1 and BCrypt for Basic authentication password storage.
 * Configurable Digest nonce cache size with expiration.
 * Wrapper for legacy http handlers (http.HandlerFunc interface)
 
Example usage
-------------

This is a complete working example for Basic auth:

    package main

    import (
            auth "github.com/abbot/go-http-auth"
            "fmt"
            "net/http"
    )

    func Secret(user, realm string) string {
            if user == "john" {
                    // password is "<PASSWORD>"
                    return <PASSWORD>"
            }
{'fraction_non_alphanumeric': 0.11095571095571095, 'fraction_numerical': 0.0018648018648018648, 'mean_word_length': 2.59463986599665, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1131988', 'n_tokens_mistral': 526, 'n_tokens_neox': 496, 'n_words': 217}