aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediagoblin/auth/views.py20
-rw-r--r--mediagoblin/config_spec.ini2
-rw-r--r--mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mobin11549 -> 11461 bytes
-rw-r--r--mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mobin10915 -> 10827 bytes
-rw-r--r--mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po21
-rw-r--r--mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mobin10738 -> 10686 bytes
-rw-r--r--mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po46
-rw-r--r--mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mobin11114 -> 11175 bytes
-rw-r--r--mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po42
-rw-r--r--mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mobin11232 -> 11144 bytes
-rw-r--r--mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mobin0 -> 10898 bytes
-rw-r--r--mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po520
-rw-r--r--mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mobin11184 -> 11096 bytes
-rw-r--r--mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mobin10655 -> 10567 bytes
-rw-r--r--mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mobin10261 -> 10173 bytes
-rw-r--r--mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mobin10608 -> 10520 bytes
-rw-r--r--mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mobin10955 -> 10905 bytes
-rw-r--r--mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po50
-rw-r--r--mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mobin13306 -> 13546 bytes
-rw-r--r--mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po45
-rw-r--r--mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mobin10724 -> 10636 bytes
-rw-r--r--mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mobin10587 -> 10499 bytes
-rw-r--r--mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mobin10836 -> 10748 bytes
-rw-r--r--mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mobin10463 -> 10375 bytes
-rw-r--r--mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po19
-rw-r--r--mediagoblin/middleware/__init__.py1
-rw-r--r--mediagoblin/middleware/csrf.py135
-rw-r--r--mediagoblin/templates/mediagoblin/auth/fp_changed_success.html4
-rw-r--r--mediagoblin/templates/mediagoblin/auth/fp_email_sent.html4
-rw-r--r--mediagoblin/templates/mediagoblin/auth/login.html1
-rw-r--r--mediagoblin/templates/mediagoblin/auth/register.html1
-rw-r--r--mediagoblin/templates/mediagoblin/edit/attachments.html1
-rw-r--r--mediagoblin/templates/mediagoblin/edit/edit.html1
-rw-r--r--mediagoblin/templates/mediagoblin/edit/edit_profile.html1
-rw-r--r--mediagoblin/templates/mediagoblin/root.html4
-rw-r--r--mediagoblin/templates/mediagoblin/submit/start.html1
-rw-r--r--mediagoblin/templates/mediagoblin/test_submit.html1
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/media.html1
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html1
-rw-r--r--mediagoblin/templates/mediagoblin/utils/pagination.html4
-rw-r--r--mediagoblin/templates/mediagoblin/utils/prev_next.html8
-rw-r--r--mediagoblin/tests/test_csrf_middleware.py69
-rw-r--r--mediagoblin/util.py3
-rw-r--r--paste.ini2
54 files changed, 935 insertions, 263 deletions
diff --git a/mediagoblin/auth/views.py b/mediagoblin/auth/views.py
index f67f0588..b6f38fec 100644
--- a/mediagoblin/auth/views.py
+++ b/mediagoblin/auth/views.py
@@ -30,6 +30,19 @@ from mediagoblin.auth.lib import send_verification_email, \
send_fp_verification_email
+def email_debug_message(request):
+ """
+ If the server is running in email debug mode (which is
+ the current default), give a debug message to the user
+ so that they have an idea where to find their email.
+ """
+ if mg_globals.app_config['email_debug_mode']:
+ # DEBUG message, no need to translate
+ messages.add_message(request, messages.DEBUG,
+ u"This instance is running in email debug mode. "
+ u"The email will be on the console of the server process.")
+
+
def register(request):
"""
Your classic registration view!
@@ -78,6 +91,7 @@ def register(request):
request.session.save()
# send verification email
+ email_debug_message(request)
send_verification_email(user, request)
# redirect the user to their homepage... there will be a
@@ -184,6 +198,7 @@ def resend_activation(request):
request.user[u'verification_key'] = unicode(uuid.uuid4())
request.user.save()
+ email_debug_message(request)
send_verification_email(request.user, request)
messages.add_message(
@@ -204,6 +219,11 @@ def forgot_password(request):
fp_form = auth_forms.ForgotPassForm(request.POST)
if request.method == 'POST' and fp_form.validate():
+
+ # Here, so it doesn't depend on the actual mail being sent
+ # and thus doesn't reveal, wether mail was sent.
+ email_debug_message(request)
+
# '$or' not available till mongodb 1.5.3
user = request.db.User.find_one(
{'username': request.POST['username']})
diff --git a/mediagoblin/config_spec.ini b/mediagoblin/config_spec.ini
index 0801b39e..298a6951 100644
--- a/mediagoblin/config_spec.ini
+++ b/mediagoblin/config_spec.ini
@@ -41,6 +41,8 @@ celery_setup_elsewhere = boolean(default=False)
# source files for a media file but can also be a HUGE security risk.
allow_attachments = boolean(default=False)
+# Cookie stuff
+csrf_cookie_name = string(default='mediagoblin_nonce')
[storage:publicstore]
storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage")
diff --git a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo
index 146a588f..1d75d517 100644
--- a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po
index eb1c5f2d..b5057b9d 100644
--- a/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ar/LC_MESSAGES/mediagoblin.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -242,11 +242,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -262,17 +260,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo
index bb7538c2..06a01632 100644
--- a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po
index 3aaabce0..81462e27 100644
--- a/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/de/LC_MESSAGES/mediagoblin.po
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: German (http://www.transifex.net/projects/p/mediagoblin/team/de/)\n"
"MIME-Version: 1.0\n"
@@ -261,11 +261,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -281,17 +279,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po
index 6ff8e8df..16a235a2 100644
--- a/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -233,14 +233,12 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" "
-"href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a "
+"free account</a>\n"
" or\n"
" <a class=\"header_submit\" "
"href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on "
-"your own server</a>\n"
-" "
+"your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -256,18 +254,11 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
-msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your "
-"password.\n"
-" "
+msgid "Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo
index b260cb16..506e882b 100644
--- a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po
index 296f1b4b..270b043f 100644
--- a/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/eo/LC_MESSAGES/mediagoblin.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -193,8 +193,8 @@ msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
msgstr ""
-"Funkcias per &lt;a href=\"http://mediagoblin.org\"&gt;MediaGoblin&lt;/a&gt;,"
-" unu el la &lt;a href=\"http://gnu.org/\"&gt;projektoj de GNU&lt;/a&gt;"
+"Funkcias per <a href=\"http://mediagoblin.org\">MediaGoblin</a>, unu el la "
+"<a href=\"http://gnu.org/\">projektoj de GNU</a>"
#: mediagoblin/templates/mediagoblin/root.html:24
msgid "Explore"
@@ -244,9 +244,9 @@ msgid ""
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
" software!</a>)"
msgstr ""
-"Vivanta per homoj kiel vi. (&lt;a "
-"href=\"http://mediagoblin.org/pages/join.html\"&gt;Vi povas helpi al ni "
-"plibonigi la programon!&lt;/a&gt;)"
+"Vivanta per homoj kiel vi. (<a "
+"href=\"http://mediagoblin.org/pages/join.html\">Vi povas helpi al ni "
+"plibonigi la programon!</a>)"
#: mediagoblin/templates/mediagoblin/root.html:38
msgid "Excited to join us?"
@@ -255,37 +255,30 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
msgid "Most recent media"
-msgstr ""
+msgstr "Plej nove aldonitaj dosieroj"
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
msgid "Enter your new password"
-msgstr ""
+msgstr "Enigu vian novan pasvorton"
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
msgid "Enter your username or email"
-msgstr ""
+msgstr "Enigu vian salutnomon aŭ retpoŝtadreson"
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
@@ -301,6 +294,13 @@ msgid ""
"If you think this is an error, just ignore this email and continue being\n"
"a happy goblin!"
msgstr ""
+"Saluton, %(username)s,\n"
+"\n"
+"por ŝanĝi vian pasvorton ĉe GNUa MediaGoblin, sekvu la jenan retadreson per via TTT-legilo:\n"
+"\n"
+"%(verification_url)s\n"
+"\n"
+"Se vi pensas, ke ĉi tiu retletero estas sendita erare, simple ignoru ĝin kaj plu restu feliĉa koboldo!"
#: mediagoblin/templates/mediagoblin/auth/login.html:29
msgid "Logging in failed!"
@@ -316,11 +316,11 @@ msgstr "Kreu ĝin ĉi tie!"
#: mediagoblin/templates/mediagoblin/auth/login.html:48
msgid "Forgot your password?"
-msgstr ""
+msgstr "Ĉu vi forgesis vian pasvorton?"
#: mediagoblin/templates/mediagoblin/auth/login.html:51
msgid "Change it!"
-msgstr ""
+msgstr "Ŝanĝu ĝin!"
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
diff --git a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo
index 7c7dea0d..2e64b814 100644
--- a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po
index 85da5dbe..083a87a5 100644
--- a/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/es/LC_MESSAGES/mediagoblin.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mediagoblin/team/es/)\n"
"MIME-Version: 1.0\n"
@@ -82,6 +82,9 @@ msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
msgstr ""
+"No se pudo enviar un correo electrónico de recuperación de contraseñas "
+"porque su nombre de usuario está inactivo o la dirección de su cuenta de "
+"correo electrónico no ha sido verificada."
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
msgid "Title"
@@ -197,10 +200,12 @@ msgid ""
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
"href=\"http://gnu.org/\">GNU</a> project"
msgstr ""
+"Potenciado por <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
+"href=\"http://gnu.org/\">GNU</a> project"
#: mediagoblin/templates/mediagoblin/root.html:24
msgid "Explore"
-msgstr ""
+msgstr "Explorar"
#: mediagoblin/templates/mediagoblin/root.html:27
msgid "Hi there, media lover! MediaGoblin is..."
@@ -253,42 +258,35 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:38
msgid "Excited to join us?"
-msgstr ""
+msgstr "Te emociona trabajar con nosotros?"
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
msgid "Most recent media"
-msgstr ""
+msgstr "El contenido más reciente"
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
msgid "Enter your new password"
-msgstr ""
+msgstr "Ingrese su nueva contraseña"
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
msgid "Enter your username or email"
-msgstr ""
+msgstr "Introduzca su nombre de usuario o correo electrónico"
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
@@ -304,6 +302,10 @@ msgid ""
"If you think this is an error, just ignore this email and continue being\n"
"a happy goblin!"
msgstr ""
+"Hola %(username)s , para cambiar su contraseña de GNU MediaGoblin, abra lal "
+"siguiente URL en su navegador: %(verification_url)s Si usted piensa que "
+"esto es un error, simplemente ignore este mensaje y siga siendo un duende "
+"feliz!"
#: mediagoblin/templates/mediagoblin/auth/login.html:29
msgid "Logging in failed!"
@@ -319,11 +321,11 @@ msgstr "¡Crea una aquí!"
#: mediagoblin/templates/mediagoblin/auth/login.html:48
msgid "Forgot your password?"
-msgstr ""
+msgstr "¿Olvidaste tu contraseña?"
#: mediagoblin/templates/mediagoblin/auth/login.html:51
msgid "Change it!"
-msgstr ""
+msgstr "Cambiarlo!"
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
diff --git a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo
index baab45ab..5b3adb77 100644
--- a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po
index 032399d6..a9b9f160 100644
--- a/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/fr/LC_MESSAGES/mediagoblin.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -263,11 +263,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -283,17 +281,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo
new file mode 100644
index 00000000..9a010192
--- /dev/null
+++ b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po
new file mode 100644
index 00000000..67db7ca2
--- /dev/null
+++ b/mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po
@@ -0,0 +1,520 @@
+# Translations template for PROJECT.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+#
+# Translators:
+# <robi@nunnisoft.ch>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU MediaGoblin\n"
+"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
+"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
+msgid "Username"
+msgstr "Nome utente"
+
+#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
+msgid "Password"
+msgstr "Password"
+
+#: mediagoblin/auth/forms.py:35
+msgid "Passwords must match."
+msgstr "Le password devono coincidere"
+
+#: mediagoblin/auth/forms.py:37
+msgid "Confirm password"
+msgstr "Conferma password"
+
+#: mediagoblin/auth/forms.py:39
+msgid "Type it again here to make sure there are no spelling mistakes."
+msgstr "Scrivilo ancora qui per assicurarti che non ci siano errori"
+
+#: mediagoblin/auth/forms.py:42
+msgid "Email address"
+msgstr "Indirizzo email"
+
+#: mediagoblin/auth/views.py:42
+msgid "Sorry, registration is disabled on this instance."
+msgstr "Spiacente, registrazione è disabilitata su questa istanza"
+
+#: mediagoblin/auth/views.py:60
+msgid "Sorry, a user with that name already exists."
+msgstr "Spiacente, esiste già un utente con quel nome"
+
+#: mediagoblin/auth/views.py:64
+msgid "Sorry, that email address has already been taken."
+msgstr "Spiacente, quell'indirizzo email è già stato preso."
+
+#: mediagoblin/auth/views.py:165
+msgid ""
+"Your email address has been verified. You may now login, edit your profile, "
+"and submit images!"
+msgstr ""
+"Il tuo indirizzo email è stato verificato. Puoi ora fare login, modificare "
+"il tuo profilo, e inserire immagini!"
+
+#: mediagoblin/auth/views.py:171
+msgid "The verification key or user id is incorrect"
+msgstr "La chiave di verifica o l'id utente è sbagliato"
+
+#: mediagoblin/auth/views.py:192
+msgid "Resent your verification email."
+msgstr "Rispedisci email di verifica"
+
+#: mediagoblin/auth/views.py:228
+msgid ""
+"Could not send password recovery email as your username is inactive or your "
+"account's email address has not been verified."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
+msgid "Title"
+msgstr "Titolo"
+
+#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
+msgid "Tags"
+msgstr "Tags"
+
+#: mediagoblin/edit/forms.py:33
+msgid "Slug"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:34
+msgid "The slug can't be empty"
+msgstr ""
+
+#: mediagoblin/edit/forms.py:35
+msgid ""
+"The title part of this media's URL. You usually don't need to change this."
+msgstr ""
+
+#: mediagoblin/edit/forms.py:42
+msgid "Bio"
+msgstr "Bio"
+
+#: mediagoblin/edit/forms.py:45
+msgid "Website"
+msgstr "Sito web"
+
+#: mediagoblin/edit/views.py:63
+msgid "An entry with that slug already exists for this user."
+msgstr ""
+
+#: mediagoblin/edit/views.py:84
+msgid "You are editing another user's media. Proceed with caution."
+msgstr ""
+"Stai modificando documenti multimediale di un altro utente. Procedi con "
+"attenzione."
+
+#: mediagoblin/edit/views.py:154
+msgid "You are editing a user's profile. Proceed with caution."
+msgstr "Stai modificando il profilo di un utente. Procedi con attenzione."
+
+#: mediagoblin/process_media/errors.py:44
+msgid "Invalid file given for media type."
+msgstr "documento non valido come tipo multimediale."
+
+#: mediagoblin/submit/forms.py:25
+msgid "File"
+msgstr "Documento"
+
+#: mediagoblin/submit/forms.py:30
+msgid "Description of this work"
+msgstr "Descrizione di questo lavoro"
+
+#: mediagoblin/submit/views.py:47
+msgid "You must provide a file."
+msgstr "Devi specificare un documento."
+
+#: mediagoblin/submit/views.py:50
+msgid "The file doesn't seem to be an image!"
+msgstr "Il documento non sembra essere un'immagine!"
+
+#: mediagoblin/submit/views.py:122
+msgid "Woohoo! Submitted!"
+msgstr "Evviva! "
+
+#: mediagoblin/templates/mediagoblin/404.html:21
+msgid "Oops!"
+msgstr "Oops!"
+
+#: mediagoblin/templates/mediagoblin/404.html:24
+msgid "There doesn't seem to be a page at this address. Sorry!"
+msgstr "Non sembra esserci una pagina a questo indirizzo. Spiacente!"
+
+#: mediagoblin/templates/mediagoblin/404.html:26
+msgid ""
+"If you're sure the address is correct, maybe the page you're looking for has"
+" been moved or deleted."
+msgstr ""
+"Se sei sicuro che l'indirizzo è corretto, forse la pagina che stai cercando "
+"è stata spostata o cancellata."
+
+#: mediagoblin/templates/mediagoblin/404.html:32
+msgid "Image of 404 goblin stressing out"
+msgstr "Immagine di 404 folletti che stressano"
+
+#: mediagoblin/templates/mediagoblin/base.html:22
+msgid "GNU MediaGoblin"
+msgstr "GNU MediaGoblin"
+
+#: mediagoblin/templates/mediagoblin/base.html:47
+msgid "MediaGoblin logo"
+msgstr "MediaGoblin logo"
+
+#: mediagoblin/templates/mediagoblin/base.html:52
+msgid "Submit media"
+msgstr "Inoltra file multimediale"
+
+#: mediagoblin/templates/mediagoblin/base.html:63
+msgid "verify your email!"
+msgstr "verifica il tuo indirizzo email!"
+
+#: mediagoblin/templates/mediagoblin/base.html:73
+#: mediagoblin/templates/mediagoblin/auth/login.html:26
+#: mediagoblin/templates/mediagoblin/auth/login.html:34
+msgid "Log in"
+msgstr "Accedi"
+
+#: mediagoblin/templates/mediagoblin/base.html:89
+msgid ""
+"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
+"href=\"http://gnu.org/\">GNU</a> project"
+msgstr ""
+"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, un progetto "
+"<a href=\"http://gnu.org/\">GNU</a>"
+
+#: mediagoblin/templates/mediagoblin/root.html:24
+msgid "Explore"
+msgstr "Esplora"
+
+#: mediagoblin/templates/mediagoblin/root.html:27
+msgid "Hi there, media lover! MediaGoblin is..."
+msgstr "Ciao, amante del multimedia! MediaGoblin è..."
+
+#: mediagoblin/templates/mediagoblin/root.html:29
+msgid "The perfect place for your media!"
+msgstr "Il posto perfetto per i tuoi documenti multimediali!"
+
+#: mediagoblin/templates/mediagoblin/root.html:30
+msgid ""
+"A place for people to collaborate and show off original and derived "
+"creations!"
+msgstr ""
+"Un posto per collaborare con altri e mostrare le proprie creazioni originali"
+" e derivate!"
+
+#: mediagoblin/templates/mediagoblin/root.html:31
+msgid ""
+"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
+"after all.)"
+msgstr ""
+"Libero, come in libertà. (Siamo un progetto <a "
+"href=\"http://gnu.org\">GNU</a>, dopotutto.)"
+
+#: mediagoblin/templates/mediagoblin/root.html:32
+msgid ""
+"Aiming to make the world a better place through decentralization and "
+"(eventually, coming soon!) federation!"
+msgstr ""
+"Con l'obbiettivo di rendere il mondo un posto migliore attraverso la "
+"decentrelizzazione e (finalmente, presto!) federazione!"
+
+#: mediagoblin/templates/mediagoblin/root.html:33
+msgid ""
+"Built for extensibility. (Multiple media types coming soon to the software,"
+" including video support!)"
+msgstr ""
+"Fatto per estensibilità. (Numerosi tipi multimediali saranno presto aggiunti"
+" al programma, incluso il supporto video!)"
+
+#: mediagoblin/templates/mediagoblin/root.html:34
+msgid ""
+"Powered by people like you. (<a "
+"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
+" software!</a>)"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/root.html:38
+msgid "Excited to join us?"
+msgstr "Eccitato di unirti a noi?"
+
+#: mediagoblin/templates/mediagoblin/root.html:39
+#, python-format
+msgid ""
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+" or\n"
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/root.html:53
+msgid "Most recent media"
+msgstr "Documenti multimediali più recenti"
+
+#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
+msgid "Enter your new password"
+msgstr "Inserisci la tua nuova password"
+
+#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
+msgid "Enter your username or email"
+msgstr "Inserisci il tuo nome utente o email"
+
+#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
+msgid "Your password has been changed. Try to log in now."
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
+msgid ""
+"Check your inbox. We sent an email with a URL for changing your password."
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
+#, python-format
+msgid ""
+"Hi %(username)s,\n"
+"\n"
+"to change your GNU MediaGoblin password, open the following URL in \n"
+"your web browser:\n"
+"\n"
+"%(verification_url)s\n"
+"\n"
+"If you think this is an error, just ignore this email and continue being\n"
+"a happy goblin!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/login.html:29
+msgid "Logging in failed!"
+msgstr "Accesso fallito!"
+
+#: mediagoblin/templates/mediagoblin/auth/login.html:42
+msgid "Don't have an account yet?"
+msgstr "Non hai ancora un account?"
+
+#: mediagoblin/templates/mediagoblin/auth/login.html:45
+msgid "Create one here!"
+msgstr "Creane uno qui!"
+
+#: mediagoblin/templates/mediagoblin/auth/login.html:48
+msgid "Forgot your password?"
+msgstr "Hai dimenticato la password?"
+
+#: mediagoblin/templates/mediagoblin/auth/login.html:51
+msgid "Change it!"
+msgstr ""
+
+#: mediagoblin/templates/mediagoblin/auth/register.html:27
+msgid "Create an account!"
+msgstr "Crea un account!"
+
+#: mediagoblin/templates/mediagoblin/auth/register.html:30
+msgid "Create"
+msgstr "Crea"
+
+#: mediagoblin/templates/mediagoblin/auth/verification_email.txt:19
+#, python-format
+msgid ""
+"Hi %(username)s,\n"
+"\n"
+"to activate your GNU MediaGoblin account, open the following URL in\n"
+"your web browser:\n"
+"\n"
+"%(verification_url)s"
+msgstr ""
+"Ciao %(username)s,\n"
+"\n"
+"per attivare il tuo account GNU MediaGoblin, apri il seguente URL nel tuo navigatore web.\n"
+"\n"
+"%(verification_url)s"
+
+#: mediagoblin/templates/mediagoblin/edit/edit.html:29
+#, python-format
+msgid "Editing %(media_title)s"
+msgstr "Stai modificando %(media_title)s"
+
+#: mediagoblin/templates/mediagoblin/edit/edit.html:36
+#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
+msgid "Cancel"
+msgstr "Annulla"
+
+#: mediagoblin/templates/mediagoblin/edit/edit.html:37
+#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
+msgid "Save changes"
+msgstr "Salva i cambiamenti"
+
+#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
+#, python-format
+msgid "Editing %(username)s's profile"
+msgstr "Stai modificando il profilo di %(username)s"
+
+#: mediagoblin/templates/mediagoblin/listings/tag.html:31
+msgid "Media tagged with:"
+msgstr "Media taggata con:"
+
+#: mediagoblin/templates/mediagoblin/submit/start.html:26
+msgid "Submit yer media"
+msgstr "Inoltra documento multimediale"
+
+#: mediagoblin/templates/mediagoblin/submit/start.html:29
+msgid "Submit"
+msgstr "Conferma"
+
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
+#, python-format
+msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
+msgstr "Documenti multimediali di <a href=\"%(user_url)s\">%(username)s</a>"
+
+#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
+msgid "Sorry, no such user found."
+msgstr "Mi dispiace, utente non trovato"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
+#, python-format
+msgid "Really delete %(title)s?"
+msgstr "Vuoi davvero cancellare %(title)s?"
+
+#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
+msgid "Delete Permanently"
+msgstr "Cancella permanentemente"
+
+#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
+msgid "Media processing panel"
+msgstr "Pannello di elaborazione media"
+
+#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:25
+msgid ""
+"You can track the state of media being processed for your gallery here."
+msgstr "Puoi seguire lo stato dell'elaborazione per la tua galleria qui."
+
+#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:28
+msgid "Media in-processing"
+msgstr "Media in elaborazione"
+
+#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
+msgid "No media in-processing"
+msgstr "Nessun documento multimediale in elaborazione"
+
+#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
+msgid "These uploads failed to process:"
+msgstr "L'elaborazione di questi upload è fallita:"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
+msgid "Email verification needed"
+msgstr "è necessario verificare email"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
+msgid "Almost done! Your account still needs to be activated."
+msgstr "Quasi finito! Il tuo account deve ancora essere attivato."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
+msgid ""
+"An email should arrive in a few moments with instructions on how to do so."
+msgstr ""
+"In breve dovresti ricevere un email contenente istruzioni su come fare."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
+msgid "In case it doesn't:"
+msgstr "Nel caso non fosse:"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
+msgid "Resend verification email"
+msgstr "Rispedisci email di verifica"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
+msgid ""
+"Someone has registered an account with this username, but it still has to be"
+" activated."
+msgstr ""
+"Qualcuno ha registrato un account con questo nome utente, ma deve ancora "
+"essere attivato."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
+#, python-format
+msgid ""
+"If you are that person but you've lost your verification email, you can <a "
+"href=\"%(login_url)s\">log in</a> and resend it."
+msgstr ""
+"Se sei quella persona ma hai perso l'email di verifica, puoi <a "
+"href=\"%(login_url)s\">accedere</a> e rispedirlo."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
+#, python-format
+msgid "%(username)s's profile"
+msgstr "profilo di %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
+msgid "Here's a spot to tell others about yourself."
+msgstr "Ecco un posto dove raccontare agli altri di te."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
+msgid "Edit profile"
+msgstr "Modifica profilo"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
+msgid "This user hasn't filled in their profile (yet)."
+msgstr "Questo utente non ha (ancora) compilato il proprio profilo."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
+#, python-format
+msgid "View all of %(username)s's media"
+msgstr "Visualizza tutti i file multimediali di %(username)s"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
+msgid ""
+"This is where your media will appear, but you don't seem to have added "
+"anything yet."
+msgstr ""
+"Questo è dove i tuoi documenti multimediali appariranno, ma sembra che tu "
+"non abbia ancora aggiunto niente."
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
+msgid "Add media"
+msgstr "Aggiungi documenti multimediali"
+
+#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
+msgid "There doesn't seem to be any media here yet..."
+msgstr "Non sembra ci sia ancora nessun documento multimediali qui.."
+
+#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
+msgid "feed icon"
+msgstr "feed icon"
+
+#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
+msgid "Atom feed"
+msgstr "Atom feed"
+
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
+msgid "Newer"
+msgstr "Più nuovo"
+
+#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
+msgid "Older"
+msgstr "Più vecchio"
+
+#: mediagoblin/user_pages/forms.py:24
+msgid "Comment"
+msgstr "Commento"
+
+#: mediagoblin/user_pages/forms.py:30
+msgid "I am sure I want to delete this"
+msgstr "Sono sicuro di volerlo cancellare"
+
+#: mediagoblin/user_pages/views.py:175
+msgid "You are about to delete another user's media. Proceed with caution."
+msgstr ""
+"Stai cancellando un documento multimediale di un altro utente. Procedi con "
+"attenzione."
+
+
diff --git a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo
index efd3e3f4..4bdc4d5a 100644
--- a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po
index 79be3177..ebc8ad52 100644
--- a/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ja/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -236,11 +236,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -256,17 +254,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo
index 261e5e95..57447395 100644
--- a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po
index b9e0896d..c982eb95 100644
--- a/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/nl/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -241,11 +241,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -261,17 +259,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo
index 9e4cf80f..7bf5a87a 100644
--- a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po
index cc0e495a..4e1c382b 100644
--- a/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/nn_NO/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -246,11 +246,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -266,17 +264,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo
index 686989fc..189733f6 100644
--- a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po
index 02054003..6d0195fe 100644
--- a/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/pt_BR/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/mediagoblin/team/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -238,11 +238,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -258,17 +256,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo
index 994d6f30..f43e25f6 100644
--- a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po
index 967f7dbb..2d2ce467 100644
--- a/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ro/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -45,7 +45,7 @@ msgstr "Adresa de e-mail"
#: mediagoblin/auth/views.py:42
msgid "Sorry, registration is disabled on this instance."
-msgstr "Ne pare rău, dar înscrierile sunt dezactivate pe această instanță."
+msgstr "Ne pare rău, dar înscrierile sunt dezactivate pe acest server."
#: mediagoblin/auth/views.py:60
msgid "Sorry, a user with that name already exists."
@@ -76,6 +76,8 @@ msgid ""
"Could not send password recovery email as your username is inactive or your "
"account's email address has not been verified."
msgstr ""
+"E-mailul pentru recuperarea parolei nu a putut fi trimis deoarece contul tău"
+" e inactiv sau adresa ta de e-mail nu a fost confirmată."
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
msgid "Title"
@@ -197,7 +199,7 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:24
msgid "Explore"
-msgstr ""
+msgstr "Explorează"
#: mediagoblin/templates/mediagoblin/root.html:27
msgid "Hi there, media lover! MediaGoblin is..."
@@ -250,42 +252,35 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:38
msgid "Excited to join us?"
-msgstr ""
+msgstr "Vrei să ni te alături?"
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
msgid "Most recent media"
-msgstr ""
+msgstr "Cele mai recente fișiere"
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
msgid "Enter your new password"
-msgstr ""
+msgstr "Introdu noua parolă"
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
msgid "Enter your username or email"
-msgstr ""
+msgstr "Introdu numele de utilizator sau adresa de e-mail"
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
@@ -301,6 +296,13 @@ msgid ""
"If you think this is an error, just ignore this email and continue being\n"
"a happy goblin!"
msgstr ""
+"Bună, %(username)s\n"
+"\n"
+"Pentru a modifica parola ta la GNU MediaGoblin, accesează adresa următoare:\n"
+"\n"
+"%(verification_url)s\n"
+"\n"
+"Dacă ai primit acest mesaj din greșeală, ignoră-l și fii mai departe un elf fericit!"
#: mediagoblin/templates/mediagoblin/auth/login.html:29
msgid "Logging in failed!"
@@ -316,11 +318,11 @@ msgstr "Creează-l aici!"
#: mediagoblin/templates/mediagoblin/auth/login.html:48
msgid "Forgot your password?"
-msgstr ""
+msgstr "Ai uitat parola?"
#: mediagoblin/templates/mediagoblin/auth/login.html:51
msgid "Change it!"
-msgstr ""
+msgstr "Schimb-o!"
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
@@ -342,7 +344,7 @@ msgid ""
msgstr ""
"Bună, %(username)s,\n"
"\n"
-"pentru activarea contului tău GNU MediaGoblin, accesează adresa următoare:\n"
+"pentru activarea contului tău la GNU MediaGoblin, accesează adresa următoare:\n"
"\n"
"%(verification_url)s"
@@ -421,7 +423,7 @@ msgstr "Aceste fișiere nu au putut fi procesate:"
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
msgid "Email verification needed"
-msgstr "Este necesară verificarea adresei de e-mail"
+msgstr "Este necesară confirmarea adresei de e-mail"
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
msgid "Almost done! Your account still needs to be activated."
@@ -478,7 +480,7 @@ msgstr "Acest utilizator nu și-a completat (încă) profilul."
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
#, python-format
msgid "View all of %(username)s's media"
-msgstr "Toate fișierele media ale lui %(username)s"
+msgstr "Vezi toate fișierele media ale lui %(username)s"
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
msgid ""
diff --git a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo
index 2b698e4d..c1eab2ba 100644
--- a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po
index 865f5424..ffdeab2e 100644
--- a/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/ru/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -37,7 +37,7 @@ msgstr "Подтвердите пароль"
#: mediagoblin/auth/forms.py:39
msgid "Type it again here to make sure there are no spelling mistakes."
-msgstr "Type it again here to make sure there are no spelling mistakes."
+msgstr "Наберите его ещё раз здесь, чтобы избежать опечаток."
#: mediagoblin/auth/forms.py:42
msgid "Email address"
@@ -53,7 +53,7 @@ msgstr "Извините, пользователь с этим именем уж
#: mediagoblin/auth/views.py:64
msgid "Sorry, that email address has already been taken."
-msgstr "Извините, этот адрес электнонной почты уже занят."
+msgstr "Извините, этот адрес электронной почты уже занят."
#: mediagoblin/auth/views.py:165
msgid ""
@@ -197,7 +197,7 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:27
msgid "Hi there, media lover! MediaGoblin is..."
-msgstr "Привет, любитель мультимедиа! MediaGoblin это…"
+msgstr "Привет, любитель мультимедиа! MediaGoblin…"
#: mediagoblin/templates/mediagoblin/root.html:29
msgid "The perfect place for your media!"
@@ -230,8 +230,8 @@ msgid ""
"Built for extensibility. (Multiple media types coming soon to the software,"
" including video support!)"
msgstr ""
-"Built for extensibility. (Multiple media types coming soon to the software,"
-" including video support!)"
+"Рассчитан на расширяемость. (В программе скоро должна появиться поддержка "
+"других видов мультимедиа, таких как видео!)"
#: mediagoblin/templates/mediagoblin/root.html:34
msgid ""
@@ -250,37 +250,30 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
msgid "Most recent media"
-msgstr ""
+msgstr "Самые новые файлы"
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
msgid "Enter your new password"
-msgstr ""
+msgstr "Введите свой новый пароль"
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
msgid "Enter your username or email"
-msgstr ""
+msgstr "Введите Ваше имя пользователя или адрес электронной почты"
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
@@ -311,11 +304,11 @@ msgstr "Создайте здесь!"
#: mediagoblin/templates/mediagoblin/auth/login.html:48
msgid "Forgot your password?"
-msgstr ""
+msgstr "Забыли свой пароль?"
#: mediagoblin/templates/mediagoblin/auth/login.html:51
msgid "Change it!"
-msgstr ""
+msgstr "Смените его!"
#: mediagoblin/templates/mediagoblin/auth/register.html:27
msgid "Create an account!"
@@ -376,7 +369,7 @@ msgstr "Подтвердить"
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
#, python-format
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
-msgstr "Файлы пользователя &lt;a href=\"%(user_url)s\"&gt;%(username)s&lt;/a&gt;"
+msgstr "Файлы пользователя <a href=\"%(user_url)s\">%(username)s</a>"
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
@@ -436,7 +429,7 @@ msgstr "А если нет, то:"
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
msgid "Resend verification email"
-msgstr "Повторно отправить подверждение на адрес электнонной почты"
+msgstr "Повторно отправить подверждение на адрес электронной почты"
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
msgid ""
@@ -516,6 +509,6 @@ msgstr "Я уверен, что хочу удалить это"
#: mediagoblin/user_pages/views.py:175
msgid "You are about to delete another user's media. Proceed with caution."
-msgstr ""
+msgstr "Вы на пороге удаления файла другого пользователя. Будьте осторожны."
diff --git a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo
index d1ce44b2..4c433381 100644
--- a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po
index 17ffeec0..39c6b9a5 100644
--- a/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/sl/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -249,11 +249,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -269,17 +267,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo
index d09aea44..3c5d864b 100644
--- a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po
index da928da6..8f2373c8 100644
--- a/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/sr/LC_MESSAGES/mediagoblin.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Serbian (http://www.transifex.net/projects/p/mediagoblin/team/sr/)\n"
"MIME-Version: 1.0\n"
@@ -235,11 +235,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -255,17 +253,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo
index 5f8ac655..2cdf2fee 100644
--- a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po
index f38166a5..08a4bc15 100644
--- a/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/sv/LC_MESSAGES/mediagoblin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: Swedish (http://www.transifex.net/projects/p/mediagoblin/team/sv/)\n"
"MIME-Version: 1.0\n"
@@ -256,11 +256,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -276,17 +274,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo
index e0117391..adc3548e 100644
--- a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo
+++ b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.mo
Binary files differ
diff --git a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po
index 9e4380c2..1d86f1f9 100644
--- a/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po
+++ b/mediagoblin/i18n/zh_TW/LC_MESSAGES/mediagoblin.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: GNU MediaGoblin\n"
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
-"POT-Creation-Date: 2011-09-11 16:16-0500\n"
-"PO-Revision-Date: 2011-09-11 21:16+0000\n"
+"POT-Creation-Date: 2011-09-25 20:26-0500\n"
+"PO-Revision-Date: 2011-09-26 01:25+0000\n"
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -241,11 +241,9 @@ msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:39
#, python-format
msgid ""
-"\n"
-" <a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
+"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
" or\n"
-" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>\n"
-" "
+" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
msgstr ""
#: mediagoblin/templates/mediagoblin/root.html:53
@@ -261,17 +259,12 @@ msgid "Enter your username or email"
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
-msgid ""
-"\n"
-" Your password has been changed. Try to log in now.\n"
-" "
+msgid "Your password has been changed. Try to log in now."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
msgid ""
-"\n"
-" Check your inbox. We sent an email with a URL for changing your password.\n"
-" "
+"Check your inbox. We sent an email with a URL for changing your password."
msgstr ""
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
diff --git a/mediagoblin/middleware/__init__.py b/mediagoblin/middleware/__init__.py
index 586debbf..05325ee5 100644
--- a/mediagoblin/middleware/__init__.py
+++ b/mediagoblin/middleware/__init__.py
@@ -16,4 +16,5 @@
ENABLED_MIDDLEWARE = (
'mediagoblin.middleware.noop:NoOpMiddleware',
+ 'mediagoblin.middleware.csrf:CsrfMiddleware',
)
diff --git a/mediagoblin/middleware/csrf.py b/mediagoblin/middleware/csrf.py
new file mode 100644
index 00000000..44b799d5
--- /dev/null
+++ b/mediagoblin/middleware/csrf.py
@@ -0,0 +1,135 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import hashlib
+import random
+
+from webob.exc import HTTPForbidden
+from wtforms import Form, HiddenField, validators
+
+from mediagoblin import mg_globals
+
+# Use the system (hardware-based) random number generator if it exists.
+# -- this optimization is lifted from Django
+if hasattr(random, 'SystemRandom'):
+ randrange = random.SystemRandom().randrange
+else:
+ randrange = random.randrange
+
+
+class CsrfForm(Form):
+ """Simple form to handle rendering a CSRF token and confirming it
+ is included in the POST."""
+
+ csrf_token = HiddenField("",
+ [validators.Required()])
+
+
+def render_csrf_form_token(request):
+ """Render the CSRF token in a format suitable for inclusion in a
+ form."""
+
+ form = CsrfForm(csrf_token=request.environ['CSRF_TOKEN'])
+
+ return form.csrf_token
+
+
+class CsrfMiddleware(object):
+ """CSRF Protection Middleware
+
+ Adds a CSRF Cookie to responses and verifies that it is present
+ and matches the form token for non-safe requests.
+ """
+
+ MAX_CSRF_KEY = 2 << 63
+ SAFE_HTTP_METHODS = ("GET", "HEAD", "OPTIONS", "TRACE")
+
+ def __init__(self, mg_app):
+ self.app = mg_app
+
+ def process_request(self, request):
+ """For non-safe requests, confirm that the tokens are present
+ and match.
+ """
+
+ # get the token from the cookie
+ try:
+ request.environ['CSRF_TOKEN'] = \
+ request.cookies[mg_globals.app_config['csrf_cookie_name']]
+
+ except KeyError, e:
+ # if it doesn't exist, make a new one
+ request.environ['CSRF_TOKEN'] = self._make_token(request)
+
+ # if this is a non-"safe" request (ie, one that could have
+ # side effects), confirm that the CSRF tokens are present and
+ # valid
+ if request.method not in self.SAFE_HTTP_METHODS \
+ and ('gmg.verify_csrf' in request.environ or
+ 'paste.testing' not in request.environ):
+
+ return self.verify_tokens(request)
+
+ def process_response(self, request, response):
+ """Add the CSRF cookie to the response if needed and set Vary
+ headers.
+ """
+
+ # set the CSRF cookie
+ response.set_cookie(
+ mg_globals.app_config['csrf_cookie_name'],
+ request.environ['CSRF_TOKEN'],
+ max_age=60 * 60 * 24 * 7 * 52,
+ path='/',
+ domain=mg_globals.app_config.get('csrf_cookie_domain', None),
+ secure=(request.scheme.lower() == 'https'),
+ httponly=True)
+
+ # update the Vary header
+ response.vary = (response.vary or []) + ['Cookie']
+
+ def _make_token(self, request):
+ """Generate a new token to use for CSRF protection."""
+
+ return hashlib.md5("%s%s" %
+ (randrange(0, self.MAX_CSRF_KEY),
+ randrange(0, self.MAX_CSRF_KEY))).hexdigest()
+
+ def verify_tokens(self, request):
+ """Verify that the CSRF Cookie exists and that it matches the
+ form value."""
+
+ # confirm the cookie token was presented
+ cookie_token = request.cookies.get(
+ mg_globals.app_config['csrf_cookie_name'],
+ None)
+
+ if cookie_token is None:
+ # the CSRF cookie must be present in the request
+ return HTTPForbidden()
+
+ # get the form token and confirm it matches
+ form = CsrfForm(request.POST)
+ if form.validate():
+ form_token = form.csrf_token.data
+
+ if form_token == cookie_token:
+ # all's well that ends well
+ return
+
+ # either the tokens didn't match or the form token wasn't
+ # present; either way, the request is denied
+ return HTTPForbidden()
diff --git a/mediagoblin/templates/mediagoblin/auth/fp_changed_success.html b/mediagoblin/templates/mediagoblin/auth/fp_changed_success.html
index d6633ec6..7cea312d 100644
--- a/mediagoblin/templates/mediagoblin/auth/fp_changed_success.html
+++ b/mediagoblin/templates/mediagoblin/auth/fp_changed_success.html
@@ -19,9 +19,9 @@
{% block mediagoblin_content %}
<p>
- {% trans %}
+ {% trans -%}
Your password has been changed. Try to log in now.
- {% endtrans %}
+ {%- endtrans %}
</p>
{% endblock %}
diff --git a/mediagoblin/templates/mediagoblin/auth/fp_email_sent.html b/mediagoblin/templates/mediagoblin/auth/fp_email_sent.html
index bc79b970..69aac6b3 100644
--- a/mediagoblin/templates/mediagoblin/auth/fp_email_sent.html
+++ b/mediagoblin/templates/mediagoblin/auth/fp_email_sent.html
@@ -19,9 +19,9 @@
{% block mediagoblin_content %}
<p>
- {% trans %}
+ {% trans -%}
Check your inbox. We sent an email with a URL for changing your password.
- {% endtrans %}
+ {%- endtrans %}
</p>
{% endblock %}
diff --git a/mediagoblin/templates/mediagoblin/auth/login.html b/mediagoblin/templates/mediagoblin/auth/login.html
index 3926a1df..61c5a203 100644
--- a/mediagoblin/templates/mediagoblin/auth/login.html
+++ b/mediagoblin/templates/mediagoblin/auth/login.html
@@ -22,6 +22,7 @@
{% block mediagoblin_content %}
<form action="{{ request.urlgen('mediagoblin.auth.login') }}"
method="POST" enctype="multipart/form-data">
+ {{ csrf_token }}
<div class="grid_6 prefix_1 suffix_1 form_box">
<h1>{% trans %}Log in{% endtrans %}</h1>
{% if login_failed %}
diff --git a/mediagoblin/templates/mediagoblin/auth/register.html b/mediagoblin/templates/mediagoblin/auth/register.html
index e72b3a52..25b68058 100644
--- a/mediagoblin/templates/mediagoblin/auth/register.html
+++ b/mediagoblin/templates/mediagoblin/auth/register.html
@@ -26,6 +26,7 @@
<div class="grid_6 prefix_1 suffix_1 form_box">
<h1>{% trans %}Create an account!{% endtrans %}</h1>
{{ wtforms_util.render_divs(register_form) }}
+ {{ csrf_token }}
<div class="form_submit_buttons">
<input type="submit" value="{% trans %}Create{% endtrans %}"
class="button" />
diff --git a/mediagoblin/templates/mediagoblin/edit/attachments.html b/mediagoblin/templates/mediagoblin/edit/attachments.html
index 63b06581..d8b55f58 100644
--- a/mediagoblin/templates/mediagoblin/edit/attachments.html
+++ b/mediagoblin/templates/mediagoblin/edit/attachments.html
@@ -49,6 +49,7 @@
<div class="form_submit_buttons">
<a href="{{ media.url_for_self(request.urlgen) }}">Cancel</a>
<input type="submit" value="Save changes" class="button" />
+ {{ csrf_token }}
</div>
</div>
</form>
diff --git a/mediagoblin/templates/mediagoblin/edit/edit.html b/mediagoblin/templates/mediagoblin/edit/edit.html
index 8c4e2efb..b4b3be85 100644
--- a/mediagoblin/templates/mediagoblin/edit/edit.html
+++ b/mediagoblin/templates/mediagoblin/edit/edit.html
@@ -35,6 +35,7 @@
<div class="form_submit_buttons">
<a href="{{ media.url_for_self(request.urlgen) }}">{% trans %}Cancel{% endtrans %}</a>
<input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button" />
+ {{ csrf_token }}
</div>
</div>
</form>
diff --git a/mediagoblin/templates/mediagoblin/edit/edit_profile.html b/mediagoblin/templates/mediagoblin/edit/edit_profile.html
index 464c663d..93b2a792 100644
--- a/mediagoblin/templates/mediagoblin/edit/edit_profile.html
+++ b/mediagoblin/templates/mediagoblin/edit/edit_profile.html
@@ -33,6 +33,7 @@
{{ wtforms_util.render_divs(form) }}
<div class="form_submit_buttons">
<input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button" />
+ {{ csrf_token }}
</div>
</div>
</form>
diff --git a/mediagoblin/templates/mediagoblin/root.html b/mediagoblin/templates/mediagoblin/root.html
index 854fca51..e3ca9726 100644
--- a/mediagoblin/templates/mediagoblin/root.html
+++ b/mediagoblin/templates/mediagoblin/root.html
@@ -36,11 +36,11 @@
{% if allow_registration %}
<p>{% trans %}Excited to join us?{% endtrans %}<p>
- {% trans register_url=request.urlgen('mediagoblin.auth.register') %}
+ {% trans register_url=request.urlgen('mediagoblin.auth.register') -%}
<a class="header_submit_highlight" href="{{ register_url }}">Create a free account</a>
or
<a class="header_submit" href="http://wiki.mediagoblin.org/HackingHowto">Set up MediaGoblin on your own server</a>
- {% endtrans %}
+ {%- endtrans %}
{% endif %}
</div>
diff --git a/mediagoblin/templates/mediagoblin/submit/start.html b/mediagoblin/templates/mediagoblin/submit/start.html
index f2e844df..7bc6ff45 100644
--- a/mediagoblin/templates/mediagoblin/submit/start.html
+++ b/mediagoblin/templates/mediagoblin/submit/start.html
@@ -26,6 +26,7 @@
<h1>{% trans %}Submit yer media{% endtrans %}</h1>
{{ wtforms_util.render_divs(submit_form) }}
<div class="form_submit_buttons">
+ {{ csrf_token }}
<input type="submit" value="{% trans %}Submit{% endtrans %}" class="button" />
</div>
</div>
diff --git a/mediagoblin/templates/mediagoblin/test_submit.html b/mediagoblin/templates/mediagoblin/test_submit.html
index 78b88ae8..190b9ac3 100644
--- a/mediagoblin/templates/mediagoblin/test_submit.html
+++ b/mediagoblin/templates/mediagoblin/test_submit.html
@@ -26,6 +26,7 @@
<tr>
<td></td>
<td><input type="submit" value="submit" class="button" /></td>
+ {{ csrf_token }}
</tr>
</table>
</form>
diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html
index 442bef6d..433f74dc 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/media.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/media.html
@@ -72,6 +72,7 @@
{{ wtforms_util.render_divs(comment_form) }}
<div class="form_submit_buttons">
<input type="submit" value="{% trans %}Post comment!{% endtrans %}" class="button" />
+ {{ csrf_token }}
</div>
</form>
{% endif %}
diff --git a/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html b/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html
index 01323a6e..dd6923a9 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html
@@ -48,6 +48,7 @@
{# TODO: This isn't a button really... might do unexpected things :) #}
<a class="cancel_link" href="{{ media.url_for_self(request.urlgen) }}">{% trans %}Cancel{% endtrans %}</a>
<input type="submit" value="{% trans %}Delete Permanently{% endtrans %}" class="button" />
+ {{ csrf_token }}
</div>
</div>
</form>
diff --git a/mediagoblin/templates/mediagoblin/utils/pagination.html b/mediagoblin/templates/mediagoblin/utils/pagination.html
index 87e15e0f..0df3bfea 100644
--- a/mediagoblin/templates/mediagoblin/utils/pagination.html
+++ b/mediagoblin/templates/mediagoblin/utils/pagination.html
@@ -36,7 +36,7 @@
{% set prev_url = pagination.get_page_url_explicit(
base_url, get_params,
pagination.page - 1) %}
- <a href="{{ prev_url }}"><img class="pagination_arrow" src="/mgoblin_static/images/pagination_left.png" alt="Previous page" /></a>
+ <a href="{{ prev_url }}"><img class="pagination_arrow" src="{{ request.staticdirect('/images/pagination_left.png') }}" alt="Previous page" /></a>
<a href="{{ prev_url }}">{% trans %}Newer{% endtrans %}</a>
{% endif %}
{% if pagination.has_next %}
@@ -44,7 +44,7 @@
base_url, get_params,
pagination.page + 1) %}
<a href="{{ next_url }}">{% trans %}Older{% endtrans %}</a>
- <a href="{{ next_url }}"><img class="pagination_arrow" src="/mgoblin_static/images/pagination_right.png" alt="Next page" /></a>
+ <a href="{{ next_url }}"><img class="pagination_arrow" src="{{ request.staticdirect('/images/pagination_right.png') }}" alt="Next page" /></a>
{% endif %}
<br />
Go to page:
diff --git a/mediagoblin/templates/mediagoblin/utils/prev_next.html b/mediagoblin/templates/mediagoblin/utils/prev_next.html
index 74f855ed..75903076 100644
--- a/mediagoblin/templates/mediagoblin/utils/prev_next.html
+++ b/mediagoblin/templates/mediagoblin/utils/prev_next.html
@@ -25,23 +25,23 @@
{# There are no previous entries for the very first media entry #}
{% if prev_entry_url %}
<a class="navigation_button navigation_left" href="{{ prev_entry_url }}">
- <img src="/mgoblin_static/images/navigation_left.png" alt="Previous image" />
+ <img src="{{ request.staticdirect('/images/navigation_left.png') }}" alt="Previous image" />
</a>
{% else %}
{# This is the first entry. display greyed-out 'previous' image #}
<p class="navigation_button navigation_left">
- <img src="/mgoblin_static/images/navigation_end.png" alt="No previous images" />
+ <img src="{{ request.staticdirect('/images/navigation_end.png') }}" alt="No previous images" />
</p>
{% endif %}
{# Likewise, this could be the very last media entry #}
{% if next_entry_url %}
<a class="navigation_button" href="{{ next_entry_url }}">
- <img src="/mgoblin_static/images/navigation_right.png" alt="Next image" />
+ <img src="{{ request.staticdirect('/images/navigation_right.png') }}" alt="Next image" />
</a>
{% else %}
{# This is the last entry. display greyed-out 'next' image #}
<p class="navigation_button">
- <img src="/mgoblin_static/images/navigation_end.png" alt="No following images" />
+ <img src="{{ request.staticdirect('/images/navigation_end.png') }}" alt="No following images" />
</p>
{% endif %}
</div>
diff --git a/mediagoblin/tests/test_csrf_middleware.py b/mediagoblin/tests/test_csrf_middleware.py
new file mode 100644
index 00000000..cf03fe58
--- /dev/null
+++ b/mediagoblin/tests/test_csrf_middleware.py
@@ -0,0 +1,69 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import urlparse
+import datetime
+
+from nose.tools import assert_equal
+
+from mediagoblin.tests.tools import setup_fresh_app
+from mediagoblin import mg_globals
+
+
+@setup_fresh_app
+def test_csrf_cookie_set(test_app):
+
+ # get login page
+ response = test_app.get('/auth/login/')
+
+ # assert that the mediagoblin nonce cookie has been set
+ assert 'Set-Cookie' in response.headers
+ assert 'mediagoblin_nonce' in response.cookies_set
+
+ # assert that we're also sending a vary header
+ assert response.headers.get('Vary', False) == 'Cookie'
+
+
+@setup_fresh_app
+def test_csrf_token_must_match(test_app):
+
+ # construct a request with no cookie or form token
+ assert test_app.post('/auth/login/',
+ extra_environ={'gmg.verify_csrf': True},
+ expect_errors=True).status_int == 403
+
+ # construct a request with a cookie, but no form token
+ assert test_app.post('/auth/login/',
+ headers={'Cookie': str('%s=foo; ' %
+ mg_globals.app_config['csrf_cookie_name'])},
+ extra_environ={'gmg.verify_csrf': True},
+ expect_errors=True).status_int == 403
+
+ # if both the cookie and form token are provided, they must match
+ assert test_app.post('/auth/login/',
+ {'csrf_token': 'blarf'},
+ headers={'Cookie': str('%s=foo; ' %
+ mg_globals.app_config['csrf_cookie_name'])},
+ extra_environ={'gmg.verify_csrf': True},
+ expect_errors=True).\
+ status_int == 403
+
+ assert test_app.post('/auth/login/',
+ {'csrf_token': 'foo'},
+ headers={'Cookie': str('%s=foo; ' %
+ mg_globals.app_config['csrf_cookie_name'])},
+ extra_environ={'gmg.verify_csrf': True}).\
+ status_int == 200
diff --git a/mediagoblin/util.py b/mediagoblin/util.py
index 7ff3ec7f..dad91326 100644
--- a/mediagoblin/util.py
+++ b/mediagoblin/util.py
@@ -39,6 +39,7 @@ from wtforms.form import Form
from mediagoblin import mg_globals
from mediagoblin import messages
from mediagoblin.db.util import ObjectId
+from mediagoblin.middleware.csrf import render_csrf_form_token
from itertools import izip, count
@@ -125,6 +126,8 @@ def render_template(request, template_path, context):
template = request.template_env.get_template(
template_path)
context['request'] = request
+ context['csrf_token'] = render_csrf_form_token(request)
+
rendered = template.render(context)
if TESTS_ENABLED:
diff --git a/paste.ini b/paste.ini
index fc459989..7eee528b 100644
--- a/paste.ini
+++ b/paste.ini
@@ -19,10 +19,12 @@ config = %(here)s/mediagoblin.ini
[app:publicstore_serve]
use = egg:Paste#static
document_root = %(here)s/user_dev/media/public/
+cache_max_age = 604800
[app:mediagoblin_static]
use = egg:Paste#static
document_root = %(here)s/mediagoblin/static/
+cache_max_age = 86400
[filter:beaker]
use = egg:Beaker#beaker_session