Fix conflicts
This commit is contained in:
		
				commit
				
					
						c69694274f
					
				
			
		
					 26 changed files with 533 additions and 257 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -34,3 +34,4 @@ secret-key | |||
| .idea/ | ||||
| 
 | ||||
| .env | ||||
| *.mo | ||||
|  |  | |||
|  | @ -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  | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							|  | @ -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" | ||||
|  |  | |||
|  | @ -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> | ||||
|  |  | |||
|  | @ -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 " | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							|  | @ -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 "" | ||||
|  |  | |||
|  | @ -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"> | ||||
|  |  | |||
|  | @ -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" | ||||
|  |  | |||
|  | @ -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() {
 | ||||
|  |  | |||
|  | @ -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 © 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">⋅</li> | ||||
|                         <li> | ||||
|                             <a href="{% url 'hosting:virtual_machines' %}"> | ||||
|                                 {% trans "My Virtual Machines"%} | ||||
|                             </a> | ||||
|                         </li> | ||||
|                         <li class="footer-menu-divider">⋅</li> | ||||
|                         <li> | ||||
|                            <a href="{% url 'hosting:orders' %}"> | ||||
|                                 {% trans "My Orders"%} | ||||
|                             </a> | ||||
|                         </li> | ||||
|                         <li>⋅</li> | ||||
|                         <li> | ||||
|                         <li> | ||||
|                             <a href="{% url 'hosting:ssh_keys' %}"> | ||||
|                                 {% trans "Keys"%} | ||||
|                             </a> | ||||
|                         </li> | ||||
|                         <li class="footer-menu-divider">⋅</li> | ||||
|                         <li> | ||||
|                            <a href="{% url 'hosting:notifications' %}"> | ||||
|                                 {% trans "Notifications "%} | ||||
|                             </a> | ||||
|                         </li> | ||||
| 
 | ||||
|                     </ul> | ||||
|                     <p class="copyright text-muted small">Copyright © 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> | ||||
|  |  | |||
|  | @ -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> | ||||
|  |  | |||
|  | @ -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 %}"> | ||||
|  |  | |||
|  | @ -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%} | ||||
| 
 | ||||
|  |  | |||
|  | @ -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> | ||||
							
								
								
									
										96
									
								
								hosting/templates/hosting/user_keys.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								hosting/templates/hosting/user_keys.html
									
										
									
									
									
										Normal 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">×</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%} | ||||
| 
 | ||||
|  | @ -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> | ||||
|  |  | |||
|  | @ -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() | ||||
|  |  | |||
|  | @ -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'), | ||||
|  |  | |||
|  | @ -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() | ||||
|  |  | |||
|  | @ -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"> | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							|  | @ -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" | ||||
|  |  | |||
|  | @ -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): | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue