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:
@@ -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 );
|
||||||
|
@@ -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 );
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user