diff --git a/STAR_unglue_it.ca-bundle b/STAR_unglue_it.ca-bundle new file mode 100755 index 00000000..253650e2 --- /dev/null +++ b/STAR_unglue_it.ca-bundle @@ -0,0 +1,83 @@ +-----BEGIN CERTIFICATE----- +MIIFAzCCA+ugAwIBAgIQGLLLuqME8aAPwfLzJkYqSjANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0xOTEyMzEyMzU5NTlaMHIxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVh +dGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9E +TyBDQSBMaW1pdGVkMRgwFgYDVQQDEw9Fc3NlbnRpYWxTU0wgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCt8AiwcsargxIxF3CJhakgEtSYau2A1NHf +5I5ZLdOWIY120j8YC0YZYwvHIPPlC92AGvFaoL0dds23Izp0XmEbdaqb1IX04XiR +0y3hr/yYLgbSeT1awB8hLRyuIVPGOqchfr7tZ291HRqfalsGs2rjsQuqag7nbWzD +ypWMN84hHzWQfdvaGlyoiBSyD8gSIF/F03/o4Tjg27z5H6Gq1huQByH6RSRQXScq +oChBRVt9vKCiL6qbfltTxfEFFld+Edc7tNkBdtzffRDPUanlOPJ7FAB1WfnwWdsX +Pvev5gItpHnBXaIcw5rIp6gLSApqLn8tl2X2xQScRMiZln5+pN0vAgMBAAGjggGD +MIIBfzAfBgNVHSMEGDAWgBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAdBgNVHQ4EFgQU +2svqrVsIXcz//CZUzknlVcY49PgwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQI +MAYBAf8CAQAwIAYDVR0lBBkwFwYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMD4GA1Ud +IAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21v +ZG8uY29tL0NQUzBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9kb2Nh +LmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBsBggrBgEFBQcB +AQRgMF4wNgYIKwYBBQUHMAKGKmh0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NvbW9k +b1VUTlNHQ0NBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2Eu +Y29tMA0GCSqGSIb3DQEBBQUAA4IBAQAtlzR6QDLqcJcvgTtLeRJ3rvuq1xqo2l/z +odueTZbLN3qo6u6bldudu+Ennv1F7Q5Slqz0J790qpL0pcRDAB8OtXj5isWMcL2a +ejGjKdBZa0wztSz4iw+SY1dWrCRnilsvKcKxudokxeRiDn55w/65g+onO7wdQ7Vu +F6r7yJiIatnyfKH2cboZT7g440LX8NqxwCPf3dfxp+0Jj1agq8MLy6SSgIGSH6lv ++Wwz3D5XxqfyH8wqfOQsTEZf6/Nh9yvENZ+NWPU6g0QO2JOsTGvMd/QDzczc4BxL +XSXaPV7Od4rhPsbXlM1wSTz/Dr0ISKvlUhQVnQ6cGodWaK2cCQBk +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEqzCCA5OgAwIBAgIQLnmDLpCIh+qLjvMabuZ6RDANBgkqhkiG9w0BAQUFADCB +kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw +IFNHQzAeFw0wNjEyMDEwMDAwMDBaFw0yMDA1MzAxMDQ4MzhaMIGBMQswCQYDVQQG +EwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxm +b3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RP +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZ +rts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAh +TaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23Iw +ambV4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVD +iOEjPqXSJDlqR6sA1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ +0o7KBWFxB3NH5YoZEr0ETc5OnKVIrLsm9wIDAQABo4IBCTCCAQUwHwYDVR0jBBgw +FoAUUzLRs89/+uDxoF2FTpLSnkUdtE8wHQYDVR0OBBYEFAtY5YvGTBU3pECpMKkh +vkc2Wlb/MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MCAGA1UdJQQZ +MBcGCisGAQQBgjcKAwMGCWCGSAGG+EIEATARBgNVHSAECjAIMAYGBFUdIAAwbQYD +VR0fBGYwZDAxoC+gLYYraHR0cDovL2NybC5jb21vZG9jYS5jb20vVVROLURBVEFD +b3JwU0dDLmNybDAvoC2gK4YpaHR0cDovL2NybC5jb21vZG8ubmV0L1VUTi1EQVRB +Q29ycFNHQy5jcmwwDQYJKoZIhvcNAQEFBQADggEBANheksSuFNxDrcKkw2dFBx35 +N6IZxxw3NZETHAfEfUKmDvCGXENrDkTPviRhOkKpzp1Mr3k5cN0OBCBOlZw83rdg +umNDQO1qD4FJRrsek8BL8/jhNkkbb7YMDfKQV4r8bZPyKMf6hgoosxcOWYoutr/N +4axMZmzyVZFWtzK/seR9teg6ti/bspzaUJOOTsWsmn5cnhI8O03GUHCzZSuO92uh +uyXAALv17BZlgQ771KMhlneaqHS8U6rCOVD/CwIJYcyVt9eIavZcxWjTFJUaR1/Z ++y3kL48ThqsxE0ATrG7ttRAwixtQqc7ujMrrfLW5Fj3U+m+SbR6ivfsCSsVwvvE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEpjCCA46gAwIBAgIQRurwlgVMxeP6Zepun0LGZDANBgkqhkiG9w0BAQUFADBv +MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk +ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF +eHRlcm5hbCBDQSBSb290MB4XDTA1MDYwNzA4MDkxMFoXDTIwMDUzMDEwNDgzOFow +gZMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtl +IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMY +aHR0cDovL3d3dy51c2VydHJ1c3QuY29tMRswGQYDVQQDExJVVE4gLSBEQVRBQ29y +cCBTR0MwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDf7lgQoituVcSO +vy5GCefgCA8uK3oTlBu99raAjmUFkwAevK/iD44ZDRJH7Kyto/oucPjebvtWQhWe +LlzvI94huQV2JxkPT9bDnLS+lBlj8qYRCutTSJy+8ik7FugaoEymyfQYWWjAcPJT +AMBeUIKlVm82+UrgRIagTU7WR25JSstn16bEBbmOHvT8/83nNuCcBWyyMyIV0LTg +zBfAssD0/jI/KSqVe9jyp04PVHyhDYCzCQPB/1zdXpo+vK68R4pqrnHKH7EquF9C +BQvsRjDRcgvK6VZt9e/feL5hurKlrgRMvKisaRWXve/rtIy/NfjUw9EoDlw6n3AY +MyB3xKKvAgMBAAGjggEXMIIBEzAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTvA73g +JMtUGjAdBgNVHQ4EFgQUUzLRs89/+uDxoF2FTpLSnkUdtE8wDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wIAYDVR0lBBkwFwYKKwYBBAGCNwoDAwYJYIZI +AYb4QgQBMBEGA1UdIAQKMAgwBgYEVR0gADB7BgNVHR8EdDByMDigNqA0hjJodHRw +Oi8vY3JsLmNvbW9kb2NhLmNvbS9BZGRUcnVzdEV4dGVybmFsQ0FSb290LmNybDA2 +oDSgMoYwaHR0cDovL2NybC5jb21vZG8ubmV0L0FkZFRydXN0RXh0ZXJuYWxDQVJv +b3QuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQBjhpIQsRP6N76OKrYbikP1XK4OFN/3 +aUB/vxpxAAnYv9QkSr/gk/8B2AvGD+x+R5ywXfd8FJ38wDOShFvSg/RS4iJYdPxD +Gz+no1jaA/288Drk7cwSu8m5rnsEoARyv+neLdKnUWYAc9K9fqqeU5Z9abIYPo6t +VlB+99Ww/zliZYKMllfDj/dg9sKNNIf8T0Pl278cqvaGzebfET+NB/dtgxPAOIg5 +YKF+MOHjiD6ku2NvLOmKaCzulmmsBGHhT04OnXJM9nk4yMdIaW+UD3S0vMjPV025 +dXGWDYoGC+vd0PA8fcYumEZqOMcCtci4smV13tqQCLZ3uFMAJctHynNf +-----END CERTIFICATE----- diff --git a/core/models.py b/core/models.py index ad0212a5..09ade99a 100755 --- a/core/models.py +++ b/core/models.py @@ -790,6 +790,18 @@ class Work(models.Model): if self.ebooks().filter(edition__unglued=True): return True return False + + @property + def user_with_rights(self): + """ + return queryset of users (should be at most one) who act for rights holders with active claims to the work + """ + claims = self.claim.filter(status='active') + assert claims.count() < 2, "There is more than one active claim on %r" % self.title + try: + return claims[0].user + except: + return False class Author(models.Model): created = models.DateTimeField(auto_now_add=True) diff --git a/deploy/just.conf b/deploy/just.conf index 82f02880..dec75f37 100644 --- a/deploy/just.conf +++ b/deploy/just.conf @@ -3,15 +3,15 @@ WSGISocketPrefix /opt/regluit -ServerName just.unglueit.com +ServerName just.unglue.it ServerAdmin info@gluejar.com RewriteEngine On -RewriteRule ^/$ https://just.unglueit.com/ [R=301] -RewriteRule /admin(.*) https://just.unglueit.com/admin$1 [R=301] -RewriteRule /accounts(.*) https://just.unglueit.com/accounts$1 [R=301] -RewriteRule /pledge(.*) https://just.unglueit.com/pledge$1 [R=301] -RewriteRule /donation(.*) https://just.unglueit.com/donation$1 [R=301] +RewriteRule ^/$ https://just.unglue.it/ [R=301] +RewriteRule /admin(.*) https://just.unglue.it/admin$1 [R=301] +RewriteRule /accounts(.*) https://just.unglue.it/accounts$1 [R=301] +RewriteRule /pledge(.*) https://just.unglue.it/pledge$1 [R=301] +RewriteRule /donation(.*) https://just.unglue.it/donation$1 [R=301] WSGIDaemonProcess regluit processes=4 threads=4 python-eggs=/tmp/regluit-python-eggs WSGIScriptAlias / /opt/regluit/deploy/just.wsgi @@ -34,7 +34,7 @@ Alias /static /var/www/static SSLEngine on SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key -#SSLCertificateChainFile /etc/ssl/certs/gd_bundle.crt +SSLCertificateChainFile /etc/ssl/certs/STAR_unglue_it.ca-bundle WSGIDaemonProcess regluit-ssl processes=4 threads=4 python-eggs=/tmp/regluit-python-eggs WSGIScriptAlias / /opt/regluit/deploy/just.wsgi diff --git a/deploy/prod.conf b/deploy/prod.conf index f610edca..e63ec2a1 100644 --- a/deploy/prod.conf +++ b/deploy/prod.conf @@ -41,7 +41,7 @@ CustomLog ${APACHE_LOG_DIR}/unglue.it-access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key -SSLCertificateChainFile /etc/ssl/certs/gd_bundle.crt +SSLCertificateChainFile /etc/ssl/certs/STAR_unglue_it.ca-bundle RewriteEngine On diff --git a/frontend/templates/rh_tools.html b/frontend/templates/rh_tools.html index f741164d..28a454fc 100644 --- a/frontend/templates/rh_tools.html +++ b/frontend/templates/rh_tools.html @@ -20,6 +20,19 @@ Any questions not covered here? Please email us at rights@gluejar.com. +

