Fix conflicts

This commit is contained in:
Henry Bravo 2017-06-05 14:55:41 -05:00
commit c69694274f
26 changed files with 533 additions and 257 deletions

1
.gitignore vendored
View file

@ -34,3 +34,4 @@ secret-key
.idea/
.env
*.mo

View file

@ -8,7 +8,13 @@
1.0.3: 2017-06-02
* [datacenterlight] Hotfix, remove footer on mobile devices
next
next:
* [datacenterlight] Add German translations
* [datacenterlight] Change beta access to subscriptions
* [hosting] Add German translations
* [blog] Add German translation for header
* [opennebula_api] Improve testing, add ssh key functions
* [opennebula_api] Remove template views
* [datacenterlight] Allow user to have multiple ssh keys
* [datacenterlight] Changed stripe.js v2 to v3
* [datacenterlight] Added support for stripe payment errors on current user language

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-26 13:35+0000\n"
"POT-Creation-Date: 2017-05-30 13:47+0000\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"

View file

@ -17,7 +17,7 @@
{% render_model post "abstract" "" "" 'truncatewords_html:10' %}
</h2>
<span class="meta">
Posted on {{ post.date_published|date:"DATE_FORMAT" }}
{% trans "Posted on"%} {{ post.date_published|date:"DATE_FORMAT" }}
</span>
</div>
</div>

View file

