/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Netscape Public License
 * Version 1.0 (the "NPL"); you may not use this file except in
 * compliance with the NPL.  You may obtain a copy of the NPL at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the NPL is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
 * for the specific language governing rights and limitations under the
 * NPL.
 *
 * The Initial Developer of this code under the NPL is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
 * Reserved.
 */

#ifndef MKACCESS_H
#define MKACCESS_H

#ifndef MKGETURL_H
#include "mkgeturl.h"
#endif
/* returns TRUE if authorization is required
 */
extern Bool NET_AuthorizationRequired(char * address);

/* returns false if the user wishes to cancel authorization
 * and TRUE if the user wants to continue with a new authorization
 * string
 */
extern Bool NET_AskForAuthString(MWContext * context,
                     				URL_Struct *URL_s,
                     				char * authenticate,
                     				char * prot_template,
									Bool already_sent_auth);

/* returns a authorization string if one is required, otherwise
 * returns NULL
 */
extern char * NET_BuildAuthString(MWContext * context, URL_Struct *URL_s);

/*
 * Builds the Proxy-authorization string
 */
extern char *
NET_BuildProxyAuthString(MWContext * context,
			 URL_Struct * url_s,
			 char * proxy_addr);

/*
 * Returns FALSE if the user wishes to cancel proxy authorization
 * and TRUE if the user wants to continue with a new authorization
 * string.
 */
PUBLIC PRBool
NET_AskForProxyAuth(MWContext * context,
		    char *   proxy_addr,
		    char *   pauth_params,
		    PRBool  already_sent_auth);

MODULE_PRIVATE int PR_CALLBACK
NET_CookieBehaviorPrefChanged(const char * newpref, void * data);

MODULE_PRIVATE int PR_CALLBACK
NET_CookieWarningPrefChanged(const char * newpref, void * data);

MODULE_PRIVATE int PR_CALLBACK
NET_CookieScriptPrefChanged(const char * newpref, void * data);

MODULE_PRIVATE void
net_http_password_data_interp(
        char *module,
        char *key,
        char *data, int32 data_len,
        char *type_buffer, int32 type_buffer_size,
        char *url_buffer, int32 url_buffer_size,
        char *username_buffer, int32 username_buffer_size,
        char *password_buffer, int32 password_buffer_size);

PUBLIC void NET_DeleteCookie(char* cookieURL);
PUBLIC void NET_DisplayCookieInfoAsHTML(ActiveEntry * cur_entry);


/*============================================================================================
    THIS IS THE BEGINNING OF TRUST.H WHICH IDEALLY SHOULD BE A SEPERATE FILE
  ============================================================================================*/
#ifndef TRUSTLABEL_H
/* #define TRUSTLABEL_H 1 */
#ifdef TRUST_LABELS

/* the structure that the iterators use to pass back the processed trust label
 * associated with this struct is a constructor and destructor and some methods */
typedef struct {
	short purpose;			/* the purpose range encoded in bits 0-5 */
	short ID;			/* the id value */
	short recipients;		/* the Recipients value */
	PRBool  isGeneric;		/* true if this is a generic label i.e. applies to all cookies */
	PRBool  isSigned;			/* true if this label was signed and the signature verified */ 
	PRTime ExpDate;			/* the expiration date in local time */
	char  *signatory;		/* who signed the label if it was signed */
	char  *domainName;		/* the applicable domain for the label */
	char  *path;			/* the path for the label */
	char  *szTrustAuthority;	/* the trust authority rating service  */
	XP_List  *nameList;		/* the list of names of the specific cookies that this label is for */
	char  *szBy;			/* the by field from the PICS label */
} TrustLabel;

TrustLabel *TL_Construct();
void TL_Destruct( TrustLabel *ALabel );
void TL_ProcessForAttrib( TrustLabel *ALabel, char *szFor);
void TL_SetSignatory( TrustLabel *ALabel, char *Signatory );
void TL_SetTrustAuthority( TrustLabel *ALabel, char *TrustAuthority );
void TL_SetByField( TrustLabel *ALabel, char *ByField );

/* utility function that use TrustLabel */
void PICS_ExtractTrustLabel( URL_Struct *URL_s, char *value );
PRBool IsTrustLabelsEnabled(void);
PUBLIC PRBool MatchCookieToLabel2( char *TargetURL,  char *CookieName,
	char *CookiePath, char *CookieHost, 
	TrustLabel **TheLabel );

#endif

#endif




#endif /* MKACCESS_H */