Getting started

+

+ How to claim your work (screencast) +

+ +

+ How to set up your campaign (screencast) +

+ +

+ How to embed a widget for your book in your blog, web site, etc. (screencast) +

+ {% if campaigns %}

Campaigns You Manage

diff --git a/frontend/templates/work.html b/frontend/templates/work.html index b5e21664..0eaeadc6 100644 --- a/frontend/templates/work.html +++ b/frontend/templates/work.html @@ -40,8 +40,24 @@ $j(document).ready(function(){ {% endblock %} {% block topsection %} -{% if request.user in work.last_campaign.managers.all and work.last_campaign.status != 'SUCCESSFUL' %} -
Hi, {{ request.user.username }}. Since you're a manager for this campaign, you can edit this campaign.
+{% if work.last_campaign.status == 'ACTIVE' %} + {% if request.user in work.last_campaign.managers.all %} +
Hi, {{ request.user.username }}. Since you're a manager for this campaign, you can edit this campaign.
+ {% endif %} +{% else %} + {% if not work.user_with_rights %} + {% if request.user.rights_holder.all %} +
Hi, {{ request.user.username }}. Since you're an authorized Unglue.it rights holder, if you own the worldwide electronic rights to this work, you may claim it through the Rights tab. Need help? There's a screencast of the process at the rights holder tools page.
+ {% endif %} + {% else %} + {% if request.user == work.user_with_rights %} + {% ifequal work.last_campaign.status 'SUCCESSFUL' %} +
Congratulations, {{ request.user.username }}; you successfully unglued this work! What are your plans for publicity and distribution? We're happy to brainstorm with you about next steps.
+ {% else %} +
Hi, {{ request.user.username }}. Since you're a rights holder for this work, you can launch a campaign.
+ {% endifequal %} + {% endif %} + {% endif %} {% endif %} {% endblock %} diff --git a/static/images/How_to_claim_your_work.mp4 b/static/images/How_to_claim_your_work.mp4 new file mode 100644 index 00000000..5b9ae627 Binary files /dev/null and b/static/images/How_to_claim_your_work.mp4 differ diff --git a/static/images/How_to_embed_a_widget.mp4 b/static/images/How_to_embed_a_widget.mp4 new file mode 100644 index 00000000..49cd458d Binary files /dev/null and b/static/images/How_to_embed_a_widget.mp4 differ diff --git a/static/images/How_to_set_up_your_campaign.mp4 b/static/images/How_to_set_up_your_campaign.mp4 new file mode 100644 index 00000000..5335e6ee Binary files /dev/null and b/static/images/How_to_set_up_your_campaign.mp4 differ diff --git a/sysadmin/gen_csr.sh b/sysadmin/gen_csr.sh new file mode 100755 index 00000000..afbb9d87 --- /dev/null +++ b/sysadmin/gen_csr.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# gen_csr.sh - Generate CSR for a host name. + +HOSTNAME="$1"; + +if [ -z "${HOSTNAME}" ]; then +echo "Usage : gen_csr.sh HOSTNAME"; +exit; +fi + +# Country Name (2 letter code) [GB]:. +# State or Province Name (full name) [Berkshire]:. +# Locality Name (eg, city) [Newbury]:. +# Organization Name (eg, company) [My Company Ltd]:. +# Organizational Unit Name (eg, section) []:. +# Common Name (eg, your name or your server's hostname) []:. +# Email Address []:. +# A challenge password []: +# An optional company name []: + +COUNTRY="US"; +STATE="NJ"; +LOCALITY="Montclair"; +ORGNAME="Gluejar, Inc."; +ORGUNIT=""; +CNAME=$HOSTNAME; +EMAIL="support@gluejar.com"; +PASSWORD=""; +OPTION_COMPANY_NAME=""; + +echo "$COUNTRY +$STATE +$LOCALITY +$ORGNAME +$ORGUNIT +$CNAME +$EMAIL +$PASSWORD +$OPTIONAL_COMPANY_NAME" | openssl req -new -key $HOSTNAME.key -out $HOSTNAME.csr +