@ -75,6 +75,7 @@ msgstr ""
msgid "Thank you!"
msgstr "Vielen Dank!"
<<<<<<< HEAD
#: templates/datacenterlight/index.html:62
#: templates/datacenterlight/index.html:160
#: templates/datacenterlight/index.html:368
@ -158,7 +159,6 @@ msgid ""
"tight factory walls."
msgstr "Verzichtet auf aktive Kühlung, indem es sich die Isolation unserer ehemaligen Fabrikhalle zu Nutze macht."
#: templates/datacenterlight/index.html:214
msgid ""
"We don't use special hardware. We use commodity hardware: we buy computers "
"that you buy. Just many more and put them in a cozy home for computers "
@ -169,6 +169,7 @@ msgstr ""
"komponenten hinzugekauft und skalieren so das Datencenter."
#: templates/datacenterlight/index.html:240
#: datacenterlight/templates/datacenterlight/index.html:218
msgid ""
"Our VMs are located in Switzerland, with reliable power supply and fast "
"internet connection. Our VM costs less thanks to our featherlight "
@ -178,84 +179,84 @@ msgstr ""
"Energieversorgung sowie schneller Internetverbindung ausgestattet. Unser "
"Angebot ist aufgrund unserer leichten Infrastruktur überaus kostengünstig."
#: templates/datacenterlight/index.html:258
#: templates/datacenterlight/pricing.html:106
#: datacenterlight/templates/datacenterlight/index.html:236
#: datacenterlight/templates/datacenterlight/pricing.html:106
msgid "We are cutting down the costs significantly!"
msgstr "Wir sorgen dafür, dass die Kosten für Sie signifikant abnehmen"
#: templates/datacenterlight/index.html:259
#: datacenterlight/templates/datacenterlight/index.html:237
msgid "Affordable VM hosting based in Switzerland"
msgstr "Bezahlbares VM Hosting in der Schweiz"
#: templates/datacenterlight/index.html:260
#: datacenterlight/templates/datacenterlight/index.html:238
msgid "More Info"
msgstr "Weitere Informationen"
#: templates/datacenterlight/index.html:267
#: templates/datacenterlight/pricing.html:119
#: datacenterlight/templates/datacenterlight/index.html:245
#: datacenterlight/templates/datacenterlight/pricing.html:119
msgid "VM hosting"
msgstr "VM Hosting"
#: templates/datacenterlight/index.html:274
#: datacenterlight/templates/datacenterlight/index.html:252
msgid "Based in Switzerland"
msgstr "Standort des Datacenters ist in der Schweiz"
#: templates/datacenterlight/index.html:283
#, fuzzy
#| msgid "10 GB Storage (SSD)"
#: datacenterlight/templates/datacenterlight/index.html:261
msgid "10 GB Storage (SSD)"
msgstr "10 GB Storage (SSD)"
#: templates/datacenterlight/index.html:286
#: templates/datacenterlight/pricing.html:161
#: datacenterlight/templates/datacenterlight/index.html:264
#: datacenterlight/templates/datacenterlight/pricing.html:161
msgid "Order Now!"
msgstr "Bestelle jetzt!"
#: templates/datacenterlight/index.html:302
#: datacenterlight/templates/datacenterlight/index.html:280
msgid "Want to know more? Subscribe to our newsletter!"
msgstr "Willst du mehr wissen? Abonniere unseren Newsletter!"
#: templates/datacenterlight/index.html:329
#: datacenterlight/templates/datacenterlight/index.html:307
msgid "Switzerland "
msgstr "Schweiz"
#: templates/datacenterlight/index.html:346
#: datacenterlight/templates/datacenterlight/index.html:324
msgid "Questions?"
msgstr "Fragen?"
#: templates/datacenterlight/index.html:346
#: datacenterlight/templates/datacenterlight/index.html:324
msgid "Contact us!"
msgstr "Kontaktiere uns!"
#: templates/datacenterlight/index.html:364
#: templates/datacenterlight/pricing.html:186
#: datacenterlight/templates/datacenterlight/index.html:342
#: datacenterlight/templates/datacenterlight/pricing.html:186
msgid "Home"
msgstr "Home"
#: templates/datacenterlight/index.html:377
#: templates/datacenterlight/pricing.html:199
#: datacenterlight/templates/datacenterlight/index.html:355
#: datacenterlight/templates/datacenterlight/pricing.html:199
msgid "Pricing"
msgstr "Preise"
#: templates/datacenterlight/pricing.html:71
#: datacenterlight/templates/datacenterlight/pricing.html:71
msgid "Buy VM"
msgstr "VM Kaufen"
#: templates/datacenterlight/pricing.html:127
#: datacenterlight/templates/datacenterlight/pricing.html:127
msgid "Hosted in Switzerland"
msgstr "Standort des Datacenters ist in der Schweiz"
#: templates/datacenterlight/pricing.html:144
#: datacenterlight/templates/datacenterlight/pricing.html:144
msgid "GB Storage (SSD)"
msgstr "GB Storage (SSD)"
#: templates/datacenterlight/pricing.html:168
#: datacenterlight/templates/datacenterlight/pricing.html:168
msgid "Simple and affordable: Try our virtual machine with featherlight price."
msgstr ""
"Einfach und bezahlbar: Testen Sie unsere virtuelen Machinen mit "
"federleichten Preisen"
#: templates/datacenterlight/pricing.html:171
#: datacenterlight/templates/datacenterlight/pricing.html:171
msgid ""
"Our VMs are hosted in Glarus, Switzerland, and our website is currently "
"running in BETA mode. If you want more information that you did not find on "

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-26 13:35+0000\n"
"POT-Creation-Date: 2017-05-30 13:47+0000\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"
@ -18,15 +18,21 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cms_templates/djangocms_blog/_header_post_detail.html:20
#: digitalglarus/templates/digitalglarus/post_detail.html:19
#: ungleich/templates/ungleich/djangocms_blog/includes/blog_item.html:19
msgid "Posted on"
msgstr "Veröffentlicht am"
#: cms_templates/djangocms_blog/post_list.html:11
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:11
msgid "Articles by"
msgstr ""
msgstr "Artikel vom"
#: cms_templates/djangocms_blog/post_list.html:12
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:12
msgid "Archive"
msgstr ""
msgstr "Archiv"
#: cms_templates/djangocms_blog/post_list.html:13
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:13
@ -36,39 +42,39 @@ msgstr ""
#: cms_templates/djangocms_blog/post_list.html:14
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:14
msgid "Category"
msgstr ""
msgstr "Kategorie"
#: cms_templates/djangocms_blog/post_list.html:21
#: digitalglarus/templates/glarus_blog/post_list.html:15
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:22
msgid "No article found."
msgstr ""
msgstr "Keine Artikel gefunden"
#: cms_templates/djangocms_blog/post_list.html:24
#: digitalglarus/templates/glarus_blog/post_list.html:18
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:25
msgid "Back"
msgstr ""
msgstr "Zurück"
#: cms_templates/djangocms_blog/post_list.html:32
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:33
msgid "Newer Posts"
msgstr ""
msgstr "Neuere Einträge"
#: cms_templates/djangocms_blog/post_list.html:39
#: ungleich/templates/ungleich/djangocms_blog/post_list_ungleich.html:40
msgid "Older Posts"
msgstr ""
msgstr "Ältere Einträge"
#: cms_templates/includes/blog_item.html:31
#: digitalglarus/templates/glarus_blog/includes/blog_item.html:32
msgid "read more"
msgstr ""
msgstr "weiterlesen"
#: cms_templates/includes/blog_meta.html:6
#: digitalglarus/templates/glarus_blog/includes/blog_meta.html:6
msgid "by"
msgstr ""
msgstr "von"
#: digitalglarus/cms_plugins.py:9
msgid "Digital Glarus Gallery"
@ -81,53 +87,53 @@ msgstr ""
#: digitalglarus/forms.py:35 digitalglarus/forms.py:70 nosystemd/forms.py:47
#: utils/forms.py:109
msgid "Street Address"
msgstr ""
msgstr "Adresse"
#: digitalglarus/forms.py:36 digitalglarus/forms.py:71 nosystemd/forms.py:48
#: utils/forms.py:110 utils/forms.py:124
msgid "City"
msgstr ""
msgstr "Stadt"
#: digitalglarus/forms.py:37 digitalglarus/forms.py:72 nosystemd/forms.py:49
#: utils/forms.py:111 utils/forms.py:125
msgid "Postal Code"
msgstr ""
msgstr "Postleitzahl"
#: digitalglarus/forms.py:38 digitalglarus/forms.py:73 nosystemd/forms.py:50
#: utils/forms.py:112 utils/forms.py:126
msgid "Country"
msgstr ""
msgstr "Land"
#: digitalglarus/templates/digitalglarus/login.html:88
#: digitalglarus/templates/digitalglarus/login_hello.html:32
#: nosystemd/templates/nosystemd/login.html:23
msgid "You haven been logged out"
msgstr ""
msgstr "Sie wurden abgemeldet"
#: digitalglarus/templates/glarus_blog/post_list.html:23
#: nosystemd/templates/nosystemd/donations.html:74
msgid "previous"
msgstr ""
msgstr "vorherige"
#: digitalglarus/templates/glarus_blog/post_list.html:26
#: dynamicweb/settings/base.py:182 templates/cms/__init__.py:10
#: templates/cms/ungleichch/__init__.py:5
msgid "Page"
msgstr ""
msgstr "Seite"
#: digitalglarus/templates/glarus_blog/post_list.html:26
msgid "of"
msgstr ""
msgstr "vom"
#: digitalglarus/templates/glarus_blog/post_list.html:29
#: nosystemd/templates/nosystemd/donations.html:80
msgid "next"
msgstr ""
msgstr "nächste"
#: digitalglarus/templates/language_chooser.html:8
#: ungleich/templates/cms/ungleichch/_header_base.html:23
msgid "Change to language:"
msgstr ""
msgstr "Sprache wechseln zu: "
#: digitalglarus/templates/new_base_glarus.html:168
#: digitalglarus/templates/new_base_glarus.html:191
@ -314,13 +320,12 @@ msgstr "Name"
#: membership/forms.py:43
#, fuzzy
#| msgid "Phone number"
msgid "Card number"
msgstr "Telefon"
msgstr "Kartennummer"
#: membership/forms.py:43
msgid "Expiry date"
msgstr ""
msgstr "Ablaufdatum"
#: membership/forms.py:44
msgid "CCV"
@ -339,14 +344,12 @@ msgid "Use this pattern(MM/YYYY)."
msgstr ""
#: membership/models.py:182
#, fuzzy
#| msgid "Phone number"
msgid "Wrong CCV number."
msgstr "Telefon"
msgstr "Falsche CCV Nummer"
#: nosystemd/forms.py:46
msgid "Amount"
msgstr ""
msgstr "Betrag"
#: nosystemd/templates/nosystemd/base.html:70
msgid "My Donations"
@ -1464,6 +1467,10 @@ msgstr ""
msgid "Unknown or unspecified country"
msgstr ""
#: utils/forms.py:20
msgid "Enter your name or company name"
msgstr "Geben Sie Ihren Namen oder der Ihrer Firma ein"
#: utils/forms.py:123
msgid "Street Building"
msgstr ""

View file

@ -16,7 +16,7 @@
</h2>
</a>
<p class="post-meta" style="font-size:0.9em;">
Posted on {{ post.date_published|date:"DATE_FORMAT" }}
{% trans "Posted on" %}{{ post.date_published|date:"DATE_FORMAT" }}
</p>
<p class="post-subtitle">

View file

