aboutsummaryrefslogblamecommitdiffstats
path: root/embed/ephy-password-manager.c
blob: aa757c7e4ddc05748ccdd314983c72a43e048b21 (plain) (tree)
1
2
3
  

                                          












                                                                        
                                                                                  
  

   
                   











                                  
                                   























                                                                                               
                                                                 














                                             
                                                      
 
                                                                 



                                                   



                                                             

















                                                
                                                      




                         

                                                               




                                     
                                   
         
                                          
                 
                                                          
                                                        











                                                                     


























                                                                               
   
                                      





                                                               

                                                                 
 
                                                                                    



                                   
                                         





                                                                

                                                                    
 
                                                                                    



                                      












                                                                                    
                                        






                                                        
                                                                  
 
                                                                                    

                                     
/*
 *  Copyright © 2003 Marco Pesenti Gritti
 *  Copyright © 2003 Christian Persch
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#include "config.h"

#include "ephy-password-manager.h"
#include "ephy-marshal.h"
#include "ephy-debug.h"

/* EphyPasswordInfo */

GType
ephy_password_info_get_type (void)
{
    static GType type = 0;

    if (G_UNLIKELY (type == 0))
    {
        type = g_boxed_type_register_static ("EphyPasswordInfo",
                             (GBoxedCopyFunc) ephy_password_info_copy,
                             (GBoxedFreeFunc) ephy_password_info_free);
    }

    return type;
}

/**
 * ephy_password_info_new:
 * @host: a host name
 * @username: a user name
 * @password: a password, or NULL
 *
 * Generates a new #EphyPasswordInfo.
 *
 * Return value: the new password info.
 **/
EphyPasswordInfo *
ephy_password_info_new (const char *host,
            const char *username,
            const char *password)
{
    EphyPasswordInfo *info = g_slice_new0 (EphyPasswordInfo);

    info->host = g_strdup (host);
    info->username = g_strdup (username);
    info->password = g_strdup (password);

    return info;
}

/**
 * ephy_password_info_copy:
 * @info: a #EphyPasswordInfo
 *
 * Return value: a copy of @info
 **/
EphyPasswordInfo *
ephy_password_info_copy (const EphyPasswordInfo *info)
{
    EphyPasswordInfo *copy = g_slice_new0 (EphyPasswordInfo);

    copy->host = g_strdup (info->host);
    copy->username = g_strdup (info->username);
    copy->password = g_strdup (info->password);
    copy->httpRealm = g_strdup (info->httpRealm);
    copy->passwordField = g_strdup (info->passwordField);
    copy->usernameField = g_strdup (info->usernameField);
    copy->formSubmitURL = g_strdup (info->formSubmitURL);

    return copy;
}

/**
 * ephy_password_info_free:
 * @info:
 *
 * Frees @info.
 **/
void
ephy_password_info_free (EphyPasswordInfo *info)
{
    if (info != NULL)
    {
        g_free (info->host);
        g_free (info->username);
        g_free (info->password);
        g_slice_free (EphyPasswordInfo, info);
    }
}

/* EphyPasswordManager */

static void ephy_password_manager_base_init (gpointer g_class);

GType
ephy_password_manager_get_type (void)
{
       static GType type = 0;

    if (G_UNLIKELY (type == 0))
    {
        const GTypeInfo our_info =
        {
            sizeof (EphyPasswordManagerIface),
            ephy_password_manager_base_init,
            NULL,
        };
        
        type = g_type_register_static (G_TYPE_INTERFACE,
                           "EphyPasswordManager",
                           &our_info,
                           (GTypeFlags) 0);
    }

    return type;
}

static void
ephy_password_manager_base_init (gpointer g_class)
{
    static gboolean initialised = FALSE;

    if (initialised == FALSE)
    {
    /**
     * EphyPasswordManager::changed
     * @manager: the #EphyPermissionManager
     *
     * The ::passwords-changed signal is emitted when the list of passwords
     * has changed.
     */
    g_signal_new ("passwords-changed",
              EPHY_TYPE_PASSWORD_MANAGER,
              G_SIGNAL_RUN_FIRST,
              G_STRUCT_OFFSET (EphyPasswordManagerIface, changed),
              NULL, NULL,
              g_cclosure_marshal_VOID__VOID,
              G_TYPE_NONE,
              0);

    initialised = TRUE;
    }
}

/**
 * ephy_password_manager_add_password:
 * @manager: the #EphyPasswordManager
 * @info: a #EphyPasswordInfo
 * 
 * Adds the password entry @info to the the passwords database.
 **/
void
ephy_password_manager_add_password (EphyPasswordManager *manager,
                        EphyPasswordInfo *info)
{
    EphyPasswordManagerIface *iface = EPHY_PASSWORD_MANAGER_GET_IFACE (manager);
    iface->add (manager, info);
}

/**
 * ephy_password_manager_remove_password:
 * @manager: the #EphyPasswordManager
 * @info: a #EphyPasswordInfo
 * 
 * Removes the password entry @info from the passwords database.
 **/
void
ephy_password_manager_remove_password (EphyPasswordManager *manager,
                           EphyPasswordInfo *info)
{
    EphyPasswordManagerIface *iface = EPHY_PASSWORD_MANAGER_GET_IFACE (manager);
    iface->remove (manager, info);
}

/**
 * ephy_password_manager_remove_all_passwords:
 * @manager: the #EphyPasswordManager
 *
 * Removes all the password entries from the password database.
 **/
void
ephy_password_manager_remove_all_passwords (EphyPasswordManager *manager)
{
    EphyPasswordManagerIface *iface = EPHY_PASSWORD_MANAGER_GET_IFACE (manager);
    iface->remove_all (manager);
}

/**
 * ephy_password_manager_list_passwords:
 * @manager: the #EphyPasswordManager
 * 
 * Lists all password entries in the passwords database.
 * 
 * Return value: the list of password entries
 **/
GList *
ephy_password_manager_list_passwords(EphyPasswordManager *manager)
{
    EphyPasswordManagerIface *iface = EPHY_PASSWORD_MANAGER_GET_IFACE (manager);
    return iface->list (manager);
}