1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-09 07:36:48 +02:00

[playdar] Store certificate permanently

This commit is contained in:
Uwe L. Korn
2014-06-27 14:50:03 +01:00
parent a4c7a7fa1c
commit 4ff1d25608
3 changed files with 80 additions and 22 deletions

View File

@@ -19,6 +19,7 @@
#include "PlaydarApi_p.h" #include "PlaydarApi_p.h"
#include "qxtsslserver.h" #include "qxtsslserver.h"
#include "TomahawkSettings.h"
#include "Typedefs.h" #include "Typedefs.h"
#include "certificate/certificatebuilder.h" #include "certificate/certificatebuilder.h"
@@ -92,9 +93,25 @@ PlaydarApi::start()
d->tlsInstance.reset( new Api_v1( d->tlsSession.data() ) ); d->tlsInstance.reset( new Api_v1( d->tlsSession.data() ) );
d->tlsSession->setStaticContentService( d->tlsInstance.data() ); d->tlsSession->setStaticContentService( d->tlsInstance.data() );
// Generate a SSL certificate QByteArray settingsKey = TomahawkSettings::instance()->playdarKey();
QSslKey key = KeyBuilder::generate( QSsl::Rsa, KeyBuilder::StrengthNormal ); QSslKey key;
if ( settingsKey.isNull() || settingsKey.isEmpty() )
{
// Generate a SSL key
key = KeyBuilder::generate( QSsl::Rsa, KeyBuilder::StrengthNormal );
TomahawkSettings::instance()->setPlaydarKey( key.toPem() );
}
else
{
// Restore key
key = QSslKey( settingsKey, QSsl::Rsa );
}
QByteArray settingsCert = TomahawkSettings::instance()->playdarCertificate();
QSslCertificate cert;
if ( settingsCert.isNull() || settingsCert.isEmpty() )
{
// Generate a SSL certificate
CertificateRequestBuilder reqbuilder; CertificateRequestBuilder reqbuilder;
reqbuilder.setVersion( 1 ); reqbuilder.setVersion( 1 );
reqbuilder.setKey( key ); reqbuilder.setKey( key );
@@ -118,7 +135,13 @@ PlaydarApi::start()
builder.setKeyUsage( CertificateBuilder::UsageKeyAgreement|CertificateBuilder::UsageKeyEncipherment ); builder.setKeyUsage( CertificateBuilder::UsageKeyAgreement|CertificateBuilder::UsageKeyEncipherment );
builder.addSubjectKeyIdentifier(); builder.addSubjectKeyIdentifier();
QSslCertificate cert = builder.signedCertificate( key ); cert = builder.signedCertificate( key );
TomahawkSettings::instance()->setPlaydarCertificate( cert.toPem() );
}
else
{
cert = QSslCertificate( settingsCert );
}
QxtSslServer* sslServer = d->tlsConnector->tcpServer(); QxtSslServer* sslServer = d->tlsConnector->tcpServer();
sslServer->setPrivateKey( key ); sslServer->setPrivateKey( key );

View File

@@ -1643,3 +1643,31 @@ TomahawkSettings::removeAtticaResolverState ( const QString& resolver )
setValue( "script/atticaresolverstates", QVariant::fromValue< AtticaManager::StateHash >( resolvers ) ); setValue( "script/atticaresolverstates", QVariant::fromValue< AtticaManager::StateHash >( resolvers ) );
} }
QByteArray
TomahawkSettings::playdarCertificate() const
{
return value( "playdar/certificate").value< QByteArray >();
}
void
TomahawkSettings::setPlaydarCertificate( const QByteArray& cert )
{
setValue( "playdar/certificate", cert );
}
QByteArray
TomahawkSettings::playdarKey() const
{
return value( "playdar/key" ).value< QByteArray >();
}
void
TomahawkSettings::setPlaydarKey( const QByteArray& key )
{
setValue( "playdar/key", key );
}

View File

@@ -232,6 +232,13 @@ public:
void setAtticaResolverState( const QString& resolver, AtticaManager::ResolverState state ); void setAtticaResolverState( const QString& resolver, AtticaManager::ResolverState state );
void removeAtticaResolverState( const QString& resolver ); void removeAtticaResolverState( const QString& resolver );
// Playdar TLS Certificate and Key.
// TODO: Store in Keychain
QByteArray playdarCertificate() const;
void setPlaydarCertificate( const QByteArray& cert );
QByteArray playdarKey() const;
void setPlaydarKey( const QByteArray& key );
signals: signals:
void changed(); void changed();