@ -25,47 +25,47 @@ msgstr "Fügen Sie Ihren public key ein"
#: hosting/templates/hosting/base_short.html:68
#: hosting/templates/hosting/base_short.html:139
msgid "My Virtual Machines"
msgstr ""
msgstr "Meine virtuellen Maschinen"
#: hosting/templates/hosting/base_short.html:73
#: hosting/templates/hosting/base_short.html:145
#: hosting/templates/hosting/orders.html:12
msgid "My Orders"
msgstr ""
msgstr "Meine Bestellungen"
#: hosting/templates/hosting/base_short.html:78
#: hosting/templates/hosting/base_short.html:152
msgid "Keys"
msgstr ""
msgstr "Schlüssel"
#: hosting/templates/hosting/base_short.html:83
#: hosting/templates/hosting/base_short.html:158
msgid "Notifications "
msgstr ""
msgstr "Benachrichtigungen"
#: hosting/templates/hosting/base_short.html:90
msgid "Logout"
msgstr ""
msgstr "Abmeleden"
#: hosting/templates/hosting/base_short.html:95
msgid "How it works"
msgstr ""
msgstr "Wie es funktioniert"
#: hosting/templates/hosting/base_short.html:98
msgid "Your infrastructure"
msgstr ""
msgstr "Ihre Infrastruktur"
#: hosting/templates/hosting/base_short.html:101
msgid "Our inftrastructure"
msgstr ""
msgstr "Unsere Infrastruktur"
#: hosting/templates/hosting/base_short.html:104
msgid "Pricing"
msgstr ""
msgstr "Preise"
#: hosting/templates/hosting/base_short.html:107
msgid "Contact"
msgstr ""
msgstr "Kontakt"
#: hosting/templates/hosting/base_short.html:110
#: hosting/templates/hosting/login.html:32
@ -73,19 +73,19 @@ msgstr ""
#: hosting/templates/hosting/reset_password.html:31
#: hosting/templates/hosting/signup.html:30
msgid "Login"
msgstr ""
msgstr "Anmelden"
#: hosting/templates/hosting/base_short.html:134
msgid "Home"
msgstr ""
msgstr "Home"
#: templates/hosting/bill_detail.html:11 templates/hosting/order_detail.html:10
msgid "Invoice"
msgstr ""
msgstr "Rechnung"
#: templates/hosting/bill_detail.html:11 templates/hosting/order_detail.html:10
msgid "Order #"
msgstr ""
msgstr "Rechnung #"
#: templates/hosting/bill_detail.html:25
msgid "ungleich GmbH"
@ -114,7 +114,7 @@ msgstr ""
#: templates/hosting/bill_detail.html:68
#, python-format
msgid "Alles Preise in CHF mit 8%% Mehrwertsteuer."
msgstr ""
msgstr "All prices in CHF including 8%% VAT"
#: templates/hosting/bill_detail.html:69
msgid "Betrag zahlbar innerhalb von 30 Tagen ab Rechnungseingang."
@ -142,7 +142,7 @@ msgstr ""
#: templates/hosting/bills.html:12
msgid "Customers"
msgstr ""
msgstr "Kunden"
#: hosting/templates/hosting/bills.html:16
#: hosting/templates/hosting/virtual_machine_key.html:42
@ -155,17 +155,17 @@ msgstr ""
#: templates/hosting/bills.html:28
msgid "View Bill"
msgstr ""
msgstr "Rechnung anzeigen"
#: templates/hosting/bills.html:41 templates/hosting/orders.html.py:83
#: templates/hosting/virtual_machines.html:70
msgid "previous"
msgstr ""
msgstr "vorherige"
#: templates/hosting/bills.html:47 templates/hosting/orders.html.py:89
#: templates/hosting/virtual_machines.html:76
msgid "next"
msgstr ""
msgstr "nächste"
#: templates/hosting/confirm_reset_password.html:10
#: templates/hosting/login.html:9 templates/hosting/reset_password.html.py:9
@ -175,26 +175,42 @@ msgstr "Ihre VM in der Schweiz"
#: templates/hosting/confirm_reset_password.html:14
msgid "Set your new password"
msgstr ""
msgstr "Setzen Ihr neues Passwort"
#: hosting/templates/hosting/confirm_reset_password.html:28
#: hosting/templates/hosting/reset_password.html:22
msgid "Reset"
msgstr ""
msgstr "Zurücksetzen"
#: hosting/templates/hosting/confirm_reset_password.html:32
#: hosting/templates/hosting/reset_password.html:28
#: hosting/templates/hosting/signup.html:27
msgid "Already have an account ?"
msgstr ""
msgstr "Besitzen sie bereits ein Bentzerkonto"
#: templates/hosting/create_virtual_machine.html:19
#: hosting/templates/hosting/confirm_reset_password.html:32
msgid "Log in"
msgstr "Anmelden"
#: hosting/templates/hosting/create_virtual_machine.html:19
msgid "New Virtual Machine"
msgstr ""
msgstr "Neue virtuelle Maschine"
#: hosting/templates/hosting/create_virtual_machine.html:24
msgid "Select VM Template:"
msgstr "Wählen Sie eine Vorlage"
#: hosting/templates/hosting/create_virtual_machine.html:32
msgid "Select VM Configuration:"
msgstr "Wählen Sie eine Konfiguration"
#: hosting/templates/hosting/create_virtual_machine.html:39
msgid "CHF/Month"
msgstr "CHF/Monat"
#: templates/hosting/create_virtual_machine.html:45
msgid "Start VM"
msgstr ""
msgstr "Start VM"
#: templates/hosting/emails/password_reset_email.html:2
#: templates/hosting/emails/password_reset_email.txt:2
@ -220,48 +236,53 @@ msgstr ""
msgid "The %(site_name)s team"
msgstr ""
#: hosting/templates/hosting/login.html:10
#: hosting/templates/hosting/reset_password.html:10
#: hosting/templates/hosting/signup.html:9
msgid "Your VM hosted in Switzerland"
msgstr "Ihre VM gehostet in der Schweiz"
#: hosting/templates/hosting/login.html:26
msgid "You haven been logged out"
msgstr ""
msgstr "Sie wurden abgmeldet"
#: hosting/templates/hosting/login.html:49
msgid "Don't have an account yet ? "
msgstr ""
msgstr "Besitzen Sie kein Benutzerkonto?"
#: hosting/templates/hosting/login.html:52
#: hosting/templates/hosting/signup.html:13
#: hosting/templates/hosting/signup.html:21
msgid "Sign up"
msgstr ""
msgstr "Registrieren"
#: hosting/templates/hosting/login.html:54
msgid "Forgot your password ? "
msgstr ""
msgstr "Passwort vergessen?"
#: templates/hosting/notifications.html:9
msgid "Notifications"
msgstr ""
msgstr "Benachrichtigungen"
#: templates/hosting/notifications.html:16
msgid "Unread"
msgstr ""
msgstr "Ungelesen"
#: templates/hosting/notifications.html:26
msgid "All"
msgstr ""
msgstr "Alle"
#: templates/hosting/notifications.html:38
msgid "Unread notifications"
msgstr ""
msgstr "Ungelesene Benachrichtigungen"
#: templates/hosting/notifications.html:48
msgid "Mark as read"
msgstr ""
msgstr "Als gelesen markieren"
#: templates/hosting/notifications.html:59
msgid "All notifications"
msgstr ""
msgstr "Alle Benachrichtigungen"
#: templates/hosting/order_detail.html:16
#: templates/hosting/order_detail.html:24
@ -274,25 +295,31 @@ msgstr ""
#: templates/hosting/order_detail.html:38
msgid "Payment Method:"
msgstr ""
msgstr "Bezahlmethode"
#: templates/hosting/order_detail.html:49
msgid "Order summary"
msgstr ""
msgstr "Bestellungsübersicht"
#: templates/hosting/order_detail.html:52
#: templates/hosting/virtual_machine_detail.html:76
#: hosting/templates/hosting/order_detail.html:52
#: hosting/templates/hosting/payment.html:17
#: hosting/templates/hosting/virtual_machine_detail.html:75
msgid "Cores"
msgstr ""
msgstr "Prozessorkerne"
#: templates/hosting/order_detail.html:54
#: templates/hosting/virtual_machine_detail.html:82
#: hosting/templates/hosting/order_detail.html:54
#: hosting/templates/hosting/payment.html:20
#: hosting/templates/hosting/virtual_machine_detail.html:81
msgid "Memory"
msgstr ""
msgstr "Arbeitsspeicher"
#: templates/hosting/order_detail.html:56
#: hosting/templates/hosting/order_detail.html:56
#: hosting/templates/hosting/payment.html:23
msgid "Disk space"
msgstr ""
msgstr "Festplattenkapazität"
#: templates/hosting/order_detail.html:58
msgid "Total"
@ -300,15 +327,15 @@ msgstr ""
#: templates/hosting/order_detail.html:64
msgid "Finish Configuration"
msgstr ""
msgstr "Konfiguration beenden"
#: templates/hosting/orders.html:17
msgid "Date"
msgstr ""
msgstr "Datum"
#: templates/hosting/orders.html:18
msgid "Amount"
msgstr ""
msgstr "Betrag"
#: hosting/templates/hosting/orders.html:19
#: hosting/templates/hosting/virtual_machine_detail.html:30
@ -319,71 +346,104 @@ msgstr ""
#: templates/hosting/orders.html:30
msgid "Approved"
msgstr ""
msgstr "Akzeptiert"
#: templates/hosting/orders.html:32
msgid "Declined"
msgstr ""
msgstr "Abgelehnt"
#: templates/hosting/orders.html:37 templates/hosting/virtual_machines.html:58
msgid "View Detail"
msgstr ""
msgstr "Details anzeigen"
#: templates/hosting/orders.html:41
msgid "Cancel Order"
msgstr ""
msgstr "Bestellung stornieren"
#: templates/hosting/orders.html:56
msgid "Do You want do delete your order?"
msgstr ""
msgstr "Wollen Sie ihre Bestellung löschen?"
#: templates/hosting/orders.html:64
msgid "Close"
msgstr ""
msgstr "Schliessen"
#: templates/hosting/orders.html:66
msgid "Delete"
msgstr ""
msgstr "Löschen"
#: hosting/templates/hosting/payment.html:12
msgid "Billing Amount"
msgstr "Rechnungsbetrag"
#: hosting/templates/hosting/payment.html:35
msgid "Billing Address"
msgstr "Rechnungsadresse"
#: hosting/templates/hosting/payment.html:49
msgid "Payment Details"
msgstr "Rechnungsdetails"
#: hosting/templates/hosting/payment.html:61
#: hosting/templates/hosting/payment.html:103
msgid "Submit Payment"
msgstr "Betrag überweisen"
#: hosting/templates/hosting/payment.html:70
msgid "CARD NUMBER"
msgstr "Kreditkartennummer"
#: hosting/templates/hosting/payment.html:75
msgid "Valid Card Number"
msgstr "Gültige Kreditkartennummer"
#: hosting/templates/hosting/payment.html:84
msgid "EXPIRATION DATE"
msgstr "Ablaufdatum"
#: hosting/templates/hosting/payment.html:95
msgid "CV CODE"
msgstr "CV Code"
#: hosting/templates/hosting/reset_password.html:14
msgid "Reset your password"
msgstr ""
msgstr "Passwort zurücksetzen"
#: templates/hosting/virtual_machine_detail.html:19
msgid "Settings"
msgstr ""
msgstr "Einstellungen"
#: templates/hosting/virtual_machine_detail.html:25
msgid "Billing"
msgstr ""
msgstr "Abrechnungen"
#: templates/hosting/virtual_machine_detail.html:60
msgid "Ip not assigned yet"
msgstr ""
msgstr "Ip nicht zugewiesen"
#: templates/hosting/virtual_machine_detail.html:89
msgid "Disk"
msgstr ""
msgstr "Festplatte"
#: templates/hosting/virtual_machine_detail.html:98
msgid "Configuration"
msgstr ""
msgstr "Konfiguration"
#: templates/hosting/virtual_machine_detail.html:108
msgid "Current pricing"
msgstr ""
msgstr "Aktueller Preis"
#: templates/hosting/virtual_machine_detail.html:117
msgid "Current status"
msgstr ""
msgstr "Aktueller Status"
#: templates/hosting/virtual_machine_detail.html:142
msgid "Terminate Virtual Machine"
msgstr ""
msgstr "Virtuelle Maschine beenden"
#: templates/hosting/virtual_machine_detail.html:163
msgid "Terminate your Virtual Machine"
msgstr ""
msgstr "Ihre virtuelle Maschine beenden"
#: templates/hosting/virtual_machine_detail.html:166
msgid "Are you sure do you want to cancel your Virtual Machine "
@ -392,43 +452,57 @@ msgstr ""
#: templates/hosting/virtual_machine_detail.html:166
msgid "plan?"
msgstr ""
msgstr "Sind Sie sicher, dass Sie ihre virtuelle Maschine beenden wollen "\
#: templates/hosting/virtual_machine_detail.html:169
msgid "Cancel"
msgstr ""
msgstr "Beenden"
#: templates/hosting/virtual_machine_key.html:11
msgid "Access Key"
msgstr ""
msgstr "Zugriffsschlüssel"
#: hosting/templates/hosting/virtual_machine_key.html:25
msgid "Upload your own key. "
msgstr ""
msgstr "Laden Sie ihren Schlüssel hoch"
#: hosting/templates/hosting/virtual_machine_key.html:29
msgid "Upload Key"
msgstr "Schlüssel hochladen"
#: hosting/templates/hosting/virtual_machine_key.html:33
msgid "Or generate a new key pair."
msgstr ""
msgstr "Oder erstellen Sie ein neues Schlüsselpaar"
#: hosting/templates/hosting/virtual_machine_key.html:31
msgid "Generate Key Pair"
msgstr "Schlüsselpaar generieren"
#: hosting/templates/hosting/virtual_machine_key.html:40
msgid ""
"Use your created key to access to the machine. If you lost it, contact us."
msgstr ""
"Verwenden Sie Ihren privaten SSH Schlüssel um sich mit Ihren Maschinen zu "
"verbinden. Falls Sie ihn verloren haben kontaktieren Sie uns."
#: hosting/templates/hosting/virtual_machine_key.html:43
msgid "Created at"
msgstr ""
msgstr "Erstellt am"
#: hosting/templates/hosting/virtual_machine_key.html:66
#: hosting/templates/hosting/virtual_machine_key.html:79
msgid "Warning!"
msgstr ""
msgstr "Achtung!"
#: hosting/templates/hosting/virtual_machine_key.html:66
msgid "You can download your SSH private key once. Don't lost your key"
msgstr ""
"Sie können ihren privaten SSH Schlüssel nur einmal herunterladen. Bewaren "
"Sie ihn sicher auf."
#: hosting/templates/hosting/virtual_machine_key.html:74
msgid "Copy to Clipboard"
msgstr ""
msgstr "Kopieren"
#: hosting/templates/hosting/virtual_machine_key.html:75
msgid "Download"
@ -439,18 +513,20 @@ msgid ""
"Your SSH private key was already generated and downloaded, if you lost it, "
"contact us. "
msgstr ""
"Ihr privater SSH Schlüssel wurde bereits generiert und heruntergeladen, "
"falls Sie ihn verloren haben kontaktieren Sie uns."
#: hosting/templates/hosting/virtual_machine_key.html:82
msgid "Generate my key"
msgstr ""
msgstr "Generiere meinen Schlüssel"
#: templates/hosting/virtual_machines.html:9
msgid "Virtual Machines"
msgstr ""
msgstr "Virtuelle Maschinen"
#: templates/hosting/virtual_machines.html:22
msgid "Create VM"
msgstr ""
msgstr "Neue VM"
#: templates/hosting/virtual_machines.html:28
msgid "ID"

