gnomekeyring.cpp 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "gnomekeyring_p.h"
  2. const char* GnomeKeyring::GNOME_KEYRING_DEFAULT = nullptr;
  3. bool GnomeKeyring::isAvailable()
  4. {
  5. const GnomeKeyring& keyring = instance();
  6. return keyring.isLoaded() &&
  7. keyring.NETWORK_PASSWORD &&
  8. keyring.is_available &&
  9. keyring.find_password &&
  10. keyring.store_password &&
  11. keyring.delete_password &&
  12. keyring.is_available();
  13. }
  14. GnomeKeyring::gpointer GnomeKeyring::store_network_password(
  15. const gchar* keyring,
  16. const gchar* display_name,
  17. const gchar* user,
  18. const gchar* server,
  19. const gchar* type,
  20. const gchar* password,
  21. OperationDoneCallback callback,
  22. gpointer data,
  23. GDestroyNotify destroy_data )
  24. {
  25. if ( !isAvailable() )
  26. return 0;
  27. return instance().store_password( instance().NETWORK_PASSWORD,
  28. keyring, display_name, password, callback,
  29. data, destroy_data,
  30. "user", user,
  31. "server", server,
  32. "type", type,
  33. static_cast<char*>(0) );
  34. }
  35. GnomeKeyring::gpointer GnomeKeyring::find_network_password(
  36. const gchar* user, const gchar* server, const gchar* type,
  37. OperationGetStringCallback callback, gpointer data, GDestroyNotify destroy_data )
  38. {
  39. if ( !isAvailable() )
  40. return 0;
  41. return instance().find_password( instance().NETWORK_PASSWORD,
  42. callback, data, destroy_data,
  43. "user", user, "server", server, "type", type,
  44. static_cast<char*>(0) );
  45. }
  46. GnomeKeyring::gpointer GnomeKeyring::delete_network_password( const gchar* user,
  47. const gchar* server,
  48. OperationDoneCallback callback,
  49. gpointer data,
  50. GDestroyNotify destroy_data )
  51. {
  52. if ( !isAvailable() )
  53. return 0;
  54. return instance().delete_password( instance().NETWORK_PASSWORD,
  55. callback, data, destroy_data,
  56. "user", user, "server", server, static_cast<char*>(0) );
  57. }
  58. GnomeKeyring::GnomeKeyring()
  59. : QLibrary(QLatin1String("gnome-keyring"), 0)
  60. {
  61. static const PasswordSchema schema = {
  62. ITEM_NETWORK_PASSWORD,
  63. {{ "user", ATTRIBUTE_TYPE_STRING },
  64. { "server", ATTRIBUTE_TYPE_STRING },
  65. { "type", ATTRIBUTE_TYPE_STRING },
  66. { 0, static_cast<AttributeType>( 0 ) }}
  67. };
  68. NETWORK_PASSWORD = &schema;
  69. is_available = reinterpret_cast<is_available_fn*>( resolve( "gnome_keyring_is_available" ) );
  70. find_password = reinterpret_cast<find_password_fn*>( resolve( "gnome_keyring_find_password" ) );
  71. store_password = reinterpret_cast<store_password_fn*>( resolve( "gnome_keyring_store_password" ) );
  72. delete_password = reinterpret_cast<delete_password_fn*>( resolve( "gnome_keyring_delete_password" ) );
  73. }
  74. GnomeKeyring& GnomeKeyring::instance() {
  75. static GnomeKeyring keyring;
  76. return keyring;
  77. }