mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-04-21 08:21:54 +02:00
[playdar] Store certificate permanently
This commit is contained in:
parent
a4c7a7fa1c
commit
4ff1d25608
@ -19,6 +19,7 @@
|
||||
#include "PlaydarApi_p.h"
|
||||
|
||||
#include "qxtsslserver.h"
|
||||
#include "TomahawkSettings.h"
|
||||
#include "Typedefs.h"
|
||||
|
||||
#include "certificate/certificatebuilder.h"
|
||||
@ -92,33 +93,55 @@ PlaydarApi::start()
|
||||
d->tlsInstance.reset( new Api_v1( d->tlsSession.data() ) );
|
||||
d->tlsSession->setStaticContentService( d->tlsInstance.data() );
|
||||
|
||||
// Generate a SSL certificate
|
||||
QSslKey key = KeyBuilder::generate( QSsl::Rsa, KeyBuilder::StrengthNormal );
|
||||
QByteArray settingsKey = TomahawkSettings::instance()->playdarKey();
|
||||
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 );
|
||||
}
|
||||
|
||||
CertificateRequestBuilder reqbuilder;
|
||||
reqbuilder.setVersion( 1 );
|
||||
reqbuilder.setKey( key );
|
||||
reqbuilder.addNameEntry( Certificate::EntryCountryName, "GB" );
|
||||
reqbuilder.addNameEntry( Certificate::EntryOrganizationName, "Tomahawk Player (Desktop)" );
|
||||
reqbuilder.addNameEntry( Certificate::EntryCommonName, "localhost" );
|
||||
QByteArray settingsCert = TomahawkSettings::instance()->playdarCertificate();
|
||||
QSslCertificate cert;
|
||||
if ( settingsCert.isNull() || settingsCert.isEmpty() )
|
||||
{
|
||||
// Generate a SSL certificate
|
||||
CertificateRequestBuilder reqbuilder;
|
||||
reqbuilder.setVersion( 1 );
|
||||
reqbuilder.setKey( key );
|
||||
reqbuilder.addNameEntry( Certificate::EntryCountryName, "GB" );
|
||||
reqbuilder.addNameEntry( Certificate::EntryOrganizationName, "Tomahawk Player (Desktop)" );
|
||||
reqbuilder.addNameEntry( Certificate::EntryCommonName, "localhost" );
|
||||
|
||||
// Sign the request
|
||||
CertificateRequest req = reqbuilder.signedRequest(key);
|
||||
// Sign the request
|
||||
CertificateRequest req = reqbuilder.signedRequest(key);
|
||||
|
||||
// Now make a certificate
|
||||
CertificateBuilder builder;
|
||||
builder.setRequest( req );
|
||||
// Now make a certificate
|
||||
CertificateBuilder builder;
|
||||
builder.setRequest( req );
|
||||
|
||||
builder.setVersion( 3 );
|
||||
builder.setSerial( uuid().toLatin1() );
|
||||
builder.setActivationTime( QDateTime::currentDateTimeUtc());
|
||||
builder.setExpirationTime( QDateTime::currentDateTimeUtc().addYears( 10 ) );
|
||||
builder.setBasicConstraints( false );
|
||||
builder.addKeyPurpose( CertificateBuilder::PurposeWebServer );
|
||||
builder.setKeyUsage( CertificateBuilder::UsageKeyAgreement|CertificateBuilder::UsageKeyEncipherment );
|
||||
builder.addSubjectKeyIdentifier();
|
||||
builder.setVersion( 3 );
|
||||
builder.setSerial( uuid().toLatin1() );
|
||||
builder.setActivationTime( QDateTime::currentDateTimeUtc());
|
||||
builder.setExpirationTime( QDateTime::currentDateTimeUtc().addYears( 10 ) );
|
||||
builder.setBasicConstraints( false );
|
||||
builder.addKeyPurpose( CertificateBuilder::PurposeWebServer );
|
||||
builder.setKeyUsage( CertificateBuilder::UsageKeyAgreement|CertificateBuilder::UsageKeyEncipherment );
|
||||
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();
|
||||
sslServer->setPrivateKey( key );
|
||||
|
@ -1643,3 +1643,31 @@ TomahawkSettings::removeAtticaResolverState ( const QString& resolver )
|
||||
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 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:
|
||||
void changed();
|
||||
|
Loading…
x
Reference in New Issue
Block a user