View file

@ -1,5 +1,8 @@
$( document ).ready(function() {
$.ajaxSetup({
beforeSend: function(xhr, settings) {
function getCookie(name) {
@ -26,6 +29,12 @@ $( document ).ready(function() {
var hasCreditcard = window.hasCreditcard || false;
if (!hasCreditcard){
var stripe = Stripe(window.stripeKey);
var elements = stripe.elements({locale: window.current_lan});
var card = elements.create('card', options={hidePostalCode: true});
card.mount('#card-element');
}
console.log("has creditcard", hasCreditcard);
// hasCreditcard= true;
@ -38,10 +47,8 @@ $( document ).ready(function() {
console.log("creditcard sdasd");
// if (hasCreditcard) {
$('#billing-form').submit();
console.log("has creditcard2");
// }
// $form.submit();
}
@ -53,33 +60,55 @@ $( document ).ready(function() {
function payWithStripe(e) {
e.preventDefault();
/* Visual feedback */
$form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>');
function stripeTokenHandler(token) {
// Insert the token ID into the form so it gets submitted to the server
var form = document.getElementById('payment-form');
var hiddenInput = document.createElement('input');
$('#id_token').val(token.id);
var PublishableKey = window.stripeKey;
Stripe.setPublishableKey(PublishableKey);
Stripe.card.createToken($form, function stripeResponseHandler(status, response) {
if (response.error) {
/* Visual feedback */
$form.find('[type=submit]').html('Try again');
/* Show Stripe errors on the form */
$form.find('.payment-errors').text(response.error.message);
$form.find('.payment-errors').closest('.row').show();
$('#billing-form').submit();
}
stripe.createToken(card).then(function(result) {
if (result.error) {
// Inform the user if there was an error
var errorElement = document.getElementById('card-errors');
errorElement.textContent = result.error.message;
} else {
/* Visual feedback */
$form.find('[type=submit]').html('Processing <i class="fa fa-spinner fa-pulse"></i>');
/* Hide Stripe errors on the form */
$form.find('.payment-errors').closest('.row').hide();
$form.find('.payment-errors').text("");
// response contains id and card, which contains additional card details
var token = response.id;
// AJAX
//set token on a hidden input
$('#id_token').val(token);
$('#billing-form').submit();
// Send the token to your server
stripeTokenHandler(result.token);
}
});
// /* Visual feedback */
// $form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>');
// var PublishableKey = window.stripeKey;
// Stripe.setPublishableKey(PublishableKey);
// Stripe.card.createToken($form, function stripeResponseHandler(status, response) {
// if (response.error) {
// /* Visual feedback */
// $form.find('[type=submit]').html('Try again');
// /* Show Stripe errors on the form */
// $form.find('.payment-errors').text(response.error.message);
// $form.find('.payment-errors').closest('.row').show();
// } else {
// /* Visual feedback */
// $form.find('[type=submit]').html('Processing <i class="fa fa-spinner fa-pulse"></i>');
// /* Hide Stripe errors on the form */
// $form.find('.payment-errors').closest('.row').hide();
// $form.find('.payment-errors').text("");
// // response contains id and card, which contains additional card details
// var token = response.id;
// // AJAX
// //set token on a hidden input
// $('#id_token').val(token);
// $('#billing-form').submit();
// }
// });
}
/* Form validation */
@ -131,7 +160,7 @@ $( document ).ready(function() {
} else {
return false;
}
}
};
// $form.find('[type=submit]').prop('disabled', true);
// var readyInterval = setInterval(function() {

View file

@ -85,7 +85,7 @@
<ul id="g-account-menu" class="dropdown-menu" role="menu">
<li><a href="{% url 'hosting:logout' %}"><i class="glyphicon glyphicon-lock"></i>{% trans "Logout"%} </a></li>
<li>
<a href="{% url 'hosting:key_pair' %}">
<a href="{% url 'hosting:ssh_keys' %}">
<i class="fa fa-key"></i> {% trans "Keys"%}
</a>
</li>
@ -128,7 +128,46 @@
{% if request.user.is_authenticated %}
<footer class="navbar-fixed-bottom">
<div class="container">
<<<<<<< HEAD
<p class="copyright text-muted small">Copyright &copy; ungleich GmbH {% now "Y" %}. All Rights Reserved</p>
=======
<div class="row">
<div class="col-lg-12 hidden-xs">
<ul class="list-inline">
<li>
<a href="#">{% trans "Home"%}</a>
</li>
<li class="footer-menu-divider">&sdot;</li>
<li>
<a href="{% url 'hosting:virtual_machines' %}">
{% trans "My Virtual Machines"%}
</a>
</li>
<li class="footer-menu-divider">&sdot;</li>
<li>
<a href="{% url 'hosting:orders' %}">
{% trans "My Orders"%}
</a>
</li>
<li>&sdot;</li>
<li>
<li>
<a href="{% url 'hosting:ssh_keys' %}">
{% trans "Keys"%}
</a>
</li>
<li class="footer-menu-divider">&sdot;</li>
<li>
<a href="{% url 'hosting:notifications' %}">
{% trans "Notifications "%}
</a>
</li>
</ul>
<p class="copyright text-muted small">Copyright &copy; ungleich GmbH {% now "Y" %}. All Rights Reserved</p>
</div>
</div>
>>>>>>> f4997f041ca9496bf9a63706726a20d0a31d1c28
</div>
</footer>
{% endif %}
@ -149,8 +188,9 @@
<!-- Init JavaScript -->
<script src="{% static 'hosting/js/initial.js' %}"></script>
<script src="https://js.stripe.com/v3/"></script>
<script src="https://js.stripe.com/v2/"></script>
<!-- Stripe Lib -->
<script type="text/javascript" src="//js.stripe.com/v2/"></script>
<!-- Proccess payment lib -->
<script type="text/javascript" src="{% static 'hosting/js/payment.js' %}"></script>

View file

@ -21,7 +21,7 @@
<form method="POST" action="">
{% csrf_token %}
<div class="form-group">
Select VM Template:
{% trans "Select VM Template:" %}
<select name="vm_template_id">
{% for template in templates %}
<option value="{{template.id}}">{{template.name}} </option>
@ -29,14 +29,14 @@
</select>
</div>
<div class="form-group">
Select VM Configuration:
{% trans "Select VM Configuration:" %}
<select name="configuration">
{% for config in configuration_options %}
<option value="{{config.id}}">
CORE: {{config.cpu|floatformat}},
RAM: {{config.memory|floatformat}} GiB,
SSD: {{config.disk_size|floatformat}} GiB,
PRICE: {{config.price|floatformat}} CHF/Month
RAM: {{config.memory|floatformat}} GB,
SSD: {{config.disk_size|floatformat}} GB,
PRICE: {{config.price|floatformat}} {% trans "CHF/Month" %}
</option>
{% endfor %}
</select>

View file

@ -53,7 +53,7 @@
</button>
</div>
<div class="modal-body">
<h4 class="modal-title" id="ModalLabel">{% trans "Do You want do delete your order?"%}</h4>
<h4 class="modal-title" id="ModalLabel">{% trans "Do You want to delete your order?"%}</h4>
<form method="post"
action="{% url 'hosting:delete_order' order.id %}">

View file

@ -9,18 +9,18 @@
<form role="form" novalidate>
<div class="row">
<div class="col-xs-12">
<h3><b>Billing Amount</b></h3>
<h3><b>{%trans "Billing Amount" %}</b></h3>
<hr>
<div class="content">
<!-- <p><b>Type</b> <span class="pull-right">{{request.session.vm_specs.location_code}}</span></p> -->
<!-- <hr> -->
<p><b>Cores</b> <span
<p><b>{%trans "Cores"%}</b> <span
class="pull-right">{{request.session.specs.cpu|floatformat}}</span></p>
<hr>
<p><b>Memory</b> <span
<p><b>{%trans "Memory"%}</b> <span
class="pull-right">{{request.session.specs.memory|floatformat}} GiB</span></p>
<hr>
<p><b>Disk space</b> <span
<p><b>{%trans "Disk space"%}</b> <span
class="pull-right">{{request.session.specs.disk_size|floatformat}} GiB</span></p>
<hr>
<h4>Total<p
@ -32,7 +32,7 @@
</div>
<div class="col-xs-12 col-md-4 billing">
<h3><b>Billing Address</b></h3>
<h3><b>{%trans "Billing Address"%}</b></h3>
<hr>
<form role="form" id="billing-form" method="post" action="" novalidate>
{% for field in form %}
@ -46,7 +46,7 @@
<div class="row">
<div class="col-xs-12 col-md-offset-2 col-md-4 "></div>
<div class="col-xs-12 col-md-4 creditcard-box">
<h3><b>Payment Details</b></h3>
<h3><b>{%trans "Payment Details"%}</b></h3>
<hr>
<div>
<div>
@ -57,17 +57,33 @@
<h5 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h5>
<input type="hidden" name="credit_card_needed" value="false"/>
</form>
<button id="payment_button_with_creditcard" class="btn btn-success btn-lg btn-block" type="submit">Submit Payment</button>
<div class="col-xs-6">
<button id="payment_button_with_creditcard" class="btn btn-success btn-sm btn-block" type="submit">
{% trans "Submit Payment" %}
</button>
</div>
{% else %}
<form role="form" id="payment-form" novalidate>
<div class="row">
<div class="row">
<div class="form-group">
<div id="card-element">
<!-- a Stripe Element will be inserted here. -->
</div>
</div>
</div>
<div id="card-errors" role="alert"></div>
<!-- <div class="row">
<div class="col-xs-9 col-md-12">
<div class="form-group">
<label class="control-label" for="cardNumber">CARD NUMBER</label>
<label class="control-label" for="cardNumber">{%trans "CARD NUMBER"%}</label>
<div class="input-group">
<input type="text" class="form-control" name="cardNumber" placeholder="Valid Card Number" required autofocus data-stripe="number" />
<input type="text"
class="form-control"
name="cardNumber"
placeholder="{%trans "Valid Card Number"%}" required autofocus data-stripe="number" />
<span class="input-group-addon"><i class="fa fa-credit-card"></i></span>
</div>
</div>
@ -76,7 +92,7 @@
<div class="row">
<div class="col-xs-6 col-md-7">
<div class="form-group">
<label for="expMonth">EXPIRATION DATE</label><br/>
<label for="expMonth">{%trans "EXPIRATION DATE"%}</label><br/>
<div class="col-xs-6 col-lg-6 col-md-6 pl-ziro">
<input type="text" class="form-control" name="expMonth" placeholder="MM" required data-stripe="exp_month" />
</div>
@ -87,14 +103,14 @@
</div>
<div class="col-xs-4 col-md-5 pull-right">
<div class="form-group">
<label for="cvCode">CV CODE</label>
<label for="cvCode">{%trans "CV CODE"%}</label>
<input type="password" class="form-control" name="cvCode" placeholder="CV" required data-stripe="cvc" />
</div>
</div>
</div>
</div> -->
<div class="row">
<div class="col-xs-12">
<button class="btn btn-success btn-lg btn-block" type="submit">Submit Payment</button>
<div class="col-xs-6 float-right">
<button class="btn btn-success btn-sm btn-block" type="submit">Submit Payment</button>
</div>
</div>
<div class="row" style="display:none;">
@ -115,6 +131,7 @@
</form>
{% endif %}
</div>
</div>
</div>
@ -125,8 +142,14 @@
<!-- stripe key data -->
{% if stripe_key %}
{% get_current_language as LANGUAGE_CODE %}
<script type="text/javascript">
(function () {window.stripeKey = "{{stripe_key}}";})();
(function () {
window.stripeKey = "{{stripe_key}}";
window.current_lan = "{{LANGUAGE_CODE}}";
})();
</script>
{%endif%}

View file

@ -17,7 +17,6 @@
</div>
{% endif %}
{% for field in form %}
{% bootstrap_field field %}
{% endfor %}
{% buttons %}
@ -32,33 +31,8 @@
</button>
{% endbuttons %}
<div class="form-group">
</div>
<h5> Use your created key to access to the machine. If you lost it, contact us. </h5>
<table class="table borderless table-hover">
<br/>
<thead>
<tr>
<th>{% trans "Name"%}</th>
<th>{% trans "Created at"%} </th>
<th>{% trans "Status"%} </th>
<th></th>
</tr>
</thead>
<tbody>
{% for user_key in keys %}
<tr>
<td scope="row">{{user_key.name}}</td>
<td>{{user_key.created_at}}</td>
<td>
<span class="h3 label label-success"><strong>Active</strong></span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</form>
</form>
<h5> Use your created key to access to the machine. If you lost it, contact us. </h5>
{% if private_key %}
<div class="alert alert-warning">
@ -69,17 +43,7 @@
<textarea class="form-control" rows="6" id="ssh_key" type="hidden" style="display:none">{{private_key}}</textarea>
</div>
<!-- <div class="form-group pull-right">
<button type="button" id="copy_to_clipboard" data-clipboard-target="#ssh_key" class="btn btn-warning"
data-toggle="tooltip" data-placement="bottom" title="Copied" data-trigger="click">{% trans "Copy to Clipboard"%}</button>
<button type="button" id="download_ssh_key" class="btn btn-warning">{% trans "Download"%}</button>
</div> -->
{% else %}
<!-- <div class="alert alert-warning">
<strong>{% trans "Warning!"%}</strong>{% trans "Your SSH private key was already generated and downloaded, if you lost it, contact us. "%}
</div>
--> {% endif %}
<!-- <a class="btn btn-success" href="{% url 'hosting:virtual_machines' %}">{% trans "Generate my key"%} </a> -->
{% endif %}
<div class="clearfix"></div>
</div>
</div>

View file

@ -0,0 +1,96 @@
{% extends "hosting/base_short.html" %}
{% load staticfiles bootstrap3 i18n %}
{% block content %}
<div>
<div class="container virtual-machine-container dashboard-container ">
<div class="row">
<div class="col-md-9 col-md-offset-2">
<div class="col-sm-12">
<h3><i class="fa fa-key" aria-hidden="true"></i>{% trans "Access Key"%} </h3>
{% if messages %}
<div class="alert alert-warning">
{% for message in messages %}
<span>{{ message }}</span>
{% endfor %}
</div>
{% endif %}
<p class="pull-right">
<a class="btn btn-success" href="{% url 'hosting:create_ssh_key' %}" >{% trans "Add Key"%} </a>
</p>
<h5> Use your created key to access to the machine. If you lost it, contact us. </h5>
<table class="table borderless table-hover">
<br/>
<thead>
<tr>
<th>{% trans "Name"%}</th>
<th>{% trans "Created at"%} </th>
<th>{% trans "Status"%} </th>
<th></th>
</tr>
</thead>
<tbody>
{% for user_key in keys %}
<tr>
<td scope="row">{{user_key.name}}</td>
<td>{{user_key.created_at}}</td>
<td>
<span class="h3 label label-success"><strong>Active</strong></span>
</td>
<td>
<button type="button" class="btn btn-default" data-toggle="modal"
data-target="#Modal{{ user_key.id }}"><a
href="#">{% trans "Delete Key"%}</a>
</button>
<div class="modal fade" id="Modal{{user_key.id }}" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Confirm"><span
aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<h4 class="modal-title" id="ModalLabel">{% trans "Do You want to delete this key?"%}</h4>
<form method="post" action="{% url 'hosting:delete_ssh_key' user_key.id %}">
{% csrf_token %}
<div class="modal-footer">
<button type="button" class="btn btn-default"
data-dismiss="modal">
{% trans "Close"%}
</button>
<button type="submit" class="btn btn-primary">{% trans "Delete"%}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="clearfix"></div>
</div>
</div>
</div>
</div>
</div>
{% if next_url %}
<script type="text/javascript">
window.location.href = '{{next_url}}';
</script>
{% endif %}
{%endblock%}

View file

@ -163,7 +163,7 @@
{% trans "Terminate your Virtual Machine"%}
</div>
<div class="modal-body">
{% trans "Are you sure do you want to cancel your Virtual Machine "%} {{virtual_machine.name}} {% trans "plan?"%}
{% trans "Are you sure do you want to cancel your Virtual Machine "%} {{virtual_machine.name}} ?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Cancel"%}</button>

View file

@ -2,4 +2,6 @@ from django.test import TestCase
# Create your tests here.
test_user_can_add_key()
test_user_can_add_ssh_key()
test_user_can_delete_ssh_ke()

View file

@ -3,9 +3,10 @@ from django.conf.urls import url
from .views import DjangoHostingView, RailsHostingView, PaymentVMView,\
NodeJSHostingView, LoginView, SignupView, IndexView, \
OrdersHostingListView, OrdersHostingDetailView, VirtualMachinesPlanListView,\
VirtualMachineView, GenerateVMSSHKeysView, OrdersHostingDeleteView, NotificationsView, \
VirtualMachineView, OrdersHostingDeleteView, NotificationsView, \
MarkAsReadNotificationView, PasswordResetView, PasswordResetConfirmView, HostingPricingView,\
CreateVirtualMachinesView, HostingBillListView, HostingBillDetailView
CreateVirtualMachinesView, HostingBillListView, HostingBillDetailView, \
SSHKeyDeleteView, SSHKeyCreateView, SSHKeyListView
urlpatterns = [
url(r'index/?$', IndexView.as_view(), name='index'),
@ -23,10 +24,12 @@ urlpatterns = [
url(r'my-virtual-machines/?$', VirtualMachinesPlanListView.as_view(), name='virtual_machines'),
url(r'my-virtual-machines/(?P<pk>\d+)/?$', VirtualMachineView.as_view(),
name='virtual_machines'),
# url(r'my-virtual-machines/(?P<pk>\d+)/delete/?$', VirtualMachineCancelView.as_view(),
# name='virtual_machines_cancel'),
url(r'vm-key-pair/?$', GenerateVMSSHKeysView.as_view(),
name='key_pair'),
url(r'ssh_keys/?$', SSHKeyListView.as_view(),
name='ssh_keys'),
url(r'delete_ssh_key/(?P<pk>\d+)/?$', SSHKeyDeleteView.as_view(),
name='delete_ssh_key'),
url(r'create_ssh_key/?$', SSHKeyCreateView.as_view(),
name='create_ssh_key'),
url(r'^notifications/$', NotificationsView.as_view(), name='notifications'),
url(r'^notifications/(?P<pk>\d+)/?$', MarkAsReadNotificationView.as_view(),
name='read_notification'),

View file

@ -188,7 +188,7 @@ class SignupView(CreateView):
template_name = 'hosting/signup.html'
form_class = HostingUserSignupForm
model = CustomUser
success_url = reverse_lazy('hosting:key_pair')
success_url = reverse_lazy('hosting:ssh_keys')
def get_success_url(self):
next_url = self.request.session.get(
@ -288,31 +288,58 @@ class MarkAsReadNotificationView(LoginRequiredMixin, UpdateView):
return HttpResponseRedirect(reverse('hosting:notifications'))
class GenerateVMSSHKeysView(LoginRequiredMixin, FormView):
class SSHKeyDeleteView(LoginRequiredMixin, DeleteView):
login_url = reverse_lazy('hosting:login')
success_url = reverse_lazy('hosting:ssh_keys')
model = UserHostingKey
def delete(self, request, *args, **kwargs):
owner = self.request.user
manager = OpenNebulaManager()
pk = self.kwargs.get('pk')
# Get user ssh key
public_key = UserHostingKey.objects.get(pk=pk)
# Add ssh key to user
try:
manager.remove_public_key(user=owner, public_key=public_key)
except ConnectionError:
pass
except WrongNameError:
pass
return super(SSHKeyDeleteView, self).delete(request, *args, **kwargs)
class SSHKeyListView(LoginRequiredMixin, ListView):
template_name = "hosting/user_keys.html"
login_url = reverse_lazy('hosting:login')
context_object_name = "keys"
model = UserHostingKey
paginate_by = 10
ordering = '-id'
def get_queryset(self):
user = self.request.user
self.queryset = UserHostingKey.objects.filter(user=user)
return super(SSHKeyListView, self).get_queryset()
def render_to_response(self, context, **response_kwargs):
if not self.queryset:
return HttpResponseRedirect(reverse('hosting:create_ssh_key'))
return super(SSHKeyListView, self).render_to_response(context, **response_kwargs)
class SSHKeyCreateView(LoginRequiredMixin, FormView):
form_class = UserHostingKeyForm
model = UserHostingKey
template_name = 'hosting/virtual_machine_key.html'
template_name = 'hosting/user_key.html'
login_url = reverse_lazy('hosting:login')
context_object_name = "virtual_machine"
success_url = reverse_lazy('hosting:ssh_keys')
def get_context_data(self, **kwargs):
context = super(
GenerateVMSSHKeysView,
self
).get_context_data(**kwargs)
user_keys = UserHostingKey.objects.filter(
user=self.request.user
)
context.update({
'keys': user_keys
})
return context
def get_form_kwargs(self):
kwargs = super(GenerateVMSSHKeysView, self).get_form_kwargs()
kwargs = super(SSHKeyCreateView, self).get_form_kwargs()
kwargs.update({'request': self.request})
return kwargs
@ -339,22 +366,22 @@ class GenerateVMSSHKeysView(LoginRequiredMixin, FormView):
})
owner = self.request.user
# Create OpenNebulaManager
manager = OpenNebulaManager(email=owner.email,
password=owner.password)
# Get OpenNebula user id
user_pool = manager._get_user_pool()
opennebula_user = user_pool.get_by_name(owner.email)
manager = OpenNebulaManager()
# Get user ssh key
public_key = form.cleaned_data.get('public_key')
# Add ssh key to user
manager.oneadmin_client.call('user.update', opennebula_user.id,
'<CONTEXT><SSH_PUBLIC_KEY>{key}</SSH_PUBLIC_KEY></CONTEXT>'.format(key=public_key))
try:
manager.add_public_key(user=owner, public_key=public_key, merge=True)
except ConnectionError:
pass
except WrongNameError:
pass
return render(self.request, self.template_name, context)
return HttpResponseRedirect(self.success_url)
def post(self, request, *args, **kwargs):
print(self.request.POST.dict())
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
@ -412,7 +439,7 @@ class PaymentVMView(LoginRequiredMixin, FormView):
request,
'In order to create a VM, you create/upload your SSH KEY first.'
)
return HttpResponseRedirect(reverse('hosting:key_pair'))
return HttpResponseRedirect(reverse('hosting:ssh_keys'))
if 'next' in request.session:
del request.session['next']
@ -628,7 +655,7 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
request,
'In order to create a VM, you need to create/upload your SSH KEY first.'
)
return HttpResponseRedirect(reverse('hosting:key_pair'))
return HttpResponseRedirect(reverse('hosting:ssh_keys'))
try:
manager = OpenNebulaManager()

View file

@ -16,7 +16,7 @@
</h2>
</a>
<p class="post-meta" style="font-size:0.9em;">
Posted on {{ post.date_published|date:"DATE_FORMAT" }}
{% trans "Posted on" %}{{ post.date_published|date:"DATE_FORMAT" }}
</p>
<p class="post-subtitle">

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-26 13:35+0000\n"
"POT-Creation-Date: 2017-05-30 13:47+0000\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"

View file

@ -17,7 +17,7 @@ class SignupFormMixin(forms.ModelForm):
model = CustomUser
fields = ['name', 'email', 'password']
widgets = {
'name': forms.TextInput(attrs={'placeholder': 'Enter your name or company name'}),
'name': forms.TextInput(attrs={'placeholder': _('Enter your name or company name')}),
}
def clean_confirm_password(self):

View file

@ -10,6 +10,7 @@ def handleStripeError(f):
'response_object': None,
'error': None
}
common_message = "Currently its not possible to make payments."
try:
response_object = f(*args, **kwargs)