summaryrefslogtreecommitdiffstats
path: root/kio/kpasswdserver/kpasswdserver.h
blob: cf44681bf8ea624c8ed1d9a4659aa224176ff7f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
    This file is part of the KDE Password Server

    Copyright (C) 2002 Waldo Bastian (bastian@kde.org)

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    version 2 as published by the Free Software Foundation.

    This software 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 library; see the file COPYING. If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/
//----------------------------------------------------------------------------
//
// KDE Password Server
// $Id$

#ifndef KPASSWDSERVER_H
#define KPASSWDSERVER_H

#include <tqdict.h>
#include <tqintdict.h>

#include <dcopclient.h>
#include <kio/authinfo.h>
#include <kded/kdedmodule.h>

namespace KWallet {
    class Wallet;
}

class KPasswdServer : public KDEDModule
{
  Q_OBJECT
  K_DCOP
public:
  KPasswdServer(const TQCString &);
  ~KPasswdServer();

k_dcop:
  // KDE4 merge
  KIO::AuthInfo checkAuthInfo(KIO::AuthInfo, long, unsigned long);
  KIO::AuthInfo checkAuthInfo(KIO::AuthInfo, long);
  KIO::AuthInfo queryAuthInfo(KIO::AuthInfo, TQString, long, long, unsigned long);
  KIO::AuthInfo queryAuthInfo(KIO::AuthInfo, TQString, long, long);
  void addAuthInfo(KIO::AuthInfo, long);

public slots:
  void processRequest();
  // Remove all authentication info associated with windowId
  void removeAuthForWindowId(long windowId);

protected:
  struct AuthInfo;

  TQString createCacheKey( const KIO::AuthInfo &info );
  const AuthInfo *findAuthInfoItem(const TQString &key, const KIO::AuthInfo &info);
  void removeAuthInfoItem(const TQString &key, const KIO::AuthInfo &info);
  void addAuthInfoItem(const TQString &key, const KIO::AuthInfo &info, long windowId, long seqNr, bool canceled);
  KIO::AuthInfo copyAuthInfo(const AuthInfo *);
  void updateAuthExpire(const TQString &key, const AuthInfo *, long windowId, bool keep);
  int findWalletEntry( const TQMap<TQString,TQString>& map, const TQString& username );
  bool openWallet( WId windowId );

  struct AuthInfo {
    AuthInfo() { expire = expNever; isCanceled = false; seqNr = 0; }

    KURL url;
    TQString directory;
    TQString username;
    TQString password;
    TQString realmValue;
    TQString digestInfo;

    enum { expNever, expWindowClose, expTime } expire;
    TQValueList<long> windowList;
    unsigned long expireTime;
    long seqNr;

    bool isCanceled;
  };

  class AuthInfoList : public TQPtrList<AuthInfo>
  {
    public:
      AuthInfoList() { setAutoDelete(true); }
      int compareItems(TQPtrCollection::Item n1, TQPtrCollection::Item n2);
  };

  TQDict< AuthInfoList > m_authDict;

  struct Request {
     DCOPClient *client;
     DCOPClientTransaction *transaction;
     TQString key;
     KIO::AuthInfo info;
     TQString errorMsg;
     long windowId;
     long seqNr;
     bool prompt;
  };

  TQPtrList< Request > m_authPending;
  TQPtrList< Request > m_authWait;
  TQIntDict<TQStringList> mWindowIdList;
  DCOPClient *m_dcopClient;
  KWallet::Wallet* m_wallet;
  long m_seqNr;
};

#endif