void NetworkStorageSession::saveCredentialToPersistentStorage(const ProtectionSpace& protectionSpace, const Credential& credential) { #if USE(LIBSECRET) if (m_sessionID.isEphemeral()) return; if (credential.isEmpty()) return; const String& realm = protectionSpace.realm(); if (realm.isEmpty()) return; GRefPtr<GHashTable> attributes = adoptGRef(secret_attributes_build(SECRET_SCHEMA_COMPAT_NETWORK, "domain", realm.utf8().data(), "server", protectionSpace.host().utf8().data(), "port", protectionSpace.port(), "protocol", schemeFromProtectionSpaceServerType(protectionSpace.serverType()), "authtype", authTypeFromProtectionSpaceAuthenticationScheme(protectionSpace.authenticationScheme()), nullptr)); if (!attributes) return; g_hash_table_insert(attributes.get(), g_strdup("user"), g_strdup(credential.user().utf8().data())); CString utf8Password = credential.password().utf8(); GRefPtr<SecretValue> newSecretValue = adoptGRef(secret_value_new(utf8Password.data(), utf8Password.length(), "text/plain")); secret_service_store(nullptr, SECRET_SCHEMA_COMPAT_NETWORK, attributes.get(), SECRET_COLLECTION_DEFAULT, _("WebKitGTK+ password"), newSecretValue.get(), nullptr, nullptr, nullptr); #else UNUSED_PARAM(protectionSpace); UNUSED_PARAM(credential); #endif }
static SecretValue * service_decode_plain_secret (SecretSession *session, gconstpointer param, gsize n_param, gconstpointer value, gsize n_value, const gchar *content_type) { if (n_param != 0) { g_message ("received a plain secret structure with invalid parameter"); return NULL; } return secret_value_new (value, n_value, content_type); }