def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Name des zu löschenden Load Balancers holen loadbalancer_name = self.request.get('name') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("61", "63", "66", "68"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "62", "64", "65", "67", "69"): input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" try: # Liste mit den Instanzen # Man kann nicht direkt versuchen mit get_all_security_groups(gruppen_liste) # die anzulegende Gruppe zu erzeugen. Wenn die Gruppe noch nicht existiert, # gibt es eine Fehlermeldung liste_reservations = conn_region.get_all_instances() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/loadbalancer?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/loadbalancer?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat und die Liste geholt wurde... # Anzahl der Elemente in der Liste laenge_liste_reservations = len(liste_reservations) if laenge_liste_reservations == "0": # Wenn es keine laufenden Instanzen gibt instanzen_in_region = 0 else: # Wenn es laufenden Instanzen gibt instanzen_in_region = 0 for i in liste_reservations: for x in i.instances: # Für jede Instanz wird geschaut... # ...ob die Instanz in der Region des Volumes liegt und läuft if x.state == u'running': instanzen_in_region = instanzen_in_region + 1 # Mit ELB verbinden conn_elb = loginelb(username) try: # Liste mit den LoadBalancern liste_load_balancers = conn_elb.get_all_load_balancers( load_balancer_names=str(loadbalancer_name)) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/loadbalancer?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/loadbalancer?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... tabelle_instanz_anhaengen = '' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<form action="/loadbalancer_instanz_zuordnen?loadbalancer=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + loadbalancer_name tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + "&mobile=" tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + str( mobile) tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" method="post" accept-charset="utf-8">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<table border="0" cellspacing="0" cellpadding="5">\n' # Wenn dem Load Balancer noch keine Instanzen zugewiesen wurden... if len(liste_load_balancers[0].instances) == 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td colspan="2">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'Es wurden noch keine Instanzen zugewiesen' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'No instances asigned yet' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' # Wenn dem Load Balancer schon Instanzen zugewiesen wurden... else: for z in range(len(liste_load_balancers[0].instances)): tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<a href="/loadbalancer_deregister_instance?loadbalancer=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + loadbalancer_name tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '&instanz=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + liste_load_balancers[ 0].instances[z].id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + "&mobile=" tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + str( mobile) if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" title="Instanz deregistrieren">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Instanz deregistrieren"></a>' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" title="deregister instance">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister instance"></a>' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td colspan="2">\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + liste_load_balancers[ 0].instances[z].id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' # Wenn mehr als eine Instanz dem Load Balancer zugewiesen ist, dann muss hier ein # leeres Feld hin. Sonst sieht die Tabelle nicht gut aus! if len(liste_load_balancers[0].instances) != 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td> </td>\n' if instanzen_in_region == 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center" colspan="2">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'Sie haben keine Instanzen' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'You have no instances' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' else: if instanzen_in_region > 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center">\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<select name="instanzen" size="1">\n' for i in liste_reservations: for x in i.instances: if x.state == u'running': tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<option>' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + x.id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</option>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</select>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<input type="submit" value="verknüpfen">' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<input type="submit" value="associate">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</table>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</form>' try: # Liste mit den Zonen liste_zonen = conn_region.get_all_zones() except EC2ResponseError: # Wenn es nicht geklappt hat... if sprache == "de": tabelle_zonen_aendern = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: tabelle_zonen_aendern = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": tabelle_zonen_aendern = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: tabelle_zonen_aendern = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_zonen = len(liste_zonen) tabelle_zonen_aendern = '' tabelle_zonen_aendern = tabelle_zonen_aendern + '<form action="/loadbalancer_zone_zuordnen?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str( mobile) tabelle_zonen_aendern = tabelle_zonen_aendern + '" method="post" accept-charset="utf-8">' tabelle_zonen_aendern = tabelle_zonen_aendern + '\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<table border="0" cellspacing="0" cellpadding="5">\n' for z in range( len(liste_load_balancers[0].availability_zones) ): tabelle_zonen_aendern = tabelle_zonen_aendern + '<tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td>\n' # Wenn dem Load Balancer nur eine Zone zugewiesen ist... if len(liste_load_balancers[0].availability_zones ) == 1: tabelle_zonen_aendern = tabelle_zonen_aendern + '<a href="/loadbalanceraendern?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + '&message=67' tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str( mobile) if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="Zone deregistrieren">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Zone deregistrieren"></a>' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="deregister zone">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister zone"></a>' # Wenn dem Load Balancer mehr als nur eine Zone zugewiesen ist... else: tabelle_zonen_aendern = tabelle_zonen_aendern + '<a href="/loadbalancer_deregister_zone?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + '&zone=' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_load_balancers[ 0].availability_zones[z] tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str( mobile) if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="Zone deregistrieren">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Zone deregistrieren"></a>' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="deregister zone">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister zone"></a>' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td colspan="2">\n' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_load_balancers[ 0].availability_zones[z] tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<tr>\n' # Wenn mehr als eine Instanz dem Load Balancer zugewiesen ist, dann muss hier ein # leeres Feld hin. Sonst sieht die Tabelle nicht gut aus! if len(liste_load_balancers[0].availability_zones ) != 0: tabelle_zonen_aendern = tabelle_zonen_aendern + '<td> </td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td align="center">\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<select name="zonen" size="1">\n' for i in range(laenge_liste_zonen): tabelle_zonen_aendern = tabelle_zonen_aendern + '<option>' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_zonen[ i].name tabelle_zonen_aendern = tabelle_zonen_aendern + '</option>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</select>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td align="center">\n' if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '<input type="submit" value="verknüpfen">' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '<input type="submit" value="associate">' tabelle_zonen_aendern = tabelle_zonen_aendern + '\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</table>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</form>' path = '&path=loadbalanceraendern&name=' + loadbalancer_name + '&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'load_balancer_name': loadbalancer_name, 'tabelle_instanz_anhaengen': tabelle_instanz_anhaengen, 'tabelle_zonen_aendern': tabelle_zonen_aendern, 'input_error_message': input_error_message, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "loadbalancer_change.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "loadbalancer_change.html") self.response.out.write( template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # self.response.out.write('posted!') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("105", "110"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("92", "106", "107", "108", "109"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" # Mit S3 verbinden conn_s3 = logins3(username) try: # Liste der Buckets liste_buckets = conn_s3.get_all_buckets() except: # Wenn es nicht klappt... if sprache == "de": bucketstabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: bucketstabelle = '<font color="red">An error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_buckets = len(liste_buckets) if laenge_liste_buckets == 0: if sprache == "de": bucketstabelle = 'Es sind keine Buckets in der Region vorhanden.' else: bucketstabelle = 'Still no buckets exist inside this region.' else: if mobile == "true": # Mobile version bucketstabelle = '' bucketstabelle += '<table border="0" cellspacing="0" cellpadding="5">' for i in range(laenge_liste_buckets): bucketstabelle += '<tr>' bucketstabelle += '<td align="left">' bucketstabelle += '<a href="/bucketentfernen?bucket=' bucketstabelle += str(liste_buckets[i].name) bucketstabelle += "&mobile=" bucketstabelle += str(mobile) if sprache == "de": bucketstabelle += '" title="Bucket löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Bucket löschen"></a>' else: bucketstabelle += '" title="erase bucket"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase bucket"></a>' bucketstabelle += '</td>' bucketstabelle += '<td colspan="4" align="left">'+str(liste_buckets[i].name)+'</td>' bucketstabelle += '</tr>' bucketstabelle += '<tr>' bucketstabelle += '<td> </td>' if sprache == "de": bucketstabelle += '<td align="right"><b>Reines S3:</b></td>' else: bucketstabelle += '<td align="right"><b>pure S3:</b></td>' bucketstabelle += '<td align="left">' bucketstabelle += '<a href="/bucket_inhalt_pure?bucket=' bucketstabelle += str(liste_buckets[i].name) bucketstabelle += "&mobile=" bucketstabelle += str(mobile) if sprache == "de": bucketstabelle += '" title="Bucket einsehen (reine S3-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' else: bucketstabelle += '" title="List content of this bucket (pure S3)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' bucketstabelle += '</td>' if sprache == "de": bucketstabelle += '<td align="right"><b>Komfort S3:</b></td>' else: bucketstabelle += '<td align="right"><b>comfort S3:</b></td>' bucketstabelle += '<td align="left">' bucketstabelle += '<a href="/bucket_inhalt?bucket=' bucketstabelle += str(liste_buckets[i].name) bucketstabelle += "&mobile=" bucketstabelle += str(mobile) if sprache == "de": bucketstabelle += '" title="Bucket einsehen (Komfort-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' else: bucketstabelle += '" title="List content of this bucket (S3 with more comfort)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' bucketstabelle += '</td>' bucketstabelle += '</tr>' bucketstabelle += '</table>' else: # Not the mobile version bucketstabelle = '' bucketstabelle += '<table border="0" cellspacing="0" cellpadding="5">' bucketstabelle += '<tr>' bucketstabelle += '<th> </th>' bucketstabelle += '<th align="left">Buckets</th>' if sprache == "de": bucketstabelle += '<th>Reine S3-Darstellung</th>' bucketstabelle += '<th>Komfort-Darstellung</th>' else: bucketstabelle += '<th>Pure S3</th>' bucketstabelle += '<th>S3 with more comfort</th>' bucketstabelle += '</tr>' for i in range(laenge_liste_buckets): bucketstabelle += '<tr>' bucketstabelle += '<td>' bucketstabelle += '<a href="/bucketentfernen?bucket=' bucketstabelle += str(liste_buckets[i].name) bucketstabelle += "&mobile=" bucketstabelle += str(mobile) if sprache == "de": bucketstabelle += '" title="Bucket löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Bucket löschen"></a>' else: bucketstabelle += '" title="erase bucket"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase bucket"></a>' bucketstabelle += '</td>' bucketstabelle += '<td>'+str(liste_buckets[i].name)+'</td>' bucketstabelle += '<td align="center">' bucketstabelle += '<a href="/bucket_inhalt_pure?bucket=' bucketstabelle += str(liste_buckets[i].name) if sprache == "de": bucketstabelle += '" title="Bucket einsehen (reine S3-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' else: bucketstabelle += '" title="List content of this bucket (pure S3)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' bucketstabelle += '</td>' bucketstabelle += '<td align="center">' bucketstabelle += '<a href="/bucket_inhalt?bucket=' bucketstabelle += str(liste_buckets[i].name) if sprache == "de": bucketstabelle += '" title="Bucket einsehen (Komfort-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' else: bucketstabelle += '" title="List content of this bucket (S3 with more comfort)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' bucketstabelle += '</td>' bucketstabelle += '</tr>' bucketstabelle += '</table>' path = '&path=s3&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'bucketstabelle': bucketstabelle, 'input_error_message': input_error_message, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "s3.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "s3.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) for db_eintrag in aktivezone: zugangstyp = db_eintrag.zugangstyp if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) #self.response.out.write(regionname) zonen_liste = zonen_liste_funktion(username, sprache, mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": path = '&path=loadbalancer&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join( os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_google_storage.html") else: path = os.path.join( os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path, template_values)) # It is not Google Storage. It is an IaaS else: if regionname != 'Amazon': #if zugangstyp != 'Amazon': template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "loadbalancer_non_aws.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "loadbalancer_non_aws.html") self.response.out.write( template.render(path, template_values)) else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("9", "70", "72"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "10", "71"): input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" # Mit ELB verbinden conn_elb = loginelb(username) try: # Liste mit den LoadBalancern liste_load_balancers = conn_elb.get_all_load_balancers( ) except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": loadbalancertabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: loadbalancertabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": loadbalancertabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: loadbalancertabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_load_balancers = len(liste_load_balancers) if laenge_liste_load_balancers == 0: if sprache == "de": loadbalancertabelle = 'Sie haben keine Lastverteiler in dieser Region.' else: loadbalancertabelle = 'You have no load balancers inside this region.' else: if mobile == "true": loadbalancertabelle = '' loadbalancertabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">' counter = 0 for i in range(laenge_liste_load_balancers): if counter > 0: loadbalancertabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 loadbalancertabelle += '<tr>' loadbalancertabelle += '<td>' loadbalancertabelle += '<a href="/delete_load_balancer?name=' loadbalancertabelle += liste_load_balancers[ i].name loadbalancertabelle += "&mobile=" loadbalancertabelle += str(mobile) if sprache == "de": loadbalancertabelle += '" title="Load Balancer löschen">' loadbalancertabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Load Balancer löschen"></a>' else: loadbalancertabelle += '" title="delete load balancer">' loadbalancertabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="delete load balancer"></a>' loadbalancertabelle += '</td>' loadbalancertabelle += '<td colspan="2" align="center">' loadbalancertabelle += '<a href="/loadbalanceraendern?name=' loadbalancertabelle += liste_load_balancers[ i].name loadbalancertabelle += "&mobile=" loadbalancertabelle += str(mobile) if sprache == "de": loadbalancertabelle += '" title="Load Balancer einsehen/ändern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Load Balancer einsehen/ändern"></a>' else: loadbalancertabelle += '" title="check/alter load balancer"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="check/alter load balancer"></a>' loadbalancertabelle += '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' loadbalancertabelle += '<td align="right"><b>ID:</b></td>' loadbalancertabelle += '<td colspan="2" align="center">' + liste_load_balancers[ i].name + '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' loadbalancertabelle += '<td align="right"><b>DNS:</b></td>' loadbalancertabelle += '<td colspan="2" align="center">' + liste_load_balancers[ i].dns_name + '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' if sprache == "de": loadbalancertabelle += '<td align="right"><b>Zonen:</b></td>' else: loadbalancertabelle += '<td align="right"><b>Zones:</b></td>' loadbalancertabelle += '<td colspan="2" align="center">' for x in range( len(liste_load_balancers[i]. availability_zones)): loadbalancertabelle += str( liste_load_balancers[i]. availability_zones[x]) loadbalancertabelle += ' ' loadbalancertabelle += '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' if sprache == "de": loadbalancertabelle += '<td align="right"><b>Datum:</b></td>' else: loadbalancertabelle += '<td align="right"><b>Creation Date:</b></td>' loadbalancertabelle += '<td colspan="2" align="center">' datum_der_erzeugung = parse( liste_load_balancers[i].created_time) loadbalancertabelle += str( datum_der_erzeugung.strftime( "%Y-%m-%d %H:%M:%S")) loadbalancertabelle += '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' if sprache == "de": loadbalancertabelle += '<td align="right"><b>Instanzen:</b></td>' else: loadbalancertabelle += '<td align="right"><b>Instances:</b></td>' loadbalancertabelle += '<td colspan="2" align="center">' + str( len(liste_load_balancers[i].instances) ) + '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' loadbalancertabelle += '<td align="right"><b>Ports:</b></td>' loadbalancertabelle += '<td colspan="2" align="center">' for x in range( len(liste_load_balancers[i]. listeners)): loadbalancertabelle += str( liste_load_balancers[i]. listeners[x]) loadbalancertabelle += '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '</table>' else: loadbalancertabelle = '' loadbalancertabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_load_balancers): if counter > 0: loadbalancertabelle += '<tr><td colspan="2"> </td></tr>' counter += 1 loadbalancertabelle += '<tr>' loadbalancertabelle += '<td align="left" bgcolor="#D4D4D4">' loadbalancertabelle += '<a href="/delete_load_balancer?name=' loadbalancertabelle += liste_load_balancers[ i].name loadbalancertabelle += "&mobile=" loadbalancertabelle += str(mobile) if sprache == "de": loadbalancertabelle += '" title="Load Balancer löschen">' loadbalancertabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Load Balancer löschen"></a>' else: loadbalancertabelle += '" title="delete load balancer">' loadbalancertabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="delete load balancer"></a>' loadbalancertabelle += '</td>' loadbalancertabelle += '<td align="left">' loadbalancertabelle += '<a href="/loadbalanceraendern?name=' loadbalancertabelle += liste_load_balancers[ i].name loadbalancertabelle += "&mobile=" loadbalancertabelle += str(mobile) if sprache == "de": loadbalancertabelle += '" title="Load Balancer einsehen/ändern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Load Balancer einsehen/ändern"></a>' else: loadbalancertabelle += '" title="check/alter load balancer"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="check/alter load balancer"></a>' loadbalancertabelle += '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>' loadbalancertabelle += '<td align="left">' + liste_load_balancers[ i].name + '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' if sprache == "de": loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Zonen:</b></td>' else: loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Zones:</b></td>' loadbalancertabelle += '<td align="left">' for x in range( len(liste_load_balancers[i]. availability_zones)): loadbalancertabelle += str( liste_load_balancers[i]. availability_zones[x]) loadbalancertabelle += ' ' loadbalancertabelle += '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' if sprache == "de": loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>' else: loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Creation Date:</b></td>' loadbalancertabelle += '<td align="left">' datum_der_erzeugung = parse( liste_load_balancers[i].created_time) loadbalancertabelle += str( datum_der_erzeugung.strftime( "%Y-%m-%d %H:%M:%S")) loadbalancertabelle += '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' if sprache == "de": loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Instanzen:</b></td>' else: loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Instances:</b></td>' loadbalancertabelle += '<td align="left">' + str( len(liste_load_balancers[i].instances) ) + '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Ports:</b></td>' loadbalancertabelle += '<td align="left">' for x in range( len(liste_load_balancers[i]. listeners)): loadbalancertabelle += str( liste_load_balancers[i]. listeners[x]) loadbalancertabelle += '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '<tr>' loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>DNS:</b></td>' loadbalancertabelle += '<td align="left">' + liste_load_balancers[ i].dns_name + '</td>' loadbalancertabelle += '</tr>' loadbalancertabelle += '</table>' path = '&path=loadbalancer&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'loadbalancertabelle': loadbalancertabelle, 'zonen_liste': zonen_liste, 'input_error_message': input_error_message, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "loadbalancer.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "loadbalancer.html") self.response.out.write( template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, } path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path, template_values)) # It is not Google Storage. It is an IaaS else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("11", "13"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "12", "14"): input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" try: # Liste mit den Snapshots liste_snapshots = conn_region.get_all_snapshots( owner="amazon") except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": snapshotstabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: snapshotstabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": snapshotstabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: snapshotstabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Snapshots in der Liste laenge_liste_snapshots = len(liste_snapshots) if laenge_liste_snapshots == 0: if sprache == "de": snapshotstabelle = 'Es sind keine Snapshots in der Region vorhanden.' else: snapshotstabelle = 'No snapshots exist inside this region.' else: if mobile == "true": # Mobile version of the table snapshotstabelle = '' snapshotstabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">' counter = 0 for i in range(laenge_liste_snapshots): if counter > 0: snapshotstabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="left">' snapshotstabelle += '<a href="/snapshotsentfernen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) snapshotstabelle += "&ami=all" if sprache == "de": snapshotstabelle += '" title="Snapshot löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Snapshot löschen"></a>' else: snapshotstabelle += '" title="erase snapshot"><img src="bilder/delete.png" width="16" height="16" border="0" alt="snapshot volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '<td align="center">' snapshotstabelle += '<a href="/volumeaussnapshoterzeugen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) if sprache == "de": snapshotstabelle += '" title="Volume erzeugen"><img src="bilder/plus.png" width="16" height="16" border="0" alt="Volume erzeugen"></a>' else: snapshotstabelle += '" title="create volume"><img src="bilder/plus.png" width="16" height="16" border="0" alt="create volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="right"><b>ID:</b></td>' snapshotstabelle += '<td align="center">' + liste_snapshots[ i].id + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="right"><b>Volume:</b></td>' snapshotstabelle += '<td align="center"><tt>' + liste_snapshots[ i].volume_id + '</tt></td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Größe:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Size:</b></td>' snapshotstabelle += '<td align="center">' + str( liste_snapshots[i].volume_size ) + ' GB</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="right"><b>Status:</b></td>' if liste_snapshots[i].status == u'completed': snapshotstabelle += '<td bgcolor="#c3ddc3" align="center">' + liste_snapshots[ i].status + '</td>' elif liste_snapshots[i].status == u'pending': snapshotstabelle += '<td bgcolor="#ffffcc" align="center">' + liste_snapshots[ i].status + '</td>' elif liste_snapshots[i].status == u'deleting': snapshotstabelle += '<td bgcolor="#ffcc99" align="center">' + liste_snapshots[ i].status + '</td>' else: snapshotstabelle += '<td align="center">' + liste_snapshots[ i].status + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Besitzer:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Owner:</b></td>' snapshotstabelle += '<td align="center">' + str( liste_snapshots[i].owner_id) + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Beschreibung:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Description:</b></td>' snapshotstabelle += '<td align="center">' + str( liste_snapshots[i].description) + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Datum:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Start Time:</b></td>' snapshotstabelle += '<td align="center">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. datum_der_erzeugung = parse( liste_snapshots[i].start_time) snapshotstabelle += str( datum_der_erzeugung.strftime( "%Y-%m-%d %H:%M:%S")) snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Fortschritt:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Progress:</b></td>' snapshotstabelle += '<td align="center">' + str( liste_snapshots[i].progress) + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '</table>' else: # Not the mobile version snapshotstabelle = '' snapshotstabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_snapshots): if counter > 0: snapshotstabelle += '<tr><td colspan="4"> </td></tr>' counter += 1 snapshotstabelle += '<tr>' snapshotstabelle += '<td align="left" bgcolor="#D4D4D4">' snapshotstabelle += '<a href="/snapshotsentfernen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) snapshotstabelle += "&ami=all" if sprache == "de": snapshotstabelle += '" title="Snapshot löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Snapshot löschen"></a>' else: snapshotstabelle += '" title="erase snapshot"><img src="bilder/delete.png" width="16" height="16" border="0" alt="snapshot volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '<td colspan="3" bgcolor="#D4D4D4">' snapshotstabelle += '<a href="/volumeaussnapshoterzeugen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) if sprache == "de": snapshotstabelle += '" title="Volume erzeugen"><img src="bilder/plus.png" width="16" height="16" border="0" alt="Volume erzeugen"></a>' else: snapshotstabelle += '" title="create volume"><img src="bilder/plus.png" width="16" height="16" border="0" alt="create volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>' snapshotstabelle += '<td align="left">' + liste_snapshots[ i].id + '</td>' snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Status:</b></td>' if liste_snapshots[i].status == u'completed': snapshotstabelle += '<td bgcolor="#c3ddc3" align="left">' + liste_snapshots[ i].status + '</td>' elif liste_snapshots[i].status == u'pending': snapshotstabelle += '<td bgcolor="#ffffcc" align="left">' + liste_snapshots[ i].status + '</td>' elif liste_snapshots[i].status == u'deleting': snapshotstabelle += '<td bgcolor="#ffcc99" align="left">' + liste_snapshots[ i].status + '</td>' else: snapshotstabelle += '<td align="left">' + liste_snapshots[ i].status + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Größe:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Size:</b></td>' snapshotstabelle += '<td align="left">' + str( liste_snapshots[i].volume_size ) + ' GB</td>' snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Volume:</b></td>' snapshotstabelle += '<td align="left">' + liste_snapshots[ i].volume_id + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Fortschritt:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Progress:</b></td>' snapshotstabelle += '<td align="left">' + str( liste_snapshots[i].progress) + '</td>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Besitzer:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Owner:</b></td>' snapshotstabelle += '<td align="left">' + str( liste_snapshots[i].owner_id) + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Start Time:</b></td>' snapshotstabelle += '<td colspan="3" align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. datum_der_erzeugung = parse( liste_snapshots[i].start_time) snapshotstabelle += str( datum_der_erzeugung.strftime( "%Y-%m-%d %H:%M:%S")) snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Beschreibung:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Description:</b></td>' if liste_snapshots[i].description == "": snapshotstabelle += '<td align="left">---</td>' snapshotstabelle += '<td align="left" colspan="2"> </td>' else: snapshotstabelle += '<td colspan="3" align="left">' + str( liste_snapshots[i].description ) + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '</table>' if regionname == "Amazon": if sprache == "de": ansicht_amazon_button = '' ansicht_amazon_button += '<form action="/snapshots" method="get">\n' ansicht_amazon_button += '<input type="hidden" name="mobile" value="' + str( mobile) + '">\n' ansicht_amazon_button += '<input type="submit" value="Nur eigene Snapshots anzeigen">\n' ansicht_amazon_button += '</form>\n' ansicht_amazon_button += '<p> </p>\n' else: ansicht_amazon_button = '' ansicht_amazon_button += '<form action="/snapshots" method="get">\n' ansicht_amazon_button += '<input type="hidden" name="mobile" value="' + str( mobile) + '">\n' ansicht_amazon_button += '<input type="submit" value="show only your snapshots">\n' ansicht_amazon_button += '</form>\n' ansicht_amazon_button += '<p> </p>\n' else: ansicht_amazon_button = "" path = '&path=snapshots_amazon_all&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'snapshotstabelle': snapshotstabelle, 'zonen_liste': zonen_liste, 'input_error_message': input_error_message, 'ansicht_amazon_button': ansicht_amazon_button, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "snapshots.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "snapshots.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Den Namen der zu löschenden Gruppe holen gruppe = self.request.get('gruppe') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: regionname = '---' zone_amazon = "" else: conn_region, regionname = login(username) zone_amazon = amazon_region(username) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' zonen_liste = zonen_liste_funktion(username, sprache, mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("28", "37"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "29", "30", "31", "32", "33", "34", "35", "36", "38", "39"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Security Groups # Man kann nicht direkt versuchen mit get_all_security_groups(gruppen_liste) # die anzulegende Gruppe zu erzeugen. Wenn die Gruppe noch nicht existiert, # gibt es eine Fehlermeldung liste_security_groups = conn_region.get_all_security_groups() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "7" self.redirect('/securitygroups?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "7" self.redirect('/securitygroups?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat und die Liste geholt wurde... # Anzahl der Elemente in der Liste laenge_liste_security_groups = len(liste_security_groups) for i in range(laenge_liste_security_groups): # Vergleichen if liste_security_groups[i].name == gruppe: # Liste mit den Regeln der Security Group holen liste_regeln = liste_security_groups[i].rules # Anzahl der Elemente in der Liste mit den Regeln laenge_liste_regeln = len(liste_regeln) if laenge_liste_regeln == 0: if sprache == "de": regelntabelle = 'Es sind noch keine Regeln vorhanden' else: regelntabelle = 'Still no rules exist' else: for i in range(laenge_liste_regeln): regelntabelle = '' regelntabelle += '<table border="0" cellspacing="0" cellpadding="5">' regelntabelle += '<tr>' regelntabelle += '<th> </th>' if sprache == "de": regelntabelle += '<th align="center">Protokoll</th>' regelntabelle += '<th align="center">Extern</th>' regelntabelle += '<th align="center">Intern</th>' else: regelntabelle += '<th align="center">Protocol</th>' regelntabelle += '<th align="center">From Port</th>' regelntabelle += '<th align="center">To Port</th>' regelntabelle += '</tr>' for i in range(laenge_liste_regeln): regelntabelle += '<tr>' regelntabelle += '<td>' regelntabelle += '<a href="/grupperegelentfernen?regel=' regelntabelle += str(liste_regeln[i]) regelntabelle += "&mobile=" regelntabelle += str(mobile) regelntabelle += '&gruppe=' regelntabelle += gruppe regelntabelle += '" title="Regel löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Regel löschen"></a>' regelntabelle += '</td>' # upper() sorgt für die Großbuchstaben # upper() converts a string to uppercase regelntabelle += '<td align="center">' + str( liste_regeln[i].ip_protocol).upper( ) + '</td>' regelntabelle += '<td align="center">' + str( liste_regeln[i].from_port) + '</td>' regelntabelle += '<td align="center">' + str( liste_regeln[i].to_port) + '</td>' regelntabelle += '</tr>' regelntabelle += '</table>' path = '&path=gruppenaendern&gruppe=' + gruppe template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'gruppe': gruppe, 'regelntabelle': regelntabelle, 'input_error_message': input_error_message, 'zonen_liste': zonen_liste, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "securitygrouprules.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "securitygrouprules.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": path = '&path=volumes&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join( os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_google_storage.html") else: path = os.path.join( os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path, template_values)) # It is Host Europe Cloud Storage and not am IaaS elif regionname == "HostEuropeCloudStorage": path = '&path=zonen&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join( os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_host_europe_storage.html") else: path = os.path.join( os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_host_europe_storage.html") self.response.out.write(template.render(path, template_values)) # It is not Google Storage. It is an IaaS else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("15", "22", "23", "24", "27"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "10", "16", "17", "18", "19", "20", "21", "25", "26"): input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" #!!!!!!! (Anfang) try: # Liste mit den Zonen liste_zonen = conn_region.get_all_zones() except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": zonentabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: zonentabelle = '<font color="red">An error occured</font>' laenge_liste_zonen = 0 except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": zonentabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: zonentabelle = '<font color="red">A timeout error occured</font>' laenge_liste_zonen = 0 else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_zonen = len(liste_zonen) #!!!!!!! (Ende) # # Liste mit den Zonen # liste_zonen = conn_region.get_all_zones() # # Anzahl der Elemente in der Liste # laenge_liste_zonen = len(liste_zonen) # Hier wird die Auswahlliste der Zonen erzeugt # Diese Auswahlliste ist zum Erzeugen neuer Volumes notwendig zonen_in_der_region = '' if laenge_liste_zonen == 0: zonen_in_der_region = zonen_in_der_region + "<option> </option>" else: for i in range(laenge_liste_zonen): zonen_in_der_region = zonen_in_der_region + "<option>" zonen_in_der_region = zonen_in_der_region + liste_zonen[ i].name zonen_in_der_region = zonen_in_der_region + "</option>" try: # Liste mit den Volumes liste_volumes = conn_region.get_all_volumes() except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": volumestabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: volumestabelle = '<font color="red">An error occured</font>' # Wenn diese Zeile nicht da ist, kommt es später zu einem Fehler! laenge_liste_volumes = 0 except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": volumestabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: volumestabelle = '<font color="red">A timeout error occured</font>' # Wenn diese Zeile nicht da ist, kommt es später zu einem Fehler! laenge_liste_volumes = 0 else: # Wenn es geklappt hat... # Anzahl der Volumes in der Liste laenge_liste_volumes = len(liste_volumes) if laenge_liste_volumes == 0: # Wenn es noch keine Volumes in der Region gibt... if sprache == "de": volumestabelle = 'Sie haben keine Volumen in dieser Region.' else: volumestabelle = 'You have no volumes inside this region.' else: # Wenn es schon Volumes in der Region gibt... if mobile == "true": # Mobile version of the table volumestabelle = '' volumestabelle = volumestabelle + '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_volumes): if counter > 0: volumestabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 volumestabelle += '<tr>' volumestabelle += '<td>' # Nur wenn der Zustand des Volumes "available" ist, darf man es löschen. # Darum wird hier überprüft, ob der Wert von "attach_data.status" gesetzt ist. # Wenn er nicht gesetzt ist, kann/darf das Volume gelöscht werden. if liste_volumes[i].attach_data.status == None: volumestabelle = volumestabelle + '<a href="/volumeentfernen?volume=' volumestabelle = volumestabelle + liste_volumes[ i].id volumestabelle = volumestabelle + "&mobile=" volumestabelle = volumestabelle + str( mobile) if sprache == "de": volumestabelle = volumestabelle + '" title="Volume löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Volume löschen"></a>' else: volumestabelle = volumestabelle + '" title="erase volume"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase volume"></a>' else: # Das Volume kann/darf nicht gelöscht werden. volumestabelle += '<img src="bilder/platzhalter.png" width="16" height="16" border="0">' volumestabelle += '</td>' volumestabelle = volumestabelle + '<td align="center">' volumestabelle = volumestabelle + '<a href="/snapshoterzeugen?volume=' volumestabelle = volumestabelle + liste_volumes[ i].id volumestabelle = volumestabelle + "&mobile=" volumestabelle = volumestabelle + str(mobile) if sprache == "de": volumestabelle = volumestabelle + '" title="Snapshot erzeugen"><img src="bilder/plus.png" width="16" height="16" border="0" alt="Snapshot erzeugen"></a>' else: volumestabelle = volumestabelle + '" title="create snapshot"><img src="bilder/plus.png" width="16" height="16" border="0" alt="create snapshot"></a>' volumestabelle = volumestabelle + '</td>' if liste_volumes[i].attach_data.status == None: volumestabelle = volumestabelle + '<td align="center">' volumestabelle = volumestabelle + '<a href="/volumeanhaengen?volume=' volumestabelle = volumestabelle + liste_volumes[ i].id volumestabelle = volumestabelle + "&zone=" volumestabelle = volumestabelle + str( liste_volumes[i].zone) volumestabelle = volumestabelle + "&mobile=" volumestabelle = volumestabelle + str( mobile) if sprache == "de": volumestabelle = volumestabelle + '" title="Volume anhängen">' volumestabelle = volumestabelle + '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="Volume anhängen"></a>' else: volumestabelle = volumestabelle + '" title="attach volume">' volumestabelle = volumestabelle + '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="attach volume"></a>' elif liste_volumes[ i].attach_data.status == u'attaching': volumestabelle += '<td align="center">attaching</td>' elif liste_volumes[ i].attach_data.status == u'deleting': volumestabelle += '<td align="center">deleting</td>' elif liste_volumes[ i].attach_data.status == u'busy': volumestabelle += '<td align="center">busy</td>' elif liste_volumes[ i].attach_data.status == u'attached': volumestabelle += '<td align="center">' volumestabelle += '<a href="/volumeloesen?volume=' volumestabelle += liste_volumes[i].id volumestabelle = volumestabelle + "&mobile=" volumestabelle = volumestabelle + str( mobile) if sprache == "de": volumestabelle += '" title="Volume lösen">' volumestabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="Volume lösen"></a>' else: volumestabelle += '" title="detach volume">' volumestabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="detach volume"></a>' volumestabelle += '</td>' else: volumestabelle += '<img src="bilder/platzhalter.png" width="16" height="16" border="0">' volumestabelle += '</tr>' volumestabelle += '<tr>' volumestabelle += '<td colspan="2" align="right"><b>ID:</b></td>' volumestabelle += '<td align="center">' + str( liste_volumes[i].id) + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' if sprache == "de": volumestabelle += '<td colspan="2" align="right"><b>Größe:</b></td>' else: volumestabelle += '<td colspan="2" align="right"><b>Size:</b></td>' volumestabelle += '<td align="center">' + str( liste_volumes[i].size) + ' GB</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' volumestabelle += '<td colspan="2" align="right"><b>Status:</b></td>' if liste_volumes[i].status == u'available': volumestabelle += '<td bgcolor="#c3ddc3" align="center">' + liste_volumes[ i].status + '</td>' elif liste_volumes[i].status == u'in-use': volumestabelle += '<td bgcolor="#ffffcc" align="center">' + liste_volumes[ i].status + '</td>' elif liste_volumes[i].status == u'deleting': volumestabelle += '<td bgcolor="#ffcc99" align="center">' + liste_volumes[ i].status + '</td>' else: volumestabelle += '<td align="center">' + liste_volumes[ i].status + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' volumestabelle += '<td colspan="2" align="right"><b>Zone:</b></td>' volumestabelle += '<td align="center">' + str( liste_volumes[i].zone) + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' if sprache == "de": volumestabelle += '<td colspan="2" align="right"><b>Datum:</b></td>' else: volumestabelle += '<td colspan="2" align="right"><b>Creation Date:</b></td>' volumestabelle += '<td align="center">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. datum_der_erzeugung = parse( liste_volumes[i].create_time) volumestabelle += str( datum_der_erzeugung.strftime( "%Y-%m-%d %H:%M:%S")) #volumestabelle = volumestabelle + str(datum_der_erzeugung) #volumestabelle = volumestabelle + str(liste_volumes[i].create_time) volumestabelle += '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' volumestabelle += '<td colspan="2" align="right"><b>Snapshot:</b></td>' if liste_volumes[i].snapshot_id == "": volumestabelle += '<td align="center">---</td>' else: volumestabelle += '<td align="center">' + str( liste_volumes[i].snapshot_id) + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' if sprache == "de": volumestabelle += '<td colspan="2" align="right"><b>Gerät:</b></td>' else: volumestabelle += '<td colspan="2" align="right"><b>Device:</b></td>' if liste_volumes[i].attach_data.device == None: volumestabelle += '<td align="center">---</td>' else: volumestabelle += '<td align="center">' + str( liste_volumes[i].attach_data.device ) + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' if sprache == "de": volumestabelle += '<td colspan="2" align="right"><b>Verknüpfung:</b></td>' else: volumestabelle += '<td colspan="2" align="right"><b>Attach Date:</b></td>' if liste_volumes[ i].attach_data.attach_time == None: volumestabelle += '<td align="center">---</td>' else: volumestabelle = volumestabelle + '<td>' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. datum_des_anhaengens = parse( liste_volumes[i].attach_data. attach_time) volumestabelle = volumestabelle + str( datum_des_anhaengens.strftime( "%Y-%m-%d %H:%M:%S")) #volumestabelle = volumestabelle + str(liste_volumes[i].attach_data.attach_time) volumestabelle = volumestabelle + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' if sprache == "de": volumestabelle += '<td colspan="2" align="right"><b>Instanz:</b></td>' else: volumestabelle += '<td colspan="2" align="right"><b>Instance:</b></td>' if liste_volumes[ i].attach_data.instance_id == None: volumestabelle += '<td align="center">---</td>' else: volumestabelle += '<td align="center">' + str( liste_volumes[i].attach_data. instance_id) + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' if sprache == "de": volumestabelle += '<td colspan="2" align="right"><b>Status:</b></td>' else: volumestabelle += '<td colspan="2" align="right"><b>Attach Status:</b></td>' if liste_volumes[i].attach_data.status == None: volumestabelle += '<td align="center">---</td>' elif liste_volumes[ i].attach_data.status == u'attached': volumestabelle += '<td bgcolor="#c3ddc3" align="center">' + str( liste_volumes[i].attach_data.status ) + '</td>' elif liste_volumes[ i].attach_data.status == u'busy': volumestabelle += '<td bgcolor="#ffcc99" align="center">' + str( liste_volumes[i].attach_data.status ) + '</td>' else: volumestabelle += '<td align="center">' + str( liste_volumes[i].attach_data.status ) + '</td>' volumestabelle = volumestabelle + '</tr>' volumestabelle = volumestabelle + '</table>' else: # Not the mobile version volumestabelle = '' volumestabelle = volumestabelle + '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_volumes): if counter > 0: volumestabelle += '<tr><td colspan="5"> </td></tr>' counter += 1 volumestabelle += '<tr>' volumestabelle += '<td bgcolor="#D4D4D4">' # Nur wenn der Zustand des Volumes "available" ist, darf man es löschen. # Darum wird hier überprüft, ob der Wert von "attach_data.status" gesetzt ist. # Wenn er nicht gesetzt ist, kann/darf das Volume gelöscht werden. if liste_volumes[i].attach_data.status == None: volumestabelle = volumestabelle + '<a href="/volumeentfernen?volume=' volumestabelle = volumestabelle + liste_volumes[ i].id volumestabelle = volumestabelle + "&mobile=" volumestabelle = volumestabelle + str( mobile) if sprache == "de": volumestabelle = volumestabelle + '" title="Volume löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Volume löschen"></a>' else: volumestabelle = volumestabelle + '" title="erase volume"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase volume"></a>' else: # Das Volume kann/darf nicht gelöscht werden. volumestabelle += '<img src="bilder/platzhalter.png" width="16" height="16" border="0">' volumestabelle += '</td>' volumestabelle += '<td align="center" bgcolor="#D4D4D4">' volumestabelle += '<a href="/snapshoterzeugen?volume=' volumestabelle += liste_volumes[i].id volumestabelle += "&mobile=" volumestabelle += str(mobile) if sprache == "de": volumestabelle += '" title="Snapshot erzeugen"><img src="bilder/plus.png" width="16" height="16" border="0" alt="Snapshot erzeugen"></a>' else: volumestabelle += '" title="create snapshot"><img src="bilder/plus.png" width="16" height="16" border="0" alt="create snapshot"></a>' volumestabelle += '</td>' if liste_volumes[i].attach_data.status == None: volumestabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4">' volumestabelle += '<a href="/volumeanhaengen?volume=' volumestabelle += liste_volumes[i].id volumestabelle += "&zone=" volumestabelle += str( liste_volumes[i].zone) volumestabelle += "&mobile=" volumestabelle += str(mobile) if sprache == "de": volumestabelle += '" title="Volume anhängen">' volumestabelle += '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="Volume anhängen"></a>' else: volumestabelle += '" title="attach volume">' volumestabelle += '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="attach volume"></a>' elif liste_volumes[ i].attach_data.status == u'attaching': volumestabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4">attaching</td>' elif liste_volumes[ i].attach_data.status == u'deleting': volumestabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4">deleting</td>' elif liste_volumes[ i].attach_data.status == u'busy': volumestabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4">busy</td>' elif liste_volumes[ i].attach_data.status == u'attached': volumestabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4">' volumestabelle += '<a href="/volumeloesen?volume=' volumestabelle += liste_volumes[i].id volumestabelle += "&mobile=" volumestabelle += str(mobile) if sprache == "de": volumestabelle += '" title="Volume lösen">' volumestabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="Volume lösen"></a>' else: volumestabelle += '" title="detach volume">' volumestabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="detach volume"></a>' volumestabelle += '</td>' else: volumestabelle += '<img src="bilder/platzhalter.png" width="16" height="16" border="0">' volumestabelle += '</tr>' volumestabelle += '<tr>' volumestabelle += '<td align="right" colspan="2" bgcolor="#D4D4D4"><b>ID:</b></td>' volumestabelle += '<td align="left">' + str( liste_volumes[i].id) + '</td>' volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Status:</b></td>' if liste_volumes[i].status == u'available': volumestabelle += '<td bgcolor="#c3ddc3" align="left">' + liste_volumes[ i].status + '</td>' elif liste_volumes[i].status == u'in-use': volumestabelle += '<td bgcolor="#ffffcc" align="left">' + liste_volumes[ i].status + '</td>' elif liste_volumes[i].status == u'deleting': volumestabelle += '<td bgcolor="#ffcc99" align="left">' + liste_volumes[ i].status + '</td>' else: volumestabelle += '<td align="left">' + liste_volumes[ i].status + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' if sprache == "de": volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Größe:</b></td>' else: volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Size:</b></td>' volumestabelle += '<td align="left">' + str( liste_volumes[i].size) + ' GB</td>' volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Zone:</b></td>' volumestabelle += '<td align="left">' + str( liste_volumes[i].zone) + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' if sprache == "de": volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>' else: volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Creation Date:</b></td>' volumestabelle += '<td align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. datum_der_erzeugung = parse( liste_volumes[i].create_time) volumestabelle += str( datum_der_erzeugung.strftime( "%Y-%m-%d %H:%M:%S")) #volumestabelle = volumestabelle + str(datum_der_erzeugung) #volumestabelle = volumestabelle + str(liste_volumes[i].create_time) volumestabelle += '</td>' volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Snapshot:</b></td>' if liste_volumes[i].snapshot_id == "": volumestabelle += '<td align="left">---</td>' else: volumestabelle += '<td>' + str( liste_volumes[i].snapshot_id) + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' if sprache == "de": volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Instanz:</b></td>' else: volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Instance:</b></td>' if liste_volumes[ i].attach_data.instance_id == None: volumestabelle += '<td align="left">---</td>' else: volumestabelle += '<td align="left">' + str( liste_volumes[i].attach_data. instance_id) + '</td>' if sprache == "de": volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Status:</b></td>' else: volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Attach Status:</b></td>' if liste_volumes[i].attach_data.status == None: volumestabelle += '<td align="left">---</td>' elif liste_volumes[ i].attach_data.status == u'attached': volumestabelle += '<td bgcolor="#c3ddc3" align="left">' + str( liste_volumes[i].attach_data.status ) + '</td>' elif liste_volumes[ i].attach_data.status == u'busy': volumestabelle += '<td bgcolor="#ffcc99" align="left">' + str( liste_volumes[i].attach_data.status ) + '</td>' else: volumestabelle += '<td align="left">' + str( liste_volumes[i].attach_data.status ) + '</td>' volumestabelle += '</tr>' volumestabelle += '<tr>' if sprache == "de": volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>' else: volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Attach Date:</b></td>' if liste_volumes[ i].attach_data.attach_time == None: volumestabelle += '<td align="left">---</td>' else: volumestabelle += '<td align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. datum_des_anhaengens = parse( liste_volumes[i].attach_data. attach_time) volumestabelle += str( datum_des_anhaengens.strftime( "%Y-%m-%d %H:%M:%S")) #volumestabelle += str(liste_volumes[i].attach_data.attach_time) volumestabelle += '</td>' if sprache == "de": volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Gerät:</b></td>' else: volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Device:</b></td>' if liste_volumes[i].attach_data.device == None: volumestabelle += '<td align="left">---</td>' else: volumestabelle += '<td align="left">' + str( liste_volumes[i].attach_data.device ) + '</td>' volumestabelle = volumestabelle + '</tr>' volumestabelle = volumestabelle + '</table>' if laenge_liste_volumes >= 1: alle_volumes_loeschen_button = '<p> </p>\n' alle_volumes_loeschen_button += '<table border="0" cellspacing="0" cellpadding="5">\n' alle_volumes_loeschen_button += '<tr>\n' alle_volumes_loeschen_button += '<td align="center">\n' alle_volumes_loeschen_button += '<form action="/alle_volumes_loeschen" method="get">\n' alle_volumes_loeschen_button += '<input type="hidden" name="mobile" value="' + mobile + '">' if sprache == "de": alle_volumes_loeschen_button += '<input type="submit" value="Alle EBS Volumen löschen">\n' else: alle_volumes_loeschen_button += '<input type="submit" value="erase all EBS volumes">\n' alle_volumes_loeschen_button += '</form>\n' alle_volumes_loeschen_button += '</td>\n' alle_volumes_loeschen_button += '</tr>\n' alle_volumes_loeschen_button += '</table>\n' else: alle_volumes_loeschen_button = '<p> </p>\n' path = '&path=volumes&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'volumestabelle': volumestabelle, 'zonen_in_der_region': zonen_in_der_region, 'input_error_message': input_error_message, 'zonen_liste': zonen_liste, 'alle_volumes_loeschen_button': alle_volumes_loeschen_button, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "volumes.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "volumes.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # self.response.out.write('posted!') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Namen des Buckets holen, dessen Inhalt angezeigt wird bucketname = self.request.get('bucket') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) results = aktivezone.fetch(100) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zugangstyp = zugangstyp_erhalten(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("111", "118", "120"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("112", "119", "121"): input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" AWSAccessKeyId = aws_access_key_erhalten(username, regionname) AWSSecretAccessKeyId = aws_secret_access_key_erhalten( username, regionname) # Mit S3 verbinden conn_s3 = logins3(username) try: # Liste der Buckets bucket_instance = conn_s3.get_bucket(bucketname) except: # Wenn es nicht klappt... if sprache == "de": bucket_keys_tabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: bucket_keys_tabelle = '<font color="red">An error occured</font>' laenge_liste_keys = 0 # Wenn es geklappt hat... else: try: # Liste der Keys liste_keys = bucket_instance.get_all_keys() except: # Wenn es nicht klappt... if sprache == "de": bucket_keys_tabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: bucket_keys_tabelle = '<font color="red">An error occured</font>' laenge_liste_keys = 0 else: # Wenn es geklappt hat... # Anzahl der Keys in der Liste laenge_liste_keys = len(liste_keys) # Wenn wir in einer Eucalyputs-Infrastruktur sind, dann muss dieser # dämliche None-Eintrag weg if regionname != "Amazon": liste_keys2 = [] for i in range(laenge_liste_keys): if str(liste_keys[i].name) != 'None': liste_keys2.append(liste_keys[i]) laenge_liste_keys2 = len(liste_keys2) laenge_liste_keys = laenge_liste_keys2 liste_keys = liste_keys2 if laenge_liste_keys == 0: if sprache == "de": bucket_keys_tabelle = 'Der Bucket <B>' + bucketname + ' </B>ist leer.' else: bucket_keys_tabelle = 'The bucket <B>' + bucketname + ' </B>is empty.' else: if mobile == "true": # mobile version... bucket_keys_tabelle = '' bucket_keys_tabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">' counter = 0 for i in range(laenge_liste_keys): if counter > 0: bucket_keys_tabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 bucket_keys_tabelle += '<tr>' if liste_keys[ i].name == None and regionname != "Amazon": bucket_keys_tabelle += '<td> </td>' else: bucket_keys_tabelle += '<td>' bucket_keys_tabelle += '<a href="/bucketkeyentfernen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="Key löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Key löschen"></a>' else: bucket_keys_tabelle += '" title="erase key"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase key"></a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '<td colspan="2" align="left">' bucket_keys_tabelle += '<a href="' if regionname == "Amazon": bucket_keys_tabelle += liste_keys[ i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=True).replace( '&', '&').replace( '&amp;', '&') else: port = port_erhalten(username, regionname) bucket_keys_tabelle += liste_keys[ i].generate_url( 600, method='GET', headers=None, query_auth=True, force_http=True).replace( '&', '&').replace( '&amp;', '&').replace( '/services/Walrus/', ':' + str(port) + '/services/Walrus/') bucket_keys_tabelle += '">' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += '</a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' if sprache == "de": bucket_keys_tabelle += '<td align="right" colspan="2"><b>Größe:</b></td>' else: bucket_keys_tabelle += '<td align="right" colspan="2"><b>Size:</b></td>' bucket_keys_tabelle += '<td align="left">' if liste_keys[ i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: bucket_keys_tabelle += str(liste_keys[i].size) bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' if sprache == "de": bucket_keys_tabelle += '<td align="right" colspan="2"><b>Datum:</b></td>' else: bucket_keys_tabelle += '<td align="right" colspan="2"><b>Date:</b></td>' bucket_keys_tabelle += '<td align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. if liste_keys[ i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: datum_der_letzten_aenderung = parse( liste_keys[i].last_modified) bucket_keys_tabelle += str( datum_der_letzten_aenderung.strftime( "%Y-%m-%d %H:%M:%S")) bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' bucket_keys_tabelle += '<td align="right" colspan="2"><b>ACL:</b></td>' bucket_keys_tabelle += '<td align="left">' bucket_keys_tabelle += '<a href="/acl_einsehen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="einsehen/ändern">einsehen/ändern</a>' else: bucket_keys_tabelle += '" title="view/edit">view/edit</a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' # In S3 and Google Storage, each MD5 checksum is enclosed by double quotes. # Eliminate them with .replace('"','') bucket_keys_tabelle += '<td align="right" colspan="2"><b>MD5:</b></td>' bucket_keys_tabelle += '<td align="left">' + str( liste_keys[i].etag.replace('"', '')) + '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '</table>' else: # not the mobile version bucket_keys_tabelle = '' bucket_keys_tabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_keys): if counter > 0: bucket_keys_tabelle += '<tr><td colspan="4"> </td></tr>' counter += 1 bucket_keys_tabelle += '<tr>' if liste_keys[ i].name == None and regionname != "Amazon": bucket_keys_tabelle += '<td> </td>' else: bucket_keys_tabelle += '<td align="left" bgcolor="#D4D4D4">' bucket_keys_tabelle += '<a href="/bucketkeyentfernen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="Key löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Key löschen"></a>' else: bucket_keys_tabelle += '" title="erase key"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase key"></a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4"> </td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>' bucket_keys_tabelle += '<td colspan="3" align="left">' bucket_keys_tabelle += '<a href="' if regionname == "Amazon": bucket_keys_tabelle += liste_keys[ i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=True).replace( '&', '&').replace( '&amp;', '&') else: port = port_erhalten(username, regionname) bucket_keys_tabelle += liste_keys[ i].generate_url( 600, method='GET', headers=None, query_auth=True, force_http=True).replace( '&', '&').replace( '&amp;', '&').replace( '/services/Walrus/', ':' + str(port) + '/services/Walrus/') bucket_keys_tabelle += '">' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += '</a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' if sprache == "de": bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Größe:</b></td>' else: bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Size:</b></td>' bucket_keys_tabelle += '<td align="left">' if liste_keys[ i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: bucket_keys_tabelle += str(liste_keys[i].size) bucket_keys_tabelle += '</td>' if sprache == "de": bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>' else: bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Date:</b></td>' bucket_keys_tabelle += '<td align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. if liste_keys[ i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: datum_der_letzten_aenderung = parse( liste_keys[i].last_modified) bucket_keys_tabelle += str( datum_der_letzten_aenderung.strftime( "%Y-%m-%d %H:%M:%S")) bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>ACL:</b></td>' bucket_keys_tabelle += '<td align="left">' bucket_keys_tabelle += '<a href="/acl_einsehen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="einsehen/ändern">einsehen/ändern</a>' else: bucket_keys_tabelle += '" title="view/edit">view/edit</a>' bucket_keys_tabelle += '</td>' # In S3 and Google Storage, each MD5 checksum is enclosed by double quotes. # Eliminate them with .replace('"','') bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>MD5:</b></td>' bucket_keys_tabelle += '<td align="left">' + str( liste_keys[i].etag.replace('"', '')) + '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '</table>' # Wenn man sich NICHT unter Amazon befindet, funktioniert der Download von Keys nicht. # if regionname != "Amazon": # if sprache == "de": # eucalyptus_warnung = '<B>Achtung!</B> Unter Eucalyptus 1.6 und 1.6.1 funktioniert der Download von Keys nicht. Dabei handelt es sich um einen Fehler von Eucalyptus. Es kommt zu dieser Fehlermeldung: <B>Failure: 500 Internal Server Error</B>' # else: # eucalyptus_warnung = '<B>Attention!</B> With Eucalyptus 1.6 and 1.6.1 the download of Keys is broken. This is a bug of Eucalyptus. The result is this error message: <B>Failure: 500 Internal Server Error</B>' # else: # eucalyptus_warnung = '' #Dokumentation zum Upload von Keys #http://docs.amazonwebservices.com/AmazonS3/latest/index.html?HTTPPOSTForms.html #http://doc.s3.amazonaws.com/proposals/post.html #http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1434 #http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html # Hier wird das Policy-Dokument erzeugt policy_document = '' policy_document = policy_document + '{' policy_document = policy_document + '"expiration": "2100-01-01T00:00:00Z",' policy_document = policy_document + '"conditions": [' policy_document = policy_document + '{"bucket": "' + bucketname + '"}, ' policy_document = policy_document + '["starts-with", "$acl", ""],' if mobile == "true": policy_document = policy_document + '{"success_action_redirect": "http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=true"},' else: policy_document = policy_document + '{"success_action_redirect": "http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=false"},' policy_document = policy_document + '["starts-with", "$key", ""],' policy_document = policy_document + '["starts-with", "$Content-Type", ""]' policy_document = policy_document + ']' policy_document = policy_document + '}' policy = base64.b64encode(policy_document) signature = base64.b64encode( hmac.new(AWSSecretAccessKeyId, policy, sha).digest()) keys_upload_formular = '' if zugangstyp == "Eucalyptus": endpointurl = endpointurl_erhalten(username, regionname) port = port_erhalten(username, regionname) keys_upload_formular += '<form action="http://' + str( endpointurl ) + ':' + str( port ) + '/services/Walrus/' + bucketname + '" method="post" enctype="multipart/form-data">\n' elif zugangstyp == "GoogleStorage": keys_upload_formular += '<form action="http://commondatastorage.googleapis.com/' + bucketname + '" method="post" enctype="multipart/form-data">\n' elif zugangstyp == "HostEuropeCloudStorage": keys_upload_formular += '<form action="http://' + bucketname + '.cs.hosteurope.de' keys_upload_formular += '" method="post" enctype="multipart/form-data">\n' elif zugangstyp == "DunkelCloudStorage": keys_upload_formular += '<form action="http://' + bucketname + '.dcs.dunkel.de' keys_upload_formular += '" method="post" enctype="multipart/form-data">\n' else: keys_upload_formular += '<form action="http://s3.amazonaws.com/' + bucketname + '" method="post" enctype="multipart/form-data">\n' if mobile == "true": # mobile version... keys_upload_formular += '<table border="0" cellspacing="0" cellpadding="5">\n' keys_upload_formular += '<tr>\n' keys_upload_formular += '<td>\n' keys_upload_formular += '<input type="hidden" name="key" value="${filename}">\n' keys_upload_formular += '<select name="acl" size="1">\n' keys_upload_formular += '<option selected="selected">public-read</option>\n' keys_upload_formular += '<option>private</option>\n' keys_upload_formular += '<option>public-read-write</option>\n' keys_upload_formular += '<option>authenticated-read</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' keys_upload_formular += '<select name="Content-Type" size="1">\n' keys_upload_formular += '<option selected="selected">application/octet-stream</option>\n' keys_upload_formular += '<option>application/pdf</option>\n' keys_upload_formular += '<option>application/zip</option>\n' keys_upload_formular += '<option>audio/mp4</option>\n' keys_upload_formular += '<option>audio/mpeg</option>\n' keys_upload_formular += '<option>audio/ogg</option>\n' keys_upload_formular += '<option>audio/vorbis</option>\n' keys_upload_formular += '<option>image/gif</option>\n' keys_upload_formular += '<option>image/jpeg</option>\n' keys_upload_formular += '<option>image/png</option>\n' keys_upload_formular += '<option>image/tiff</option>\n' keys_upload_formular += '<option>text/html</option>\n' keys_upload_formular += '<option>text/plain</option>\n' keys_upload_formular += '<option>video/mp4</option>\n' keys_upload_formular += '<option>video/mpeg</option>\n' keys_upload_formular += '<option>video/ogg</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>\n' keys_upload_formular += '<input type="hidden" name="success_action_redirect" value="http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=true">\n' keys_upload_formular += '<input type="hidden" name="AWSAccessKeyId" value="' + AWSAccessKeyId + '">\n' keys_upload_formular += '<input type="hidden" name="policy" value="' + policy + '">\n' keys_upload_formular += '<input type="hidden" name="signature" value="' + signature + '">\n' keys_upload_formular += '<input type="file" name="file" size="20">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' if sprache == "de": keys_upload_formular += '<input type="submit" value="Objekt in den Bucket hochladen">\n' else: keys_upload_formular += '<input type="submit" value="upload objekt into bucket">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '</table>' keys_upload_formular += '</form>' else: # Not the mobile version keys_upload_formular += '<table border="0" cellspacing="0" cellpadding="5">' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' keys_upload_formular += '<input type="hidden" name="key" value="${filename}">\n' keys_upload_formular += '<select name="acl" size="1">\n' keys_upload_formular += '<option selected="selected">public-read</option>\n' keys_upload_formular += '<option>private</option>\n' keys_upload_formular += '<option>public-read-write</option>\n' keys_upload_formular += '<option>authenticated-read</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '<select name="Content-Type" size="1">\n' keys_upload_formular += '<option selected="selected">application/octet-stream</option>\n' keys_upload_formular += '<option>application/pdf</option>\n' keys_upload_formular += '<option>application/zip</option>\n' keys_upload_formular += '<option>audio/mp4</option>\n' keys_upload_formular += '<option>audio/mpeg</option>\n' keys_upload_formular += '<option>audio/ogg</option>\n' keys_upload_formular += '<option>audio/vorbis</option>\n' keys_upload_formular += '<option>image/gif</option>\n' keys_upload_formular += '<option>image/jpeg</option>\n' keys_upload_formular += '<option>image/png</option>\n' keys_upload_formular += '<option>image/tiff</option>\n' keys_upload_formular += '<option>text/html</option>\n' keys_upload_formular += '<option>text/plain</option>\n' keys_upload_formular += '<option>video/mp4</option>\n' keys_upload_formular += '<option>video/mpeg</option>\n' keys_upload_formular += '<option>video/ogg</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>\n' keys_upload_formular += '<input type="hidden" name="success_action_redirect" value="http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=false">\n' keys_upload_formular += '<input type="hidden" name="AWSAccessKeyId" value="' + AWSAccessKeyId + '">\n' keys_upload_formular += '<input type="hidden" name="policy" value="' + policy + '">\n' keys_upload_formular += '<input type="hidden" name="signature" value="' + signature + '">\n' keys_upload_formular += '<input type="file" name="file" size="60">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' if sprache == "de": keys_upload_formular += '<input type="submit" value="Objekt in den Bucket hochladen">\n' else: keys_upload_formular += '<input type="submit" value="upload objekt into bucket">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '</table>' keys_upload_formular += '</form>' # Unter Eucalyptus funktioniert das Hochladen von Keys nicht #else: # if sprache == "de": # keys_upload_formular = '<p> </p>\n Das Hochladen von Keys funktioniert unter Eucalyptus noch nicht' # else: # keys_upload_formular = '<p> </p>\n The key upload is still not working with Eucaplyptus' if laenge_liste_keys != 0: alle_keys_loeschen_button = '<p> </p>\n' alle_keys_loeschen_button += '<form action="/alle_keys_loeschen" method="get">\n' alle_keys_loeschen_button += '<input type="hidden" name="mobile" value="' + mobile + '">' alle_keys_loeschen_button += '<input type="hidden" name="s3_ansicht" value="pur"> \n' alle_keys_loeschen_button += '<input type="hidden" name="bucket_name" value="' + bucketname + '"> \n' if sprache == "de": alle_keys_loeschen_button += '<input type="submit" value="Alle Objekte löschen">\n' else: alle_keys_loeschen_button += '<input type="submit" value="Erase all objects">\n' alle_keys_loeschen_button += '</form>\n' else: alle_keys_loeschen_button = '' path = '&path=bucket_inhalt_pure&bucket=' + bucketname + '&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'bucket_keys_tabelle': bucket_keys_tabelle, 'input_error_message': input_error_message, 'bucketname': bucketname, 'keys_upload_formular': keys_upload_formular, #'eucalyptus_warnung': eucalyptus_warnung, 'alle_keys_loeschen_button': alle_keys_loeschen_button, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "s3_keys_pur.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "s3_keys_pur.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # self.response.out.write('posted!') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Namen des Buckets holen, dessen Inhalt angezeigt wird bucketname = self.request.get('bucket') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) results = aktivezone.fetch(100) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zugangstyp = zugangstyp_erhalten(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("111", "118", "120"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("112", "119", "121"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" AWSAccessKeyId = aws_access_key_erhalten(username,regionname) AWSSecretAccessKeyId = aws_secret_access_key_erhalten(username,regionname) # Mit S3 verbinden conn_s3 = logins3(username) try: # Liste der Buckets bucket_instance = conn_s3.get_bucket(bucketname) except: # Wenn es nicht klappt... if sprache == "de": bucket_keys_tabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: bucket_keys_tabelle = '<font color="red">An error occured</font>' laenge_liste_keys = 0 # Wenn es geklappt hat... else: try: # Liste der Keys liste_keys = bucket_instance.get_all_keys() except: # Wenn es nicht klappt... if sprache == "de": bucket_keys_tabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: bucket_keys_tabelle = '<font color="red">An error occured</font>' laenge_liste_keys = 0 else: # Wenn es geklappt hat... # Anzahl der Keys in der Liste laenge_liste_keys = len(liste_keys) # Wenn wir in einer Eucalyputs-Infrastruktur sind, dann muss dieser # dämliche None-Eintrag weg if regionname != "Amazon": liste_keys2 = [] for i in range(laenge_liste_keys): if str(liste_keys[i].name) != 'None': liste_keys2.append(liste_keys[i]) laenge_liste_keys2 = len(liste_keys2) laenge_liste_keys = laenge_liste_keys2 liste_keys = liste_keys2 if laenge_liste_keys == 0: if sprache == "de": bucket_keys_tabelle = 'Der Bucket <B>'+ bucketname+' </B>ist leer.' else: bucket_keys_tabelle = 'The bucket <B>'+ bucketname+' </B>is empty.' else: if mobile == "true": # mobile version... bucket_keys_tabelle = '' bucket_keys_tabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">' counter = 0 for i in range(laenge_liste_keys): if counter > 0: bucket_keys_tabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 bucket_keys_tabelle += '<tr>' if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += '<td> </td>' else: bucket_keys_tabelle += '<td>' bucket_keys_tabelle += '<a href="/bucketkeyentfernen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="Key löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Key löschen"></a>' else: bucket_keys_tabelle += '" title="erase key"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase key"></a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '<td colspan="2" align="left">' bucket_keys_tabelle += '<a href="' if regionname == "Amazon": bucket_keys_tabelle += liste_keys[i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=True).replace('&', '&').replace('&amp;', '&') else: port = port_erhalten(username,regionname) bucket_keys_tabelle += liste_keys[i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=True).replace('&', '&').replace('&amp;', '&').replace('/services/Walrus/', ':'+str(port)+'/services/Walrus/') bucket_keys_tabelle += '">' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += '</a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' if sprache == "de": bucket_keys_tabelle += '<td align="right" colspan="2"><b>Größe:</b></td>' else: bucket_keys_tabelle += '<td align="right" colspan="2"><b>Size:</b></td>' bucket_keys_tabelle += '<td align="left">' if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: bucket_keys_tabelle += str(liste_keys[i].size) bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' if sprache == "de": bucket_keys_tabelle += '<td align="right" colspan="2"><b>Datum:</b></td>' else: bucket_keys_tabelle += '<td align="right" colspan="2"><b>Date:</b></td>' bucket_keys_tabelle += '<td align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: datum_der_letzten_aenderung = parse(liste_keys[i].last_modified) bucket_keys_tabelle += str(datum_der_letzten_aenderung.strftime("%Y-%m-%d %H:%M:%S")) bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' bucket_keys_tabelle += '<td align="right" colspan="2"><b>ACL:</b></td>' bucket_keys_tabelle += '<td align="left">' bucket_keys_tabelle += '<a href="/acl_einsehen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="einsehen/ändern">einsehen/ändern</a>' else: bucket_keys_tabelle += '" title="view/edit">view/edit</a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' # In S3 and Google Storage, each MD5 checksum is enclosed by double quotes. # Eliminate them with .replace('"','') bucket_keys_tabelle += '<td align="right" colspan="2"><b>MD5:</b></td>' bucket_keys_tabelle += '<td align="left">'+str(liste_keys[i].etag.replace('"',''))+'</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '</table>' else: # not the mobile version bucket_keys_tabelle = '' bucket_keys_tabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_keys): if counter > 0: bucket_keys_tabelle += '<tr><td colspan="4"> </td></tr>' counter += 1 bucket_keys_tabelle += '<tr>' if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += '<td> </td>' else: bucket_keys_tabelle += '<td align="left" bgcolor="#D4D4D4">' bucket_keys_tabelle += '<a href="/bucketkeyentfernen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="Key löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Key löschen"></a>' else: bucket_keys_tabelle += '" title="erase key"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase key"></a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4"> </td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>' bucket_keys_tabelle += '<td colspan="3" align="left">' bucket_keys_tabelle += '<a href="' if regionname == "Amazon": bucket_keys_tabelle += liste_keys[i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=True).replace('&', '&').replace('&amp;', '&') else: port = port_erhalten(username,regionname) bucket_keys_tabelle += liste_keys[i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=True).replace('&', '&').replace('&amp;', '&').replace('/services/Walrus/', ':'+str(port)+'/services/Walrus/') bucket_keys_tabelle += '">' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += '</a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' if sprache == "de": bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Größe:</b></td>' else: bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Size:</b></td>' bucket_keys_tabelle += '<td align="left">' if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: bucket_keys_tabelle += str(liste_keys[i].size) bucket_keys_tabelle += '</td>' if sprache == "de": bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>' else: bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Date:</b></td>' bucket_keys_tabelle += '<td align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: datum_der_letzten_aenderung = parse(liste_keys[i].last_modified) bucket_keys_tabelle += str(datum_der_letzten_aenderung.strftime("%Y-%m-%d %H:%M:%S")) bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>ACL:</b></td>' bucket_keys_tabelle += '<td align="left">' bucket_keys_tabelle += '<a href="/acl_einsehen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="einsehen/ändern">einsehen/ändern</a>' else: bucket_keys_tabelle += '" title="view/edit">view/edit</a>' bucket_keys_tabelle += '</td>' # In S3 and Google Storage, each MD5 checksum is enclosed by double quotes. # Eliminate them with .replace('"','') bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>MD5:</b></td>' bucket_keys_tabelle += '<td align="left">'+str(liste_keys[i].etag.replace('"',''))+'</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '</table>' # Wenn man sich NICHT unter Amazon befindet, funktioniert der Download von Keys nicht. # if regionname != "Amazon": # if sprache == "de": # eucalyptus_warnung = '<B>Achtung!</B> Unter Eucalyptus 1.6 und 1.6.1 funktioniert der Download von Keys nicht. Dabei handelt es sich um einen Fehler von Eucalyptus. Es kommt zu dieser Fehlermeldung: <B>Failure: 500 Internal Server Error</B>' # else: # eucalyptus_warnung = '<B>Attention!</B> With Eucalyptus 1.6 and 1.6.1 the download of Keys is broken. This is a bug of Eucalyptus. The result is this error message: <B>Failure: 500 Internal Server Error</B>' # else: # eucalyptus_warnung = '' #Dokumentation zum Upload von Keys #http://docs.amazonwebservices.com/AmazonS3/latest/index.html?HTTPPOSTForms.html #http://doc.s3.amazonaws.com/proposals/post.html #http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1434 #http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html # Hier wird das Policy-Dokument erzeugt policy_document = '' policy_document = policy_document + '{' policy_document = policy_document + '"expiration": "2100-01-01T00:00:00Z",' policy_document = policy_document + '"conditions": [' policy_document = policy_document + '{"bucket": "'+bucketname+'"}, ' policy_document = policy_document + '["starts-with", "$acl", ""],' if mobile == "true": policy_document = policy_document + '{"success_action_redirect": "http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=true"},' else: policy_document = policy_document + '{"success_action_redirect": "http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=false"},' policy_document = policy_document + '["starts-with", "$key", ""],' policy_document = policy_document + '["starts-with", "$Content-Type", ""]' policy_document = policy_document + ']' policy_document = policy_document + '}' policy = base64.b64encode(policy_document) signature = base64.b64encode(hmac.new(AWSSecretAccessKeyId, policy, sha).digest()) keys_upload_formular = '' if zugangstyp == "Eucalyptus": endpointurl = endpointurl_erhalten(username,regionname) port = port_erhalten(username,regionname) keys_upload_formular += '<form action="http://'+str(endpointurl)+':'+str(port)+'/services/Walrus/'+bucketname+'" method="post" enctype="multipart/form-data">\n' elif zugangstyp == "GoogleStorage": keys_upload_formular += '<form action="http://commondatastorage.googleapis.com/'+bucketname+'" method="post" enctype="multipart/form-data">\n' elif zugangstyp == "HostEuropeCloudStorage": keys_upload_formular += '<form action="http://'+bucketname+'.cs.hosteurope.de' keys_upload_formular += '" method="post" enctype="multipart/form-data">\n' elif zugangstyp == "DunkelCloudStorage": keys_upload_formular += '<form action="http://'+bucketname+'.dcs.dunkel.de' keys_upload_formular += '" method="post" enctype="multipart/form-data">\n' else: keys_upload_formular += '<form action="http://s3.amazonaws.com/'+bucketname+'" method="post" enctype="multipart/form-data">\n' if mobile == "true": # mobile version... keys_upload_formular += '<table border="0" cellspacing="0" cellpadding="5">\n' keys_upload_formular += '<tr>\n' keys_upload_formular += '<td>\n' keys_upload_formular += '<input type="hidden" name="key" value="${filename}">\n' keys_upload_formular += '<select name="acl" size="1">\n' keys_upload_formular += '<option selected="selected">public-read</option>\n' keys_upload_formular += '<option>private</option>\n' keys_upload_formular += '<option>public-read-write</option>\n' keys_upload_formular += '<option>authenticated-read</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' keys_upload_formular += '<select name="Content-Type" size="1">\n' keys_upload_formular += '<option selected="selected">application/octet-stream</option>\n' keys_upload_formular += '<option>application/pdf</option>\n' keys_upload_formular += '<option>application/zip</option>\n' keys_upload_formular += '<option>audio/mp4</option>\n' keys_upload_formular += '<option>audio/mpeg</option>\n' keys_upload_formular += '<option>audio/ogg</option>\n' keys_upload_formular += '<option>audio/vorbis</option>\n' keys_upload_formular += '<option>image/gif</option>\n' keys_upload_formular += '<option>image/jpeg</option>\n' keys_upload_formular += '<option>image/png</option>\n' keys_upload_formular += '<option>image/tiff</option>\n' keys_upload_formular += '<option>text/html</option>\n' keys_upload_formular += '<option>text/plain</option>\n' keys_upload_formular += '<option>video/mp4</option>\n' keys_upload_formular += '<option>video/mpeg</option>\n' keys_upload_formular += '<option>video/ogg</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>\n' keys_upload_formular += '<input type="hidden" name="success_action_redirect" value="http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=true">\n' keys_upload_formular += '<input type="hidden" name="AWSAccessKeyId" value="'+AWSAccessKeyId+'">\n' keys_upload_formular += '<input type="hidden" name="policy" value="'+policy+'">\n' keys_upload_formular += '<input type="hidden" name="signature" value="'+signature+'">\n' keys_upload_formular += '<input type="file" name="file" size="20">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' if sprache == "de": keys_upload_formular += '<input type="submit" value="Objekt in den Bucket hochladen">\n' else: keys_upload_formular += '<input type="submit" value="upload objekt into bucket">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '</table>' keys_upload_formular += '</form>' else: # Not the mobile version keys_upload_formular += '<table border="0" cellspacing="0" cellpadding="5">' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' keys_upload_formular += '<input type="hidden" name="key" value="${filename}">\n' keys_upload_formular += '<select name="acl" size="1">\n' keys_upload_formular += '<option selected="selected">public-read</option>\n' keys_upload_formular += '<option>private</option>\n' keys_upload_formular += '<option>public-read-write</option>\n' keys_upload_formular += '<option>authenticated-read</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '<select name="Content-Type" size="1">\n' keys_upload_formular += '<option selected="selected">application/octet-stream</option>\n' keys_upload_formular += '<option>application/pdf</option>\n' keys_upload_formular += '<option>application/zip</option>\n' keys_upload_formular += '<option>audio/mp4</option>\n' keys_upload_formular += '<option>audio/mpeg</option>\n' keys_upload_formular += '<option>audio/ogg</option>\n' keys_upload_formular += '<option>audio/vorbis</option>\n' keys_upload_formular += '<option>image/gif</option>\n' keys_upload_formular += '<option>image/jpeg</option>\n' keys_upload_formular += '<option>image/png</option>\n' keys_upload_formular += '<option>image/tiff</option>\n' keys_upload_formular += '<option>text/html</option>\n' keys_upload_formular += '<option>text/plain</option>\n' keys_upload_formular += '<option>video/mp4</option>\n' keys_upload_formular += '<option>video/mpeg</option>\n' keys_upload_formular += '<option>video/ogg</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>\n' keys_upload_formular += '<input type="hidden" name="success_action_redirect" value="http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=false">\n' keys_upload_formular += '<input type="hidden" name="AWSAccessKeyId" value="'+AWSAccessKeyId+'">\n' keys_upload_formular += '<input type="hidden" name="policy" value="'+policy+'">\n' keys_upload_formular += '<input type="hidden" name="signature" value="'+signature+'">\n' keys_upload_formular += '<input type="file" name="file" size="60">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' if sprache == "de": keys_upload_formular += '<input type="submit" value="Objekt in den Bucket hochladen">\n' else: keys_upload_formular += '<input type="submit" value="upload objekt into bucket">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '</table>' keys_upload_formular += '</form>' # Unter Eucalyptus funktioniert das Hochladen von Keys nicht #else: # if sprache == "de": # keys_upload_formular = '<p> </p>\n Das Hochladen von Keys funktioniert unter Eucalyptus noch nicht' # else: # keys_upload_formular = '<p> </p>\n The key upload is still not working with Eucaplyptus' if laenge_liste_keys != 0: alle_keys_loeschen_button = '<p> </p>\n' alle_keys_loeschen_button += '<form action="/alle_keys_loeschen" method="get">\n' alle_keys_loeschen_button += '<input type="hidden" name="mobile" value="'+mobile+'">' alle_keys_loeschen_button += '<input type="hidden" name="s3_ansicht" value="pur"> \n' alle_keys_loeschen_button += '<input type="hidden" name="bucket_name" value="'+bucketname+'"> \n' if sprache == "de": alle_keys_loeschen_button += '<input type="submit" value="Alle Objekte löschen">\n' else: alle_keys_loeschen_button += '<input type="submit" value="Erase all objects">\n' alle_keys_loeschen_button += '</form>\n' else: alle_keys_loeschen_button = '' path = '&path=bucket_inhalt_pure&bucket='+bucketname+'&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'bucket_keys_tabelle': bucket_keys_tabelle, 'input_error_message': input_error_message, 'bucketname': bucketname, 'keys_upload_formular': keys_upload_formular, #'eucalyptus_warnung': eucalyptus_warnung, 'alle_keys_loeschen_button': alle_keys_loeschen_button, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "s3_keys_pur.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "s3_keys_pur.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" #self.response.out.write('posted!') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') snapshot = self.request.get('snapshot') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: regionname = '---' zone_amazon = "" else: conn_region, regionname = login(username) zone_amazon = amazon_region(username) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' zonen_liste = zonen_liste_funktion(username,sprache,mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht rot formatiert werden soll... if message in ("8", "10", "16", "17", "25"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Zonen liste_zonen = conn_region.get_all_zones() except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "10" self.redirect('/volumeaussnapshoterzeugen?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumeaussnapshoterzeugen?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_zonen = len(liste_zonen) volume_aus_snapshot_erzeugen_tabelle = '' volume_aus_snapshot_erzeugen_tabelle += '<form action="/volumeaussnapshoterzeugen_definiv" method="post" accept-charset="utf-8">\n' volume_aus_snapshot_erzeugen_tabelle += '<input type="hidden" name="mobile" value="'+mobile+'">' volume_aus_snapshot_erzeugen_tabelle += '<input type="hidden" name="snapshot" value="'+snapshot+'">' volume_aus_snapshot_erzeugen_tabelle += '<table border="0" cellspacing="0" cellpadding="5">' volume_aus_snapshot_erzeugen_tabelle += '<tr>\n' volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>ID:</b></td>\n' volume_aus_snapshot_erzeugen_tabelle += '<td>'+snapshot+'</td>\n' volume_aus_snapshot_erzeugen_tabelle += '</tr>\n' volume_aus_snapshot_erzeugen_tabelle += '<tr>\n' if sprache == "de": volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Zonen:</b></td>\n' else: volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Zones:</b></td>\n' volume_aus_snapshot_erzeugen_tabelle += '<td>\n' for i in range(laenge_liste_zonen): volume_aus_snapshot_erzeugen_tabelle += '<input type="radio" name="zone" value="'+liste_zonen[i].name+'"> '+liste_zonen[i].name+'<BR>\n' volume_aus_snapshot_erzeugen_tabelle += '</td>\n' volume_aus_snapshot_erzeugen_tabelle += '</tr>\n' volume_aus_snapshot_erzeugen_tabelle += '<tr>\n' if sprache == "de": volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Größe:</b></td>\n' else: volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Size:</b></td>\n' volume_aus_snapshot_erzeugen_tabelle += '<td><input name="groesse" type="text" size="3" maxlength="3">\n' volume_aus_snapshot_erzeugen_tabelle += ' \n' volume_aus_snapshot_erzeugen_tabelle += '<select name="GB_oder_TB" size="1">\n' volume_aus_snapshot_erzeugen_tabelle += '<option selected="selected">GB</option>\n' volume_aus_snapshot_erzeugen_tabelle += '<option>TB</option>\n' volume_aus_snapshot_erzeugen_tabelle += '</select>\n' volume_aus_snapshot_erzeugen_tabelle += '</td>\n' volume_aus_snapshot_erzeugen_tabelle += '</tr>\n' volume_aus_snapshot_erzeugen_tabelle += '<tr>\n' if sprache == "de": volume_aus_snapshot_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="Volume aus Snapshot erzeugen"></td>\n' else: volume_aus_snapshot_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="create volume from snapshot"></td>\n' volume_aus_snapshot_erzeugen_tabelle += '</table>' volume_aus_snapshot_erzeugen_tabelle += '</form>' path = '&path=volumeaussnapshoterzeugen&snapshot='+snapshot+'&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'volume_aus_snapshot_erzeugen_tabelle': volume_aus_snapshot_erzeugen_tabelle, 'input_error_message': input_error_message, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "volume_aus_snapshot_create.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "volume_aus_snapshot_create.html") self.response.out.write(template.render(path,template_values))
def get(self): # self.response.out.write('posted!') mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": path = '&path=securitygroups&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join( os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_google_storage.html") else: path = os.path.join( os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path, template_values)) # It is Host Europe Cloud Storage and not am IaaS elif regionname == "HostEuropeCloudStorage": path = '&path=zonen&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join( os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_host_europe_storage.html") else: path = os.path.join( os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_host_europe_storage.html") self.response.out.write(template.render(path, template_values)) # It is not Google Storage. It is an IaaS else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("40", "48"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "41", "42", "43", "44", "45", "46", "47", "49"): input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" try: # Liste mit den Security Groups liste_security_groups = conn_region.get_all_security_groups( ) except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": gruppentabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: gruppentabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": gruppentabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: gruppentabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_security_groups = len(liste_security_groups) if laenge_liste_security_groups == 0: gruppentabelle = 'Es sind keine Sicherheitsgruppen in der Zone vorhanden.' else: if mobile == "true": gruppentabelle = '' gruppentabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">' counter = 0 for i in range(laenge_liste_security_groups): if counter > 0: gruppentabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 gruppentabelle += '<tr>' gruppentabelle += '<td width="75">' gruppentabelle += '<a href="/gruppenentfernen?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title=" Sicherheitsgruppe löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Security Gruppe löschen"></a>' else: gruppentabelle += '" title="erase security group"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase security group"></a>' gruppentabelle += '</td>' gruppentabelle += '<td align="left">' gruppentabelle += '<a href="/gruppenaendern?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title="Regeln einsehen/ändern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Regeln einsehen/ändern"></a>' else: gruppentabelle += '" title="check/alter rules"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="check/alter rules"></a>' gruppentabelle += '</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' gruppentabelle += '<td align="right"><b>ID:</b></td>' gruppentabelle += '<td>' + liste_security_groups[ i].name + '</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right"><b>Beschreibung:</b></td>' else: gruppentabelle += '<td align="right"><b>Description:</b></td>' gruppentabelle += '<td>' + liste_security_groups[ i].description + '</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right"><b>Besitzer:</b></td>' else: gruppentabelle += '<td align="right"><b>Owner:</b></td>' gruppentabelle += '<td>' + liste_security_groups[ i].owner_id + '</td>' gruppentabelle += '</tr>' gruppentabelle += '</table>' else: gruppentabelle = '' gruppentabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_security_groups): if counter > 0: gruppentabelle += '<tr><td colspan="2"> </td></tr>' counter += 1 gruppentabelle += '<tr>' gruppentabelle += '<td align="left" bgcolor="#D4D4D4">' gruppentabelle += '<a href="/gruppenentfernen?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title=" Sicherheitsgruppe löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Security Gruppe löschen"></a>' else: gruppentabelle += '" title="erase security group"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase security group"></a>' gruppentabelle += '</td>' gruppentabelle += '<td align="left">' gruppentabelle += '<a href="/gruppenaendern?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title="Regeln einsehen/ändern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Regeln einsehen/ändern"></a>' else: gruppentabelle += '" title="check/alter rules"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="check/alter rules"></a>' gruppentabelle += '</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>' gruppentabelle += '<td align="left">' + liste_security_groups[ i].name + '</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Beschreibung:</b></td>' else: gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Description:</b></td>' gruppentabelle += '<td align="left">' + liste_security_groups[ i].description + '</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Besitzer:</b></td>' else: gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Owner:</b></td>' gruppentabelle += '<td align="left">' + liste_security_groups[ i].owner_id + '</td>' gruppentabelle += '</tr>' gruppentabelle += '</table>' path = '&path=securitygroups&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'securitygroupsliste': gruppentabelle, 'input_error_message': input_error_message, 'zonen_liste': zonen_liste, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "securitygroups.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "securitygroups.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" #self.response.out.write('posted!') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') snapshot = self.request.get('snapshot') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: regionname = '---' zone_amazon = "" else: conn_region, regionname = login(username) zone_amazon = amazon_region(username) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' zonen_liste = zonen_liste_funktion(username, sprache, mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht rot formatiert werden soll... if message in ("8", "10", "16", "17", "25"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Zonen liste_zonen = conn_region.get_all_zones() except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "10" self.redirect('/volumeaussnapshoterzeugen?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumeaussnapshoterzeugen?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_zonen = len(liste_zonen) volume_aus_snapshot_erzeugen_tabelle = '' volume_aus_snapshot_erzeugen_tabelle += '<form action="/volumeaussnapshoterzeugen_definiv" method="post" accept-charset="utf-8">\n' volume_aus_snapshot_erzeugen_tabelle += '<input type="hidden" name="mobile" value="' + mobile + '">' volume_aus_snapshot_erzeugen_tabelle += '<input type="hidden" name="snapshot" value="' + snapshot + '">' volume_aus_snapshot_erzeugen_tabelle += '<table border="0" cellspacing="0" cellpadding="5">' volume_aus_snapshot_erzeugen_tabelle += '<tr>\n' volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>ID:</b></td>\n' volume_aus_snapshot_erzeugen_tabelle += '<td>' + snapshot + '</td>\n' volume_aus_snapshot_erzeugen_tabelle += '</tr>\n' volume_aus_snapshot_erzeugen_tabelle += '<tr>\n' if sprache == "de": volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Zonen:</b></td>\n' else: volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Zones:</b></td>\n' volume_aus_snapshot_erzeugen_tabelle += '<td>\n' for i in range(laenge_liste_zonen): volume_aus_snapshot_erzeugen_tabelle += '<input type="radio" name="zone" value="' + liste_zonen[ i].name + '"> ' + liste_zonen[i].name + '<BR>\n' volume_aus_snapshot_erzeugen_tabelle += '</td>\n' volume_aus_snapshot_erzeugen_tabelle += '</tr>\n' volume_aus_snapshot_erzeugen_tabelle += '<tr>\n' if sprache == "de": volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Größe:</b></td>\n' else: volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Size:</b></td>\n' volume_aus_snapshot_erzeugen_tabelle += '<td><input name="groesse" type="text" size="3" maxlength="3">\n' volume_aus_snapshot_erzeugen_tabelle += ' \n' volume_aus_snapshot_erzeugen_tabelle += '<select name="GB_oder_TB" size="1">\n' volume_aus_snapshot_erzeugen_tabelle += '<option selected="selected">GB</option>\n' volume_aus_snapshot_erzeugen_tabelle += '<option>TB</option>\n' volume_aus_snapshot_erzeugen_tabelle += '</select>\n' volume_aus_snapshot_erzeugen_tabelle += '</td>\n' volume_aus_snapshot_erzeugen_tabelle += '</tr>\n' volume_aus_snapshot_erzeugen_tabelle += '<tr>\n' if sprache == "de": volume_aus_snapshot_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="Volume aus Snapshot erzeugen"></td>\n' else: volume_aus_snapshot_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="create volume from snapshot"></td>\n' volume_aus_snapshot_erzeugen_tabelle += '</table>' volume_aus_snapshot_erzeugen_tabelle += '</form>' path = '&path=volumeaussnapshoterzeugen&snapshot=' + snapshot + '&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'volume_aus_snapshot_erzeugen_tabelle': volume_aus_snapshot_erzeugen_tabelle, 'input_error_message': input_error_message, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "volume_aus_snapshot_create.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "volume_aus_snapshot_create.html") self.response.out.write(template.render(path, template_values))
def get(self): # self.response.out.write('posted!') mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) # So ist der HTML-Code korrekt url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') # So ist der HTML-Code nicht korrekt #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": path = '&path=elastic_ips&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_google_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path,template_values)) # It is Host Europe Cloud Storage and not am IaaS elif regionname == "HostEuropeCloudStorage": path = '&path=zonen&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_host_europe_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_host_europe_storage.html") self.response.out.write(template.render(path,template_values)) # It is not Google Storage. It is an IaaS else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("0", "3", "5", "7"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("1", "2", "4", "6", "8", "9", "10"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Adressen liste_adressen = conn_region.get_all_addresses() except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": adressentabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: adressentabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": adressentabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: adressentabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_adressen = len(liste_adressen) if laenge_liste_adressen == 0: if sprache == "de": adressentabelle = 'Sie haben keine elastischen IPs in dieser Region.' else: adressentabelle = 'You have no elastic IPs inside this region.' else: adressentabelle = '' adressentabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_adressen): if counter > 0: adressentabelle += '<tr><td colspan="4"> </td></tr>' counter += 1 adressentabelle += '<tr>' adressentabelle += '<td>' adressentabelle += '<a href="/release_address?address=' adressentabelle += liste_adressen[i].public_ip adressentabelle += "&mobile=" adressentabelle += str(mobile) if sprache == "de": adressentabelle += '" title="Elastische IP freigeben">' adressentabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Elastische IP freigeben"></a>' else: adressentabelle += '" title="release elastic IP">' adressentabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="release elastic IP"></a>' adressentabelle += '</td>' adressentabelle += '<td>'+liste_adressen[i].public_ip+'</td>' if liste_adressen[i].instance_id == "" or liste_adressen[i].instance_id == "nobody": adressentabelle += '<td>' adressentabelle += '<a href="/associate_address?address=' adressentabelle += liste_adressen[i].public_ip adressentabelle += "&mobile=" adressentabelle += str(mobile) if sprache == "de": adressentabelle += '" title="Elastische IP mit Instanz verknüpfen">' adressentabelle += '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="Elastische IP mit Instanz verknüpfen"></a>' else: adressentabelle += '" title="associate elastic IP with instance">' adressentabelle += '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="associate elastic IP with instance"></a>' adressentabelle += '</td>' else: adressentabelle += '<td>' adressentabelle += '<a href="/disassociate_address?address=' adressentabelle += liste_adressen[i].public_ip adressentabelle += "&mobile=" adressentabelle += str(mobile) if sprache == "de": adressentabelle += '" title="Elastische IP von der Instanz lösen">' adressentabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="Elastische IP mit Instanz verknüpfen"></a>' else: adressentabelle += '" title="disassociate elastic IP from instance">' adressentabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="associate elastic IP with instance"></a>' adressentabelle += '</td>' if liste_adressen[i].instance_id: adressentabelle += '<td align="center">'+liste_adressen[i].instance_id+'</td>' else: adressentabelle += '<td align="center"><tt>---</tt></td>' adressentabelle += '</tr>' adressentabelle += '</table>' path = '&path=elastic_ips&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'adressentabelle': adressentabelle, 'zonen_liste': zonen_liste, 'input_error_message': input_error_message, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "adressen.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "adressen.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # self.response.out.write('posted!') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("105", "110"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("92", "106", "107", "108", "109"): input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" # Mit S3 verbinden conn_s3 = logins3(username) try: # Liste der Buckets liste_buckets = conn_s3.get_all_buckets() except: # Wenn es nicht klappt... if sprache == "de": bucketstabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: bucketstabelle = '<font color="red">An error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_buckets = len(liste_buckets) if laenge_liste_buckets == 0: if sprache == "de": bucketstabelle = 'Es sind keine Buckets in der Region vorhanden.' else: bucketstabelle = 'Still no buckets exist inside this region.' else: if mobile == "true": # Mobile version bucketstabelle = '' bucketstabelle += '<table border="0" cellspacing="0" cellpadding="5">' for i in range(laenge_liste_buckets): bucketstabelle += '<tr>' bucketstabelle += '<td align="left">' bucketstabelle += '<a href="/bucketentfernen?bucket=' bucketstabelle += str(liste_buckets[i].name) bucketstabelle += "&mobile=" bucketstabelle += str(mobile) if sprache == "de": bucketstabelle += '" title="Bucket löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Bucket löschen"></a>' else: bucketstabelle += '" title="erase bucket"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase bucket"></a>' bucketstabelle += '</td>' bucketstabelle += '<td colspan="4" align="left">' + str( liste_buckets[i].name) + '</td>' bucketstabelle += '</tr>' bucketstabelle += '<tr>' bucketstabelle += '<td> </td>' if sprache == "de": bucketstabelle += '<td align="right"><b>Reines S3:</b></td>' else: bucketstabelle += '<td align="right"><b>pure S3:</b></td>' bucketstabelle += '<td align="left">' bucketstabelle += '<a href="/bucket_inhalt_pure?bucket=' bucketstabelle += str(liste_buckets[i].name) bucketstabelle += "&mobile=" bucketstabelle += str(mobile) if sprache == "de": bucketstabelle += '" title="Bucket einsehen (reine S3-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' else: bucketstabelle += '" title="List content of this bucket (pure S3)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' bucketstabelle += '</td>' if sprache == "de": bucketstabelle += '<td align="right"><b>Komfort S3:</b></td>' else: bucketstabelle += '<td align="right"><b>comfort S3:</b></td>' bucketstabelle += '<td align="left">' bucketstabelle += '<a href="/bucket_inhalt?bucket=' bucketstabelle += str(liste_buckets[i].name) bucketstabelle += "&mobile=" bucketstabelle += str(mobile) if sprache == "de": bucketstabelle += '" title="Bucket einsehen (Komfort-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' else: bucketstabelle += '" title="List content of this bucket (S3 with more comfort)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' bucketstabelle += '</td>' bucketstabelle += '</tr>' bucketstabelle += '</table>' else: # Not the mobile version bucketstabelle = '' bucketstabelle += '<table border="0" cellspacing="0" cellpadding="5">' bucketstabelle += '<tr>' bucketstabelle += '<th> </th>' bucketstabelle += '<th align="left">Buckets</th>' if sprache == "de": bucketstabelle += '<th>Reine S3-Darstellung</th>' bucketstabelle += '<th>Komfort-Darstellung</th>' else: bucketstabelle += '<th>Pure S3</th>' bucketstabelle += '<th>S3 with more comfort</th>' bucketstabelle += '</tr>' for i in range(laenge_liste_buckets): bucketstabelle += '<tr>' bucketstabelle += '<td>' bucketstabelle += '<a href="/bucketentfernen?bucket=' bucketstabelle += str(liste_buckets[i].name) bucketstabelle += "&mobile=" bucketstabelle += str(mobile) if sprache == "de": bucketstabelle += '" title="Bucket löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Bucket löschen"></a>' else: bucketstabelle += '" title="erase bucket"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase bucket"></a>' bucketstabelle += '</td>' bucketstabelle += '<td>' + str( liste_buckets[i].name) + '</td>' bucketstabelle += '<td align="center">' bucketstabelle += '<a href="/bucket_inhalt_pure?bucket=' bucketstabelle += str(liste_buckets[i].name) if sprache == "de": bucketstabelle += '" title="Bucket einsehen (reine S3-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' else: bucketstabelle += '" title="List content of this bucket (pure S3)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' bucketstabelle += '</td>' bucketstabelle += '<td align="center">' bucketstabelle += '<a href="/bucket_inhalt?bucket=' bucketstabelle += str(liste_buckets[i].name) if sprache == "de": bucketstabelle += '" title="Bucket einsehen (Komfort-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' else: bucketstabelle += '" title="List content of this bucket (S3 with more comfort)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>' bucketstabelle += '</td>' bucketstabelle += '</tr>' bucketstabelle += '</table>' path = '&path=s3&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'bucketstabelle': bucketstabelle, 'input_error_message': input_error_message, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "s3.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "s3.html") self.response.out.write(template.render(path, template_values))
def get(self): # self.response.out.write('posted!') mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Wurde ein neuer Schlüssel angelegt? neu = self.request.get('neu') # Name des neuen Schlüssels neuerkeyname = self.request.get('neuerkeyname') # Name des Datastore-Schlüssels, unter dem der Secret-Key angehegt ist secretkey = self.request.get('secretkey') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') #So könnte man vielleicht den File-Download-Dialog bekommen #Content-disposition: attachment; filename="fname.ext" # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": path = '&path=schluessel&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_google_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path,template_values)) # It is Host Europe Cloud Storage and not am IaaS elif regionname == "HostEuropeCloudStorage": path = '&path=zonen&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_host_europe_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_host_europe_storage.html") self.response.out.write(template.render(path,template_values)) # It is not Google Storage. It is an IaaS else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("99", "103"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "92", "100", "101", "102", "104"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Keys liste_key_pairs = conn_region.get_all_key_pairs() except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": keytabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: keytabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": keytabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: keytabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_keys = len(liste_key_pairs) if laenge_liste_keys == 0: if sprache == "de": keytabelle = 'Sie haben keine Schlüsselpaare in dieser Region.' else: keytabelle = 'You have no keypairs inside this region.' else: if mobile == "true": keytabelle = '' keytabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_keys): if counter > 0: keytabelle += '<tr><td colspan="2"> </td></tr>' counter += 1 keytabelle += '<tr>' keytabelle += '<td>' keytabelle += '<a href="/schluesselentfernen?key=' keytabelle += liste_key_pairs[i].name keytabelle += "&mobile=" keytabelle += str(mobile) keytabelle += '"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Schlüsselpaar löschen"></a>' keytabelle += '</td>' keytabelle += '<td>'+liste_key_pairs[i].name+'</td>' keytabelle += '</tr>' # keytabelle += '<tr>' # keytabelle += '<td> </td>' # keytabelle += '<td><tt>'+liste_key_pairs[i].fingerprint+'</tt></td>' # keytabelle += '</tr>' keytabelle = keytabelle + '</table>' else: keytabelle = '' keytabelle += '<table border="0" cellspacing="0" cellpadding="5">' keytabelle += '<tr>' keytabelle += '<th> </th>' keytabelle += '<th align="center">Name</th>' if sprache == "de": keytabelle += '<th align="center">Prüfsumme</th>' else: keytabelle += '<th align="center">Fingerprint</th>' keytabelle = keytabelle + '</tr>' for i in range(laenge_liste_keys): keytabelle += '<tr>' keytabelle += '<td>' keytabelle += '<a href="/schluesselentfernen?key=' keytabelle += liste_key_pairs[i].name keytabelle += "&mobile=" keytabelle += str(mobile) keytabelle += '"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Schlüsselpaar löschen"></a>' keytabelle += '</td>' keytabelle += '<td>'+liste_key_pairs[i].name+'</td>' keytabelle += '<td><tt>'+liste_key_pairs[i].fingerprint+'</tt></td>' keytabelle += '</tr>' keytabelle = keytabelle + '</table>' if neu == "ja": secretkey_memcache_mit_zeilenumbruch = memcache.get(secretkey) secretkey_memcache = secretkey_memcache_mit_zeilenumbruch.replace("\n","<BR>") # Das wird in den Body-Tag der Datei base.html eingefügt. # bodycommand = ' onLoad="newkey()" ' # javascript_funktion = ''' #<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> # <!-- to hide script contents from old browsers # function newkey() # { # OpenWindow=window.open("", "newwin", "height=450, width=500,toolbar=no,scrollbars="+scroll+",menubar=no") # OpenWindow.document.write("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'") # OpenWindow.document.write(" 'http://www.w3.org/TR/html4/loose.dtd'>") # # OpenWindow.document.write("<HTML>") # OpenWindow.document.write("<HEAD>") # OpenWindow.document.write("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>") # OpenWindow.document.write("<TITLE>Secret Key<\/TITLE>") # OpenWindow.document.write("<link type='text/css' rel='stylesheet' href='/stylesheets/style.css'>") # OpenWindow.document.write("<link rel='SHORTCUT ICON' href='/favicon.ico'>") # OpenWindow.document.write("<\/HEAD>") # OpenWindow.document.write("<BODY BGCOLOR='white'>") # OpenWindow.document.write("<h1>Secret Key<\/h1>") # OpenWindow.document.write("<P> <\/P>") # OpenWindow.document.write("<tt>''' # javascript_funktion = javascript_funktion + secretkey_memcache # if sprache == "de": # javascript_funktion = javascript_funktion + '''<\/tt>") # OpenWindow.document.write("<P> <\/P>") # OpenWindow.document.write("<B>Achtung!<\/B> Den Secret Key müssen Sie speichern.<BR>") # OpenWindow.document.write("Am besten in einer Datei <tt>''' # else: # javascript_funktion = javascript_funktion + '''<\/tt>") # OpenWindow.document.write("<P> <\/P>") # OpenWindow.document.write("<B>Attention!<\/B> The secret key need to be saved.<BR>") # OpenWindow.document.write("As an advise use the filename <tt>''' # javascript_funktion = javascript_funktion + neuerkeyname # javascript_funktion = javascript_funktion + '''.secret<\/tt>.") # OpenWindow.document.write("<P> <\/P>") # OpenWindow.document.write("<tt>chmod 600 ''' # javascript_funktion = javascript_funktion + neuerkeyname # javascript_funktion = javascript_funktion + '''.secret<\/tt>") # OpenWindow.document.write("<\/BODY>") # OpenWindow.document.write("<\/HTML>") # OpenWindow.document.close() # self.name="main" # } # // end hiding contents from old browsers --> #</SCRIPT>''' new_keypair_secretkey = '' if sprache == "de": new_keypair_secretkey += '<b>Ihr neuer geheimer Schlüssel</b>' else: new_keypair_secretkey += '<b>Your new secret key</b>' new_keypair_secretkey += '<p> </p>' new_keypair_secretkey += '<tt>'+secretkey_memcache+'</tt>' new_keypair_secretkey += '<p> </p>' if sprache == "de": new_keypair_secretkey += '<b>Achtung!</b> Ihren geheimen Schlüssel müssen Sie speichern. Am besten in einer lokalen Datei mit den korrekten Benutzerrechten.<BR>' new_keypair_secretkey += '<tt>chmod 600 '+neuerkeyname+'.secret</tt>' else: new_keypair_secretkey += '<b>Attention!</b> You need to save your new secret key. As an advise use a local file with the correct user access rights.BR>' new_keypair_secretkey += '<tt>chmod 600 '+neuerkeyname+'.secret</tt>' new_keypair_secretkey += '<p> </p>' new_keypair_secretkey_download_link = '' new_keypair_secretkey_download_link += '<a href="'+secretkey_memcache+'">'+neuerkeyname+'.secret</a>' new_keypair_secretkey_download_link += '<p> </p>' else: # neu ist nicht "ja" # bodycommand = " " # javascript_funktion = " " new_keypair_secretkey = "" new_keypair_secretkey_download_link = "" path = '&path=schluessel&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'keytabelle': keytabelle, # 'bodycommand': bodycommand, # 'javascript_funktion': javascript_funktion, 'zonen_liste': zonen_liste, 'input_error_message': input_error_message, 'mobile': mobile, 'new_keypair_secretkey': new_keypair_secretkey, 'new_keypair_secretkey_download_link': new_keypair_secretkey_download_link, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "keys.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "keys.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" #self.response.out.write('posted!') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: regionname = '---' zone_amazon = "" else: conn_region, regionname = login(username) zone_amazon = amazon_region(username) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' zonen_liste = zonen_liste_funktion(username,sprache,mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("8", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60"): # wird sie hier, in der Hilfsfunktion rot formatiert input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Zonen liste_zonen = conn_region.get_all_zones() except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "10" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_zonen = len(liste_zonen) if mobile == "true": elb_erzeugen_tabelle = '' elb_erzeugen_tabelle += '<form action="/elb_definiv_erzeugen" method="post" accept-charset="utf-8">\n' elb_erzeugen_tabelle += '<input type="hidden" name="mobile" value="'+mobile+'">' elb_erzeugen_tabelle += '<table border="0" cellspacing="0" cellpadding="5">' elb_erzeugen_tabelle += '<tr>\n' elb_erzeugen_tabelle += '<td align="right">Name:</td>\n' elb_erzeugen_tabelle += '<td><input name="elb_name" type="text" size="20" maxlength="20"></td>\n' elb_erzeugen_tabelle += '</tr>\n' elb_erzeugen_tabelle += '<tr>\n' if sprache == "de": elb_erzeugen_tabelle += '<td align="right">Zonen:</td>\n' else: elb_erzeugen_tabelle += '<td align="right">Zones:</td>\n' elb_erzeugen_tabelle += '<td>\n' for i in range(laenge_liste_zonen): elb_erzeugen_tabelle += '<input type="checkbox" name="'+liste_zonen[i].name+'" value="'+liste_zonen[i].name+'"> '+liste_zonen[i].name+'<BR>\n' elb_erzeugen_tabelle += '</td>\n' elb_erzeugen_tabelle += '</tr>\n' elb_erzeugen_tabelle += '<tr>\n' if sprache == "de": elb_erzeugen_tabelle += '<td align="right">Protokoll:</td>\n' else: elb_erzeugen_tabelle += '<td align="right">Protocol:</td>\n' elb_erzeugen_tabelle += '<td>\n' elb_erzeugen_tabelle += '<select name="elb_protokoll" size="1">\n' elb_erzeugen_tabelle += ' <option selected="selected">TCP</option>\n' elb_erzeugen_tabelle += ' <option>HTTP</option>\n' elb_erzeugen_tabelle += '</select>\n' elb_erzeugen_tabelle += '</td>\n' elb_erzeugen_tabelle += '</tr>\n' elb_erzeugen_tabelle += '<tr>\n' elb_erzeugen_tabelle += '<td align="right">Port:</td>\n' elb_erzeugen_tabelle += '<td><input name="ELBPort" type="text" size="6" maxlength="6">' if sprache == "de": elb_erzeugen_tabelle += ' (Lastverteiler)</td>\n' else: elb_erzeugen_tabelle += ' (load balancer)</td>\n' elb_erzeugen_tabelle += '</tr>\n' elb_erzeugen_tabelle += '<tr>\n' elb_erzeugen_tabelle += '<td align="right">Port:</td>\n' elb_erzeugen_tabelle += '<td><input name="InstPort" type="text" size="6" maxlength="6">' if sprache == "de": elb_erzeugen_tabelle += ' (Instanz)</td>\n' else: elb_erzeugen_tabelle += ' (instance)</td>\n' elb_erzeugen_tabelle += '</tr>\n' elb_erzeugen_tabelle += '<tr>\n' if sprache == "de": elb_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="Elastischen Lastverteiler anlegen"></td>\n' else: elb_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="create elastic load balancer"></td>\n' elb_erzeugen_tabelle += '</table>' elb_erzeugen_tabelle += '</form>' else: elb_erzeugen_tabelle = '' elb_erzeugen_tabelle += '<form action="/elb_definiv_erzeugen" method="post" accept-charset="utf-8">\n' elb_erzeugen_tabelle += '<input type="hidden" name="mobile" value="'+mobile+'">' elb_erzeugen_tabelle += '<table border="0" cellspacing="0" cellpadding="5">' elb_erzeugen_tabelle += '<tr>\n' elb_erzeugen_tabelle += '<td align="right">Name:</td>\n' elb_erzeugen_tabelle += '<td><input name="elb_name" type="text" size="20" maxlength="20"></td>\n' elb_erzeugen_tabelle += '</tr>\n' elb_erzeugen_tabelle += '<tr>\n' if sprache == "de": elb_erzeugen_tabelle += '<td align="right">Zonen:</td>\n' else: elb_erzeugen_tabelle += '<td align="right">Zones:</td>\n' elb_erzeugen_tabelle += '<td>\n' for i in range(laenge_liste_zonen): elb_erzeugen_tabelle += '<input type="checkbox" name="'+liste_zonen[i].name+'" value="'+liste_zonen[i].name+'"> '+liste_zonen[i].name+'<BR>\n' elb_erzeugen_tabelle += '</td>\n' elb_erzeugen_tabelle += '</tr>\n' elb_erzeugen_tabelle += '<tr>\n' if sprache == "de": elb_erzeugen_tabelle += '<td align="right">Protokoll:</td>\n' else: elb_erzeugen_tabelle += '<td align="right">Protocol:</td>\n' elb_erzeugen_tabelle += '<td>\n' elb_erzeugen_tabelle += '<select name="elb_protokoll" size="1">\n' elb_erzeugen_tabelle += ' <option selected="selected">TCP</option>\n' elb_erzeugen_tabelle += ' <option>HTTP</option>\n' elb_erzeugen_tabelle += '</select>\n' elb_erzeugen_tabelle += '</td>\n' elb_erzeugen_tabelle += '</tr>\n' elb_erzeugen_tabelle += '<tr>\n' elb_erzeugen_tabelle += '<td align="right">Port:</td>\n' elb_erzeugen_tabelle += '<td><input name="ELBPort" type="text" size="6" maxlength="6">' if sprache == "de": elb_erzeugen_tabelle += ' (Lastverteiler)</td>\n' else: elb_erzeugen_tabelle += ' (load balancer)</td>\n' elb_erzeugen_tabelle += '</tr>\n' elb_erzeugen_tabelle += '<tr>\n' elb_erzeugen_tabelle += '<td align="right">Port:</td>\n' elb_erzeugen_tabelle += '<td><input name="InstPort" type="text" size="6" maxlength="6">' if sprache == "de": elb_erzeugen_tabelle += ' (Instanz)</td>\n' else: elb_erzeugen_tabelle += ' (instance)</td>\n' elb_erzeugen_tabelle += '</tr>\n' elb_erzeugen_tabelle += '<tr>\n' if sprache == "de": elb_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="Elastischen Lastverteiler anlegen"></td>\n' else: elb_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="create elastic load balancer"></td>\n' elb_erzeugen_tabelle += '</table>' elb_erzeugen_tabelle += '</form>' path = '&path=create_load_balancer&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'elb_erzeugen_tabelle': elb_erzeugen_tabelle, 'input_error_message': input_error_message, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "elb_create.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "elb_create.html") self.response.out.write(template.render(path,template_values))
def get(self): message = self.request.get('message') neuerzugang = self.request.get('neuerzugang') # Den Usernamen erfahren # Get the username username = users.get_current_user() # self.response.out.write('posted!') # Wir müssen das so machen, weil wir sonst nicht weiterkommen, # wenn ein Benutzer noch keinen Zugang eingerichtet hat. if users.get_current_user(): sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("127", "128", "129"): input_error_message = format_error_message_green( input_error_message) elif message in ("89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99"): # Ansonsten wird die Nachricht rot formatiert input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" Amazon_vorhanden = "false" Eucalyptus_vorhanden = "false" GoogleStorage_vorhanden = "false" # Erst überprüfen, ob schon ein Eintrag dieses Benutzers vorhanden ist. testen = db.GqlQuery( "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db", username_db=username) # Wie viele Einträge des Benutzers sind schon vorhanden? anzahl = testen.count() # Alle Einträge des Benutzers holen? results = testen.fetch(100) if anzahl: # wenn schon Einträge für den Benutzer vorhanden sind... tabelle_logins = '' tabelle_logins = tabelle_logins + '<table border="3" cellspacing="0" cellpadding="5">' tabelle_logins = tabelle_logins + '<tr>' tabelle_logins = tabelle_logins + '<th> </th>' if sprache == "de": tabelle_logins = tabelle_logins + '<th align="center">Speicherdienst</th>' tabelle_logins = tabelle_logins + '<th align="center">Adresse (URL)</th>' tabelle_logins = tabelle_logins + '<th align="center">Access Key</th>' tabelle_logins = tabelle_logins + '<th align="center">Name (Beschreibung)</th>' else: tabelle_logins = tabelle_logins + '<th align="center">Storage Service</th>' tabelle_logins = tabelle_logins + '<th align="center">Endpoint URL</th>' tabelle_logins = tabelle_logins + '<th align="center">Access Key</th>' tabelle_logins = tabelle_logins + '<th align="center">Name (Description)</th>' tabelle_logins = tabelle_logins + '</tr>' for test in results: tabelle_logins = tabelle_logins + '<tr>' tabelle_logins = tabelle_logins + '<td>' tabelle_logins = tabelle_logins + '<a href="/zugangentfernen?region=' tabelle_logins = tabelle_logins + str(test.regionname) tabelle_logins = tabelle_logins + '&endpointurl=' tabelle_logins = tabelle_logins + str(test.endpointurl) tabelle_logins = tabelle_logins + '&accesskey=' tabelle_logins = tabelle_logins + str(test.accesskey) if sprache == "de": tabelle_logins = tabelle_logins + '" title="Zugang löschen' else: tabelle_logins = tabelle_logins + '" title="erase credentials' tabelle_logins = tabelle_logins + '"><img src="bilder/delete.png" width="16" height="16" border="0"' if sprache == "de": tabelle_logins = tabelle_logins + ' alt="Zugang löschen"></a>' else: tabelle_logins = tabelle_logins + ' alt="erase credentials"></a>' tabelle_logins = tabelle_logins + '</td>' tabelle_logins = tabelle_logins + '<td align="center">' tabelle_logins = tabelle_logins + str(test.zugangstyp) if str(test.zugangstyp) == "Amazon": Amazon_vorhanden = "true" if str(test.zugangstyp) == "Eucalyptus": Eucalyptus_vorhanden = "true" if str(test.zugangstyp) == "GoogleStorage": Eucalyptus_vorhanden = "true" tabelle_logins = tabelle_logins + '</td>' tabelle_logins = tabelle_logins + '<td align="center">' tabelle_logins = tabelle_logins + str(test.endpointurl) tabelle_logins = tabelle_logins + '</td>' tabelle_logins = tabelle_logins + '<td align="left">' tabelle_logins = tabelle_logins + str(test.accesskey) tabelle_logins = tabelle_logins + '</td>' tabelle_logins = tabelle_logins + '<td align="left">' tabelle_logins = tabelle_logins + test.eucalyptusname tabelle_logins = tabelle_logins + '</td>' tabelle_logins = tabelle_logins + '</tr>' tabelle_logins = tabelle_logins + '</table>' else: # wenn noch keine Einträge für den Benutzer vorhanden sind... if sprache == "de": tabelle_logins = 'Sie haben noch keine Login-Daten eingegeben' else: tabelle_logins = 'No credentials available' tabelle_logins = tabelle_logins + '<p> </p>' if neuerzugang == "eucalyptus": if Eucalyptus_vorhanden != "true": eingabefelder = '<p> </p>' eingabefelder = eingabefelder + '<form action="/zugangeinrichten" method="post" accept-charset="utf-8">' eingabefelder = eingabefelder + '<input type="hidden" name="typ" value="eucalyptus">' eingabefelder = eingabefelder + '<table border="0" cellspacing="5" cellpadding="5">' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td></td>' if sprache == "de": eingabefelder = eingabefelder + ' <td><font color="green">Der Name ist nur zur Unterscheidung</font></td>' else: eingabefelder = eingabefelder + ' <td><font color="green">Choose one you like</font></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td align="right">Name:</td>' eingabefelder = eingabefelder + ' <td colspan="2"><input type="text" size="40" name="nameregion" value="">' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td></td>' if sprache == "de": eingabefelder = eingabefelder + ' <td><font color="green">Nur die IP oder DNS ohne <tt>/services/Eucalyptus</tt></font></td>' else: eingabefelder = eingabefelder + ' <td><font color="green">Just the IP or DNS without <tt>/services/Eucalyptus</tt></font></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td align="right">Endpoint URL:</td>' eingabefelder = eingabefelder + ' <td colspan="2"><input type="text" size="40" name="endpointurl" value="">' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td></td>' if sprache == "de": eingabefelder = eingabefelder + ' <td><font color="green">Google App Engine akzeptiert nur diese Ports</font></td>' else: eingabefelder = eingabefelder + ' <td><font color="green">Google App Engine accepts only these ports</font></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td align="right">Port:</td>' #eingabefelder = eingabefelder + ' <td colspan="2"><input type="text" size="5" maxlength="5" name="port" value=""></td>' eingabefelder = eingabefelder + ' <td colspan="2">' eingabefelder = eingabefelder + ' <select name="port" size="1">' eingabefelder = eingabefelder + ' <option>80</option>' eingabefelder = eingabefelder + ' <option>443</option>' eingabefelder = eingabefelder + ' <option>4443</option>' eingabefelder = eingabefelder + ' <option>8080</option>' eingabefelder = eingabefelder + ' <option>8081</option>' eingabefelder = eingabefelder + ' <option>8082</option>' eingabefelder = eingabefelder + ' <option>8083</option>' eingabefelder = eingabefelder + ' <option>8084</option>' eingabefelder = eingabefelder + ' <option>8085</option>' eingabefelder = eingabefelder + ' <option>8086</option>' eingabefelder = eingabefelder + ' <option>8087</option>' eingabefelder = eingabefelder + ' <option>8088</option>' eingabefelder = eingabefelder + ' <option>8089</option>' eingabefelder = eingabefelder + ' <option selected="selected">8188</option>' # eingabefelder = eingabefelder + ' <option>8442</option>' ####### weg damit!!! ### eingabefelder = eingabefelder + ' <option>8444</option>' eingabefelder = eingabefelder + ' <option>8990</option>' eingabefelder = eingabefelder + ' </select>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td align="right">Access Key:</td>' eingabefelder = eingabefelder + ' <td colspan="2"><input type="text" size="40" name="accesskey" value=""></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td align="right">Secret Access Key:</td>' eingabefelder = eingabefelder + ' <td colspan="2"><input type="text" size="40" name="secretaccesskey" value=""></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td> </td>' if sprache == "de": eingabefelder = eingabefelder + ' <td align="center"><input type="submit" value="Zugang einrichten"></td>' eingabefelder = eingabefelder + ' <td align="center"><input type="reset" value="Löschen"></td>' else: eingabefelder = eingabefelder + ' <td align="center"><input type="submit" value="send"></td>' eingabefelder = eingabefelder + ' <td align="center"><input type="reset" value="erase"></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + '</table>' eingabefelder = eingabefelder + '</form>' else: # Eucalyptus_vorhanden is "true" if sprache == "de": eingabefelder = '<font color="red">Sie können keine weiteren Zugansdaten für Eucalyptus importieren</font>' else: eingabefelder = '<font color="red">You cannot add more Eucalyptus credentials</font>' elif neuerzugang == "ec2": if Amazon_vorhanden == "false": eingabefelder = '<p> </p>' eingabefelder = eingabefelder + '<form action="/zugangeinrichten" method="post" accept-charset="utf-8">' eingabefelder = eingabefelder + '<input type="hidden" name="typ" value="ec2">' eingabefelder = eingabefelder + '<table border="0" cellspacing="5" cellpadding="5">' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td align="right">Access Key:</td>' eingabefelder = eingabefelder + ' <td colspan="2"><input type="text" size="40" name="accesskey" value=""></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td align="right">Secret Access Key:</td>' eingabefelder = eingabefelder + ' <td colspan="2"><input type="text" size="40" name="secretaccesskey" value=""></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td> </td>' if sprache == "de": eingabefelder = eingabefelder + ' <td align="center"><input type="submit" value="Zugang einrichten"></td>' eingabefelder = eingabefelder + ' <td align="center"><input type="reset" value="Löschen"></td>' else: eingabefelder = eingabefelder + ' <td align="center"><input type="submit" value="send"></td>' eingabefelder = eingabefelder + ' <td align="center"><input type="reset" value="erase"></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + '</table>' eingabefelder = eingabefelder + '</form>' else: # Amazon_vorhanden is "true": if sprache == "de": eingabefelder = '<font color="red">Sie können keine weiteren Zugansdaten für S3 importieren</font>' else: eingabefelder = '<font color="red">You cannot add more S3 credentials</font>' elif neuerzugang == "googlestorage": if GoogleStorage_vorhanden == "false": eingabefelder = '<p> </p>' eingabefelder = eingabefelder + '<form action="/zugangeinrichten" method="post" accept-charset="utf-8">' eingabefelder = eingabefelder + '<input type="hidden" name="typ" value="googlestorage">' eingabefelder = eingabefelder + '<table border="0" cellspacing="5" cellpadding="5">' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td align="right">Access Key:</td>' eingabefelder = eingabefelder + ' <td colspan="2"><input type="text" size="40" name="accesskey" value=""></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td align="right">Secret Access Key:</td>' eingabefelder = eingabefelder + ' <td colspan="2"><input type="text" size="40" name="secretaccesskey" value=""></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + ' <tr>' eingabefelder = eingabefelder + ' <td> </td>' if sprache == "de": eingabefelder = eingabefelder + ' <td align="center"><input type="submit" value="Zugang einrichten"></td>' eingabefelder = eingabefelder + ' <td align="center"><input type="reset" value="Löschen"></td>' else: eingabefelder = eingabefelder + ' <td align="center"><input type="submit" value="send"></td>' eingabefelder = eingabefelder + ' <td align="center"><input type="reset" value="erase"></td>' eingabefelder = eingabefelder + ' </tr>' eingabefelder = eingabefelder + '</table>' eingabefelder = eingabefelder + '</form>' else: # Amazon_vorhanden is "true": if sprache == "de": eingabefelder = '<font color="red">Sie können keine weiteren Zugansdaten für Google Storage importieren</font>' else: eingabefelder = '<font color="red">You cannot add more Google Storage credentials</font>' else: eingabefelder = '' if neuerzugang == "eucalyptus" and Eucalyptus_vorhanden != "true": port_warnung = '<p> </p>\n' if sprache == "de": port_warnung = port_warnung + 'Die Google App Engine akzeptiert nur wenige Ports. ' port_warnung = port_warnung + 'Leider ist der Standard-Port von Eucalyputs (8773) nicht dabei. ' port_warnung = port_warnung + 'Es empfiehlt sich darum, einen anderen Port auf den Eucalyptus-Port umzuleiten. ' port_warnung = port_warnung + 'Ein Beispiel:<br> \n' port_warnung = port_warnung + '<tt>iptables -I INPUT -p tcp --dport 8188 -j ACCEPT</tt><br>\n ' port_warnung = port_warnung + '<tt>iptables -I PREROUTING -t nat -i eth0 -p tcp --dport 8188 -j REDIRECT --to-port 8773</tt> ' else: port_warnung = port_warnung + 'The Google App Engine accepts only a few number of ports ' port_warnung = port_warnung + 'and the default port of Eucalyptus (8773) is not included. ' port_warnung = port_warnung + 'Because of this fact, you have to route another port to the Eucayptus port. ' port_warnung = port_warnung + 'For example:<br> \n' port_warnung = port_warnung + '<tt>iptables -I INPUT -p tcp --dport 8188 -j ACCEPT</tt><br>\n ' port_warnung = port_warnung + '<tt>iptables -I PREROUTING -t nat -i eth0 -p tcp --dport 8188 -j REDIRECT --to-port 8773</tt> ' elif neuerzugang == "nimbus": port_warnung = '<p> </p>\n' if sprache == "de": port_warnung = port_warnung + 'Die Google App Engine akzeptiert nur wenige Ports. ' port_warnung = port_warnung + 'Wenn Cumulus (Nimbus) keinen unterstützten Port (z.B. 8888) verwendet, ' port_warnung = port_warnung + 'empfiehlt es sich, einen unterstützten Port auf den Port von Cumulus (Nimbus) umzuleiten. ' port_warnung = port_warnung + 'Ein Beispiel:<br> \n' port_warnung = port_warnung + '<tt>iptables -I INPUT -p tcp --dport 8990 -j ACCEPT</tt><br>\n ' port_warnung = port_warnung + '<tt>iptables -I PREROUTING -t nat -i eth0 -p tcp --dport 8990 -j REDIRECT --to-port 8888</tt> ' else: port_warnung = port_warnung + 'The Google App Engine accepts only a few number of ports. ' port_warnung = port_warnung + 'If the Cumulus (Nimbus) you want to access, has a non accepted port (e.g. 8888), you have to route an accepted port to the port of the Cumulus. ' port_warnung = port_warnung + 'For example:<br> \n' port_warnung = port_warnung + '<tt>iptables -I INPUT -p tcp --dport 8990 -j ACCEPT</tt><br>\n ' port_warnung = port_warnung + '<tt>iptables -I PREROUTING -t nat -i eth0 -p tcp --dport 8990 -j REDIRECT --to-port 8888</tt> ' else: port_warnung = '<p> </p>' template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'eingabefelder': eingabefelder, 'input_error_message': input_error_message, 'tabelle_logins': tabelle_logins, 'port_warnung': port_warnung } path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "index.html") self.response.out.write(template.render(path, template_values)) else: self.redirect('/')
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": path = '&path=snapshots&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_google_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path,template_values)) # It is Host Europe Cloud Storage and not am IaaS elif regionname == "HostEuropeCloudStorage": path = '&path=zonen&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_host_europe_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_host_europe_storage.html") self.response.out.write(template.render(path,template_values)) # It is not Google Storage. It is an IaaS else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("11", "13"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "12", "14"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Snapshots liste_snapshots = conn_region.get_all_snapshots(owner="self") except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": snapshotstabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: snapshotstabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": snapshotstabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: snapshotstabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Snapshots in der Liste laenge_liste_snapshots = len(liste_snapshots) if laenge_liste_snapshots == 0: if sprache == "de": snapshotstabelle = 'Sie haben keine Snapshots in dieser Region.' else: snapshotstabelle = 'You have no snapshots inside this region.' else: if mobile == "true": # Mobile version of the table snapshotstabelle = '' snapshotstabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_snapshots): if counter > 0: snapshotstabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="left">' snapshotstabelle += '<a href="/snapshotsentfernen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) snapshotstabelle += "&ami=own" if sprache == "de": snapshotstabelle += '" title="Snapshot löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Snapshot löschen"></a>' else: snapshotstabelle += '" title="erase snapshot"><img src="bilder/delete.png" width="16" height="16" border="0" alt="snapshot volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '<td align="center">' snapshotstabelle += '<a href="/volumeaussnapshoterzeugen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) if sprache == "de": snapshotstabelle += '" title="Volume erzeugen"><img src="bilder/plus.png" width="16" height="16" border="0" alt="Volume erzeugen"></a>' else: snapshotstabelle += '" title="create volume"><img src="bilder/plus.png" width="16" height="16" border="0" alt="create volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="right"><b>ID:</b></td>' snapshotstabelle += '<td align="center">'+liste_snapshots[i].id+'</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="right"><b>Volume:</b></td>' snapshotstabelle += '<td align="center">'+liste_snapshots[i].volume_id+'</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Größe:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Size:</b></td>' snapshotstabelle += '<td align="center">'+str(liste_snapshots[i].volume_size)+' GB</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="right"><b>Status:</b></td>' if liste_snapshots[i].status == u'completed': snapshotstabelle += '<td bgcolor="#c3ddc3" align="center">'+liste_snapshots[i].status+'</td>' elif liste_snapshots[i].status == u'pending': snapshotstabelle += '<td bgcolor="#ffffcc" align="center">'+liste_snapshots[i].status+'</td>' elif liste_snapshots[i].status == u'deleting': snapshotstabelle += '<td bgcolor="#ffcc99" align="center">'+liste_snapshots[i].status+'</td>' else: snapshotstabelle += '<td align="center">'+liste_snapshots[i].status+'</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Besitzer:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Owner:</b></td>' snapshotstabelle += '<td align="center">'+str(liste_snapshots[i].owner_id)+'</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Beschreibung:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Description:</b></td>' snapshotstabelle += '<td align="center">'+str(liste_snapshots[i].description)+'</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Datum:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Start Time:</b></td>' snapshotstabelle += '<td align="center">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. datum_der_erzeugung = parse(liste_snapshots[i].start_time) snapshotstabelle += str(datum_der_erzeugung.strftime("%Y-%m-%d %H:%M:%S")) snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Fortschritt:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Progress:</b></td>' snapshotstabelle += '<td align="center">'+str(liste_snapshots[i].progress)+'</td>' snapshotstabelle += '</tr>' snapshotstabelle += '</table>' else: # Not the mobile version snapshotstabelle = '' snapshotstabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_snapshots): if counter > 0: snapshotstabelle += '<tr><td colspan="4"> </td></tr>' counter += 1 snapshotstabelle += '<tr>' snapshotstabelle += '<td align="left" bgcolor="#D4D4D4">' snapshotstabelle += '<a href="/snapshotsentfernen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) snapshotstabelle += "&ami=own" if sprache == "de": snapshotstabelle += '" title="Snapshot löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Snapshot löschen"></a>' else: snapshotstabelle += '" title="erase snapshot"><img src="bilder/delete.png" width="16" height="16" border="0" alt="snapshot volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '<td colspan="3" bgcolor="#D4D4D4">' snapshotstabelle += '<a href="/volumeaussnapshoterzeugen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) if sprache == "de": snapshotstabelle += '" title="Volume erzeugen"><img src="bilder/plus.png" width="16" height="16" border="0" alt="Volume erzeugen"></a>' else: snapshotstabelle += '" title="create volume"><img src="bilder/plus.png" width="16" height="16" border="0" alt="create volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>' snapshotstabelle += '<td align="left">'+liste_snapshots[i].id+'</td>' snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Status:</b></td>' if liste_snapshots[i].status == u'completed': snapshotstabelle += '<td bgcolor="#c3ddc3" align="left">'+liste_snapshots[i].status+'</td>' elif liste_snapshots[i].status == u'pending': snapshotstabelle += '<td bgcolor="#ffffcc" align="left">'+liste_snapshots[i].status+'</td>' elif liste_snapshots[i].status == u'deleting': snapshotstabelle += '<td bgcolor="#ffcc99" align="left">'+liste_snapshots[i].status+'</td>' else: snapshotstabelle += '<td align="left">'+liste_snapshots[i].status+'</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Größe:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Size:</b></td>' snapshotstabelle += '<td align="left">'+str(liste_snapshots[i].volume_size)+' GB</td>' snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Volume:</b></td>' snapshotstabelle += '<td align="left">'+liste_snapshots[i].volume_id+'</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Fortschritt:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Progress:</b></td>' snapshotstabelle += '<td align="left">'+str(liste_snapshots[i].progress)+'</td>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Besitzer:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Owner:</b></td>' snapshotstabelle += '<td align="left">'+str(liste_snapshots[i].owner_id)+'</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Start Time:</b></td>' snapshotstabelle += '<td colspan="3" align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. datum_der_erzeugung = parse(liste_snapshots[i].start_time) snapshotstabelle += str(datum_der_erzeugung.strftime("%Y-%m-%d %H:%M:%S")) snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Beschreibung:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Description:</b></td>' if liste_snapshots[i].description == "": snapshotstabelle += '<td align="left">---</td>' snapshotstabelle += '<td align="left" colspan="2"> </td>' else: snapshotstabelle += '<td colspan="3" align="left">'+str(liste_snapshots[i].description)+'</td>' snapshotstabelle += '</tr>' snapshotstabelle += '</table>' if regionname == "Amazon": if sprache == "de": ansicht_amazon_button = '' ansicht_amazon_button += '<form action="/snapshots_amazon_all" method="get">\n' ansicht_amazon_button += '<input type="hidden" name="mobile" value="'+str(mobile)+'">\n' ansicht_amazon_button += '<input type="submit" value="Alle erreichbaren Snapshots anzeigen">\n' ansicht_amazon_button += '</form>\n' ansicht_amazon_button += '<p> </p>\n' else: ansicht_amazon_button = '' ansicht_amazon_button += '<form action="/snapshots_amazon_all" method="get">\n' ansicht_amazon_button += '<input type="hidden" name="mobile" value="'+str(mobile)+'">\n' ansicht_amazon_button += '<input type="submit" value="show all available snapshots">\n' ansicht_amazon_button += '</form>\n' ansicht_amazon_button += '<p> </p>\n' else: ansicht_amazon_button = "" path = '&path=snapshots&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'snapshotstabelle': snapshotstabelle, 'zonen_liste': zonen_liste, 'input_error_message': input_error_message, 'ansicht_amazon_button': ansicht_amazon_button, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "snapshots.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "snapshots.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Name des zu löschenden Load Balancers holen loadbalancer_name = self.request.get('name') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("61", "63", "66", "68"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "62", "64", "65", "67", "69"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Instanzen # Man kann nicht direkt versuchen mit get_all_security_groups(gruppen_liste) # die anzulegende Gruppe zu erzeugen. Wenn die Gruppe noch nicht existiert, # gibt es eine Fehlermeldung liste_reservations = conn_region.get_all_instances() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat und die Liste geholt wurde... # Anzahl der Elemente in der Liste laenge_liste_reservations = len(liste_reservations) if laenge_liste_reservations == "0": # Wenn es keine laufenden Instanzen gibt instanzen_in_region = 0 else: # Wenn es laufenden Instanzen gibt instanzen_in_region = 0 for i in liste_reservations: for x in i.instances: # Für jede Instanz wird geschaut... # ...ob die Instanz in der Region des Volumes liegt und läuft if x.state == u'running': instanzen_in_region = instanzen_in_region + 1 # Mit ELB verbinden conn_elb = loginelb(username) try: # Liste mit den LoadBalancern liste_load_balancers = conn_elb.get_all_load_balancers(load_balancer_names=str(loadbalancer_name)) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... tabelle_instanz_anhaengen = '' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<form action="/loadbalancer_instanz_zuordnen?loadbalancer=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + loadbalancer_name tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + "&mobile=" tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + str(mobile) tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" method="post" accept-charset="utf-8">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<table border="0" cellspacing="0" cellpadding="5">\n' # Wenn dem Load Balancer noch keine Instanzen zugewiesen wurden... if len(liste_load_balancers[0].instances) == 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td colspan="2">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'Es wurden noch keine Instanzen zugewiesen' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'No instances asigned yet' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' # Wenn dem Load Balancer schon Instanzen zugewiesen wurden... else: for z in range(len(liste_load_balancers[0].instances)): tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<a href="/loadbalancer_deregister_instance?loadbalancer=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + loadbalancer_name tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '&instanz=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + liste_load_balancers[0].instances[z].id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + "&mobile=" tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + str(mobile) if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" title="Instanz deregistrieren">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Instanz deregistrieren"></a>' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" title="deregister instance">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister instance"></a>' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td colspan="2">\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + liste_load_balancers[0].instances[z].id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' # Wenn mehr als eine Instanz dem Load Balancer zugewiesen ist, dann muss hier ein # leeres Feld hin. Sonst sieht die Tabelle nicht gut aus! if len(liste_load_balancers[0].instances) != 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td> </td>\n' if instanzen_in_region == 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center" colspan="2">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'Sie haben keine Instanzen' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'You have no instances' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' else: if instanzen_in_region > 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center">\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<select name="instanzen" size="1">\n' for i in liste_reservations: for x in i.instances: if x.state == u'running': tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<option>' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + x.id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</option>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</select>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<input type="submit" value="verknüpfen">' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<input type="submit" value="associate">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</table>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</form>' try: # Liste mit den Zonen liste_zonen = conn_region.get_all_zones() except EC2ResponseError: # Wenn es nicht geklappt hat... if sprache == "de": tabelle_zonen_aendern = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: tabelle_zonen_aendern = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": tabelle_zonen_aendern = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: tabelle_zonen_aendern = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_zonen = len(liste_zonen) tabelle_zonen_aendern = '' tabelle_zonen_aendern = tabelle_zonen_aendern + '<form action="/loadbalancer_zone_zuordnen?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str(mobile) tabelle_zonen_aendern = tabelle_zonen_aendern + '" method="post" accept-charset="utf-8">' tabelle_zonen_aendern = tabelle_zonen_aendern + '\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<table border="0" cellspacing="0" cellpadding="5">\n' for z in range(len(liste_load_balancers[0].availability_zones)): tabelle_zonen_aendern = tabelle_zonen_aendern + '<tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td>\n' # Wenn dem Load Balancer nur eine Zone zugewiesen ist... if len(liste_load_balancers[0].availability_zones) == 1: tabelle_zonen_aendern = tabelle_zonen_aendern + '<a href="/loadbalanceraendern?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + '&message=67' tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str(mobile) if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="Zone deregistrieren">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Zone deregistrieren"></a>' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="deregister zone">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister zone"></a>' # Wenn dem Load Balancer mehr als nur eine Zone zugewiesen ist... else: tabelle_zonen_aendern = tabelle_zonen_aendern + '<a href="/loadbalancer_deregister_zone?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + '&zone=' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_load_balancers[0].availability_zones[z] tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str(mobile) if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="Zone deregistrieren">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Zone deregistrieren"></a>' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="deregister zone">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister zone"></a>' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td colspan="2">\n' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_load_balancers[0].availability_zones[z] tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<tr>\n' # Wenn mehr als eine Instanz dem Load Balancer zugewiesen ist, dann muss hier ein # leeres Feld hin. Sonst sieht die Tabelle nicht gut aus! if len(liste_load_balancers[0].availability_zones) != 0: tabelle_zonen_aendern = tabelle_zonen_aendern + '<td> </td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td align="center">\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<select name="zonen" size="1">\n' for i in range(laenge_liste_zonen): tabelle_zonen_aendern = tabelle_zonen_aendern + '<option>' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_zonen[i].name tabelle_zonen_aendern = tabelle_zonen_aendern + '</option>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</select>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td align="center">\n' if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '<input type="submit" value="verknüpfen">' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '<input type="submit" value="associate">' tabelle_zonen_aendern = tabelle_zonen_aendern + '\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</table>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</form>' path = '&path=loadbalanceraendern&name='+loadbalancer_name+'&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'load_balancer_name': loadbalancer_name, 'tabelle_instanz_anhaengen': tabelle_instanz_anhaengen, 'tabelle_zonen_aendern': tabelle_zonen_aendern, 'input_error_message': input_error_message, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "loadbalancer_change.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "loadbalancer_change.html") self.response.out.write(template.render(path,template_values))
def get(self): # self.response.out.write('posted!') # Get username username = users.get_current_user() if not username: self.redirect('/') # Get error messages if any exist message = self.request.get('message') # Datastore query that checks if any credentials for this user exist testen = db.GqlQuery( "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db", username_db=username) # How many entries of this user exist? anzahl = testen.count() # Get the result of your datastore query results = testen.fetch(100) if not results: self.redirect('/') else: # Datastore query that checks if credentials for Amazon S3 exist testen = db.GqlQuery( "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db AND zugangstyp = :zugangstyp_db", username_db=username, zugangstyp_db="Amazon") # Get the result of your datastore query results = testen.fetch(100) if results: # If credentials for Amazon S3 exist aktuellezone = "Amazon" eucalyptusname = "Amazon" else: # No credentials for Amazon S3 exist # Datastore query that checks if credentials for a Walrus (Eucalyptus) Private Cloud exist testen = db.GqlQuery( "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db AND zugangstyp = :zugangstyp_db", username_db=username, zugangstyp_db="Eucalyptus") # Get the result of your datastore query results = testen.fetch(100) if results: # If credentials for an Walrus (Eucalyptus) Private Cloud exist aktuellezone = "Eucalyptus" # Get the credentials for the Walrus (Eucalyptus) Private Cloud anzahl = testen.count() for test in results: eucalyptusname = str(test.eucalyptusname) else: # If no Walrus (Eucalyptus) credentials are given, we jump back to the root window self.redirect('/') # Get the language of the user sprache = aktuelle_sprache(username) # Generate the navigations bar navigations_bar = navigations_bar_funktion(sprache) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' # If the language is not set to german, it is set here to english if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # If no error messages exist, the result here is "None". if input_error_message == None: input_error_message = "" # These error messages are formated in green... if message in ("111", "118", "120"): # This helper function formats in green input_error_message = format_error_message_green( input_error_message) # These error messages are formated in red... elif message in ("112", "119", "121"): input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" # Get Access Kkey for storage service that is used to display the list of keys AWSAccessKeyId = aws_access_key_erhalten(username, eucalyptusname) # Get Secret Access Key for storage service that is used to display the list of keys AWSSecretAccessKeyId = aws_secret_access_key_erhalten( username, eucalyptusname) # Connect with storage service conn_s3, regionname = logins3(username, aktuellezone) # Get values from the config file # The name of the bucket that is used # The character "@" cannot be used. Therefore we use "at". bucketname = str(parser.get('bucket', 'bucketname')) + str(username).replace( '@', 'at').replace('.', '-') try: # Connect with bucket bucket_instance = conn_s3.get_bucket(bucketname) except: # When it didn't work if sprache == "de": bucket_keys_tabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: bucket_keys_tabelle = '<font color="red">An error occured</font>' laenge_liste_keys = 0 else: # When it worked... try: # Get a list of all keys inside the bucket liste_keys = bucket_instance.get_all_keys() except: # When it didn't work if sprache == "de": bucket_keys_tabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: bucket_keys_tabelle = '<font color="red">An error occured</font>' laenge_liste_keys = 0 else: # When it worked... # Number of keys inside the list laenge_liste_keys = len(liste_keys) # When using Walrus (Eucalyptus), we need to erase the stupid "None" entry. # if aktuellezone != "Amazon": # liste_keys2 = [] # for i in range(laenge_liste_keys): # if str(liste_keys[i].name) != 'None': # liste_keys2.append(liste_keys[i]) # laenge_liste_keys2 = len(liste_keys2) # laenge_liste_keys = laenge_liste_keys2 # liste_keys = liste_keys2 # If we have more than one storage services, we need to compare the MD5 checksums if anzahl > 1: # If we have keys inside the bucket, we need to create a list that contains the MD5 checksums if laenge_liste_keys == 0: # Create an empty List Main_Liste = [] # Length of the List Main_Liste_laenge = len(Main_Liste) Second_list = get_second_list(username, aktuellezone, eucalyptusname) Second_list_laenge = len(Second_list) else: # if laenge_liste_keys is not 0 # Create an empty List Main_Liste = [] # Walk through the list of keys for i in range(laenge_liste_keys): # In S3 each MD5 checksum is enclosed by double quotes. In Walrus they are not Main_Liste.append( str(liste_keys[i].etag).replace('"', '')) # Sort the List Main_Liste.sort() # Length of the List Main_Liste_laenge = len(Main_Liste) Second_list = get_second_list(username, aktuellezone, eucalyptusname) Second_list_laenge = len(Second_list) # self.response.out.write(Main_Liste) # self.response.out.write(Main_Liste_laenge) # self.response.out.write(Second_list) # self.response.out.write(Second_list_laenge) if laenge_liste_keys == 0: # No keys have been imported yet! if sprache == "de": bucket_keys_tabelle = 'Sie haben noch keine Dateien importiert.' else: bucket_keys_tabelle = 'No keys have been imported yet.' else: # There are keys in the bucket bucket_keys_tabelle = '' bucket_keys_tabelle = bucket_keys_tabelle + '<table border="3" cellspacing="0" cellpadding="5">' bucket_keys_tabelle = bucket_keys_tabelle + '<tr>' bucket_keys_tabelle = bucket_keys_tabelle + '<th> </th>' bucket_keys_tabelle = bucket_keys_tabelle + '<th> </th>' if sprache == "de": bucket_keys_tabelle = bucket_keys_tabelle + '<th align="left">Keys</th>' bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Dateigröße</th>' bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Letzte Änderung</th>' bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Zugriffsberechtigung</th>' bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Prüfsumme (MD5)</th>' else: bucket_keys_tabelle = bucket_keys_tabelle + '<th align="left">Keys</th>' bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Filesize</th>' bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Last Modified</th>' bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Access Control List</th>' bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">MD5</th>' bucket_keys_tabelle = bucket_keys_tabelle + '</tr>' for i in range(laenge_liste_keys): bucket_keys_tabelle = bucket_keys_tabelle + '<tr>' if liste_keys[i].name == None and aktuellezone != "Amazon": bucket_keys_tabelle = bucket_keys_tabelle + '<td> </td>' else: bucket_keys_tabelle = bucket_keys_tabelle + '<td>' bucket_keys_tabelle = bucket_keys_tabelle + '<a href="/bucketkeyentfernen?md5hash=' bucket_keys_tabelle = bucket_keys_tabelle + str( liste_keys[i].etag).replace('"', '') if sprache == "de": bucket_keys_tabelle = bucket_keys_tabelle + '" title="Key löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Key löschen"></a>' else: bucket_keys_tabelle = bucket_keys_tabelle + '" title="erase key"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase key"></a>' bucket_keys_tabelle = bucket_keys_tabelle + '</td>' if liste_keys[i].name == None and aktuellezone != "Amazon": bucket_keys_tabelle = bucket_keys_tabelle + '<td> </td>' else: bucket_keys_tabelle = bucket_keys_tabelle + '<td>' if sprache == "de": bucket_keys_tabelle = bucket_keys_tabelle + '<img src="bilder/document.png" width="16" height="16" border="0" alt="Datei">' else: bucket_keys_tabelle = bucket_keys_tabelle + '<img src="bilder/document.png" width="16" height="16" border="0" alt="File">' bucket_keys_tabelle = bucket_keys_tabelle + '</td>' bucket_keys_tabelle = bucket_keys_tabelle + '<td>' bucket_keys_tabelle = bucket_keys_tabelle + '<a href="' bucket_keys_tabelle = bucket_keys_tabelle + liste_keys[ i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=False).replace( '&', '&').replace( '&amp;', '&') bucket_keys_tabelle = bucket_keys_tabelle + '">' bucket_keys_tabelle = bucket_keys_tabelle + str( liste_keys[i].name) bucket_keys_tabelle = bucket_keys_tabelle + '</a>' bucket_keys_tabelle = bucket_keys_tabelle + '</td>' bucket_keys_tabelle = bucket_keys_tabelle + '<td align="right">' if liste_keys[i].name == None and aktuellezone != "Amazon": bucket_keys_tabelle = bucket_keys_tabelle + ' ' else: bucket_keys_tabelle = bucket_keys_tabelle + str( liste_keys[i].size) bucket_keys_tabelle = bucket_keys_tabelle + '</td>' bucket_keys_tabelle = bucket_keys_tabelle + '<td>' # Format ISO8601 timestring for better looking. if liste_keys[i].name == None and aktuellezone != "Amazon": bucket_keys_tabelle = bucket_keys_tabelle + ' ' else: datum_der_letzten_aenderung = parse( liste_keys[i].last_modified) bucket_keys_tabelle = bucket_keys_tabelle + str( datum_der_letzten_aenderung.strftime( "%Y-%m-%d %H:%M:%S")) bucket_keys_tabelle = bucket_keys_tabelle + '</td>' bucket_keys_tabelle = bucket_keys_tabelle + '<td align="center">' bucket_keys_tabelle = bucket_keys_tabelle + '<a href="/acl_einsehen?key=' bucket_keys_tabelle = bucket_keys_tabelle + str( liste_keys[i].name) bucket_keys_tabelle = bucket_keys_tabelle + '&md5hash=' bucket_keys_tabelle = bucket_keys_tabelle + str( liste_keys[i].etag).replace('"', '') if sprache == "de": bucket_keys_tabelle = bucket_keys_tabelle + '" title="ACL einsehen/ändern">ACL einsehen/ändern</a>' else: bucket_keys_tabelle = bucket_keys_tabelle + '" title="view/edit ACL">view/edit ACL</a>' bucket_keys_tabelle = bucket_keys_tabelle + '</td>' bucket_keys_tabelle = bucket_keys_tabelle + '<td align="center">' bucket_keys_tabelle = bucket_keys_tabelle + '<tt>' + str( liste_keys[i].etag).replace('"', '') + '</tt>' bucket_keys_tabelle = bucket_keys_tabelle + '</td>' bucket_keys_tabelle = bucket_keys_tabelle + '</tr>' bucket_keys_tabelle = bucket_keys_tabelle + '</table>' #Documentation about howto upload keys into S3 #http://docs.amazonwebservices.com/AmazonS3/latest/index.html?HTTPPOSTForms.html #http://doc.s3.amazonaws.com/proposals/post.html #http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1434 #http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html # Create the policy dokument # expiration date is specified in ISO 8601 format. policy_document = '' policy_document = policy_document + '{' policy_document = policy_document + '"expiration": "2100-01-01T00:00:00Z",' policy_document = policy_document + '"conditions": [' policy_document = policy_document + '{"bucket": "' + bucketname + '"}, ' policy_document = policy_document + '["starts-with", "$acl", ""],' policy_document = policy_document + '{"success_action_redirect": "http://cloudoctopus.appspot.com/S3"},' policy_document = policy_document + '["starts-with", "$key", ""],' policy_document = policy_document + '["starts-with", "$Content-Type", ""]' policy_document = policy_document + ']' policy_document = policy_document + '}' # Encode the policy document using Base64 policy = base64.b64encode(policy_document) # Calculate the signature with the Secret Access Key and the policy signature = base64.b64encode( hmac.new(AWSSecretAccessKeyId, policy, sha).digest()) # This is done all before. # !!! Silly programming !!! # Get data out of the DB alledaten = db.GqlQuery( "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db", username_db=username) # How many entries for this user exist? alledaten_clount = alledaten.count() # Get all data of user alledaten_ergebnisse = alledaten.fetch(100) i = 0 # Walk through every line of the user in the DB for alledatendurchlauf in alledaten_ergebnisse: i = i + 1 if i == 1: regionname1 = str(alledatendurchlauf.regionname) endpointurl1 = str(alledatendurchlauf.endpointurl) accesskey1 = str(alledatendurchlauf.accesskey) zugangstyp1 = str(alledatendurchlauf.zugangstyp) eucalyptusname1 = str(alledatendurchlauf.eucalyptusname) port1 = str(alledatendurchlauf.port) ziel_adresse_upload1 = endpointurl1 + '/' AWSSecretAccessKeyId1 = aws_secret_access_key_erhalten( username, eucalyptusname1) signature1 = base64.b64encode( hmac.new(AWSSecretAccessKeyId1, policy, sha).digest()) else: regionname2 = str(alledatendurchlauf.regionname) endpointurl2 = str(alledatendurchlauf.endpointurl) accesskey2 = str(alledatendurchlauf.accesskey) zugangstyp2 = str(alledatendurchlauf.zugangstyp) eucalyptusname2 = str(alledatendurchlauf.eucalyptusname) port2 = str(alledatendurchlauf.port) ziel_adresse_upload2 = endpointurl2 + '/' AWSSecretAccessKeyId2 = aws_secret_access_key_erhalten( username, eucalyptusname2) signature2 = base64.b64encode( hmac.new(AWSSecretAccessKeyId2, policy, sha).digest()) # self.response.out.write(regionname1 + '<BR>') # self.response.out.write(zugangstyp1 + '<BR>') # self.response.out.write(eucalyptusname1 + '<BR>') # self.response.out.write(accesskey1 + '<BR>') # self.response.out.write(AWSSecretAccessKeyId1 + '<BR>') # self.response.out.write(ziel_adresse_upload1+bucketname + '<BR>') # # self.response.out.write(regionname2 + '<BR>') # self.response.out.write(zugangstyp2 + '<BR>') # self.response.out.write(eucalyptusname2 + '<BR>') # self.response.out.write(accesskey2 + '<BR>') # self.response.out.write(AWSSecretAccessKeyId2 + '<BR>') # self.response.out.write(ziel_adresse_upload2+bucketname + '<BR>') ajax_formular = '' ajax_formular = ajax_formular + '<script type="text/javascript" src="jquery.min.js"></script>\n' ajax_formular = ajax_formular + '<script type="text/javascript" src="upload.js"></script>\n' ajax_formular = ajax_formular + '<script type="text/javascript" src="jquery.blockUI.js"></script>\n' ajax_formular = ajax_formular + '<script type="text/javascript">' if anzahl == 1: # if aktuellezone == "Eucalyptus": # endpointurl = endpointurl_erhalten(username,eucalyptusname) # port = port_erhalten(username,eucalyptusname) # ziel_adresse = str(endpointurl) + ':' + str(port) + '/services/Walrus/' if aktuellezone == "GoogleStorage": ziel_adresse = 'commondatastorage.googleapis.com/' else: # aktuellezone == "Amazon": ziel_adresse = 's3.amazonaws.com/' ajax_formular = ajax_formular + 'var data = [' ajax_formular = ajax_formular + '{sUrl:"http://' + ziel_adresse + bucketname + '",' ajax_formular = ajax_formular + ' success_action_redirect:"http://cloudoctopus.appspot.com/S3",' ajax_formular = ajax_formular + ' AWSAccessKeyId:"' + AWSAccessKeyId + '",' ajax_formular = ajax_formular + ' policy:"' + policy + '",' ajax_formular = ajax_formular + ' signature:"' + signature + '"}' ajax_formular = ajax_formular + '];' else: ajax_formular = ajax_formular + 'var data = [' ajax_formular = ajax_formular + '{sUrl:"http://' + ziel_adresse_upload1 + bucketname + '",' ajax_formular = ajax_formular + ' success_action_redirect:"http://cloudoctopus.appspot.com/S3",' ajax_formular = ajax_formular + ' AWSAccessKeyId:"' + accesskey1 + '",' ajax_formular = ajax_formular + ' policy:"' + policy + '",' ajax_formular = ajax_formular + ' signature:"' + signature1 + '"}' ajax_formular = ajax_formular + ' ,' ajax_formular = ajax_formular + ' {sUrl:"http://' + ziel_adresse_upload2 + bucketname + '",' ajax_formular = ajax_formular + ' success_action_redirect:"http://cloudoctopus.appspot.com/S3",' ajax_formular = ajax_formular + ' AWSAccessKeyId:"' + accesskey2 + '",' ajax_formular = ajax_formular + ' policy:"' + policy + '",' ajax_formular = ajax_formular + ' signature:"' + signature2 + '"}' ajax_formular = ajax_formular + '];' ajax_formular = ajax_formular + '</script>\n' keys_upload_formular = '<p> </p>\n' keys_upload_formular = keys_upload_formular + '<form target="frame1" id="form1" action="" method="post" enctype="multipart/form-data">\n' keys_upload_formular = keys_upload_formular + '<table border="0" cellspacing="0" cellpadding="5">' keys_upload_formular = keys_upload_formular + '<tr>' keys_upload_formular = keys_upload_formular + '<td>' keys_upload_formular = keys_upload_formular + '<input type="hidden" name="key" value="${filename}">\n' keys_upload_formular = keys_upload_formular + '<select name="acl" size="1">\n' keys_upload_formular = keys_upload_formular + '<option selected="selected">public-read</option>\n' keys_upload_formular = keys_upload_formular + '<option>private</option>\n' keys_upload_formular = keys_upload_formular + '<option>public-read-write</option>\n' keys_upload_formular = keys_upload_formular + '<option>authenticated-read</option>\n' keys_upload_formular = keys_upload_formular + '</select>\n' keys_upload_formular = keys_upload_formular + '<select name="Content-Type" size="1">\n' keys_upload_formular = keys_upload_formular + '<option selected="selected">application/octet-stream</option>\n' keys_upload_formular = keys_upload_formular + '<option>application/pdf</option>\n' keys_upload_formular = keys_upload_formular + '<option>application/zip</option>\n' keys_upload_formular = keys_upload_formular + '<option>audio/mp4</option>\n' keys_upload_formular = keys_upload_formular + '<option>audio/mpeg</option>\n' keys_upload_formular = keys_upload_formular + '<option>audio/ogg</option>\n' keys_upload_formular = keys_upload_formular + '<option>audio/vorbis</option>\n' keys_upload_formular = keys_upload_formular + '<option>image/gif</option>\n' keys_upload_formular = keys_upload_formular + '<option>image/jpeg</option>\n' keys_upload_formular = keys_upload_formular + '<option>image/png</option>\n' keys_upload_formular = keys_upload_formular + '<option>image/tiff</option>\n' keys_upload_formular = keys_upload_formular + '<option>text/html</option>\n' keys_upload_formular = keys_upload_formular + '<option>text/plain</option>\n' keys_upload_formular = keys_upload_formular + '<option>video/mp4</option>\n' keys_upload_formular = keys_upload_formular + '<option>video/mpeg</option>\n' keys_upload_formular = keys_upload_formular + '<option>video/ogg</option>\n' keys_upload_formular = keys_upload_formular + '</select>\n' keys_upload_formular = keys_upload_formular + '</td>\n' keys_upload_formular = keys_upload_formular + '</tr>\n' keys_upload_formular = keys_upload_formular + '<tr>\n' keys_upload_formular = keys_upload_formular + '<td>\n' keys_upload_formular = keys_upload_formular + '<input type="hidden" id="success_action_redirect" name="success_action_redirect" value="">\n' keys_upload_formular = keys_upload_formular + '<input type="hidden" id="AWSAccessKeyId" name="AWSAccessKeyId" value="">\n' keys_upload_formular = keys_upload_formular + '<input type="hidden" id="policy" name="policy" value="">\n' keys_upload_formular = keys_upload_formular + '<input type="hidden" id="signature" name="signature" value="">\n' #keys_upload_formular = keys_upload_formular + '<input type="hidden" id="submit" name="submit" value="submit">\n' keys_upload_formular = keys_upload_formular + '</td>\n' keys_upload_formular = keys_upload_formular + '</tr>\n' keys_upload_formular = keys_upload_formular + '<tr>\n' keys_upload_formular = keys_upload_formular + '<td>\n' keys_upload_formular = keys_upload_formular + '<input type="file" name="file" size="80">\n' keys_upload_formular = keys_upload_formular + '</td>\n' keys_upload_formular = keys_upload_formular + '</tr>\n' # Traditional Way to upload a Key into S3 keys_upload_formular = keys_upload_formular + '<tr>' keys_upload_formular = keys_upload_formular + '<td>' if sprache == "de": keys_upload_formular = keys_upload_formular + '<input type="submit" style="display:none" id="button2" name="submit" value="Datei hochladen">\n' else: keys_upload_formular = keys_upload_formular + '<input type="submit" style="display:none" id="button2" name="submit" value="upload file">\n' keys_upload_formular = keys_upload_formular + '</td>' keys_upload_formular = keys_upload_formular + '</tr>' keys_upload_formular = keys_upload_formular + '</table>\n' keys_upload_formular = keys_upload_formular + '</form>' keys_upload_formular = keys_upload_formular + '\n' keys_upload_formular = keys_upload_formular + '<div id="statustext"></div>' keys_upload_formular = keys_upload_formular + '<div style="border:1px solid black;width:200px;height:20px"><div id="statusbar" style="background-color:black;width:1px;height:20px"> </div></div>' if sprache == "de": keys_upload_formular = keys_upload_formular + '<button id="button1">Datei hochladen</button>' else: keys_upload_formular = keys_upload_formular + '<button id="button1">upload file</button>' iframe = '<iframe id="frame1" name="frame1" style="display:none"></iframe>' if laenge_liste_keys != 0: alle_keys_loeschen_button = '<p> </p>\n' alle_keys_loeschen_button = alle_keys_loeschen_button + '<form action="/alle_keys_loeschen" method="get">\n' alle_keys_loeschen_button = alle_keys_loeschen_button + '<input type="hidden" name="s3_ansicht" value="pur"> \n' alle_keys_loeschen_button = alle_keys_loeschen_button + '<input type="hidden" name="bucket_name" value="' + bucketname + '"> \n' if sprache == "de": alle_keys_loeschen_button = alle_keys_loeschen_button + '<input type="submit" value="Alle Keys löschen">\n' else: alle_keys_loeschen_button = alle_keys_loeschen_button + '<input type="submit" value="Erase all keys">\n' alle_keys_loeschen_button = alle_keys_loeschen_button + '</form>\n' else: alle_keys_loeschen_button = '' if anzahl == 1: if sprache == "de": redundanz_warnung = 'Sie nutzen aktuell nur einen Cloud-basierten Speicher-Dienst. ' redundanz_warnung = redundanz_warnung + 'Somit ist keine Redundanz möglich!' redundanz_warnung = redundanz_warnung + '<p> </p>' else: redundanz_warnung = 'You use just a single cloud-based storage service. ' redundanz_warnung = redundanz_warnung + 'Therefore, the data is not stored in a redundant way!' redundanz_warnung = redundanz_warnung + '<p> </p>' elif anzahl >= 1: if sprache == "de": redundanz_warnung = 'Sie nutzen aktuell ' + str( anzahl) + ' Cloud-basierte Speicher-Dienste. ' redundanz_warnung = redundanz_warnung + 'Somit ist Redundanz möglich!' redundanz_warnung = redundanz_warnung + '<p> </p>' else: redundanz_warnung = 'You use ' + str( anzahl) + ' cloud-based storage services. ' redundanz_warnung = redundanz_warnung + 'Therefore, the data can be stored in a redundant way!' redundanz_warnung = redundanz_warnung + '<p> </p>' else: redundanz_warnung = '' if anzahl == 1: # If the number of storage services is 1, the data is always syncron synchron_warnung = '' else: # If there are more than one storage service, check if data is synchron # Check here for synchronicity if Main_Liste == Second_list: # If both Lists are equal if sprache == "de": synchron_warnung = '<font color="green">Ihre Daten sind synchron</font>' synchron_warnung = synchron_warnung + '<p> </p>' else: synchron_warnung = '<font color="green">Your data are synchron</font>' synchron_warnung = synchron_warnung + '<p> </p>' else: # If both Lists are not equal if sprache == "de": synchron_warnung = '<font color="red">Ihre Daten sind nicht synchron!</font>' synchron_warnung = synchron_warnung + '<p> </p>' else: synchron_warnung = '<font color="red">The synchronicity of your data is broken!</font>' synchron_warnung = synchron_warnung + '<p> </p>' template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'bucket_keys_tabelle': bucket_keys_tabelle, 'input_error_message': input_error_message, 'keys_upload_formular': keys_upload_formular, 'alle_keys_loeschen_button': alle_keys_loeschen_button, 'redundanz_warnung': redundanz_warnung, 'ajax_formular': ajax_formular, 'iframe': iframe, 'synchron_warnung': synchron_warnung } path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "s3.html") self.response.out.write(template.render(path, template_values))
def get(self): # self.response.out.write('posted!') mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": path = '&path=securitygroups&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_google_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path,template_values)) # It is Host Europe Cloud Storage and not am IaaS elif regionname == "HostEuropeCloudStorage": path = '&path=zonen&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_host_europe_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_host_europe_storage.html") self.response.out.write(template.render(path,template_values)) # It is not Google Storage. It is an IaaS else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("40", "48"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "41", "42", "43", "44", "45", "46", "47", "49"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Security Groups liste_security_groups = conn_region.get_all_security_groups() except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": gruppentabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: gruppentabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": gruppentabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: gruppentabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_security_groups = len(liste_security_groups) if laenge_liste_security_groups == 0: gruppentabelle = 'Es sind keine Sicherheitsgruppen in der Zone vorhanden.' else: if mobile == "true": gruppentabelle = '' gruppentabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">' counter = 0 for i in range(laenge_liste_security_groups): if counter > 0: gruppentabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 gruppentabelle += '<tr>' gruppentabelle += '<td width="75">' gruppentabelle += '<a href="/gruppenentfernen?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title=" Sicherheitsgruppe löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Security Gruppe löschen"></a>' else: gruppentabelle += '" title="erase security group"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase security group"></a>' gruppentabelle += '</td>' gruppentabelle += '<td align="left">' gruppentabelle += '<a href="/gruppenaendern?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title="Regeln einsehen/ändern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Regeln einsehen/ändern"></a>' else: gruppentabelle += '" title="check/alter rules"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="check/alter rules"></a>' gruppentabelle += '</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' gruppentabelle += '<td align="right"><b>ID:</b></td>' gruppentabelle += '<td>'+liste_security_groups[i].name+'</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right"><b>Beschreibung:</b></td>' else: gruppentabelle += '<td align="right"><b>Description:</b></td>' gruppentabelle += '<td>'+liste_security_groups[i].description+'</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right"><b>Besitzer:</b></td>' else: gruppentabelle += '<td align="right"><b>Owner:</b></td>' gruppentabelle += '<td>'+liste_security_groups[i].owner_id+'</td>' gruppentabelle += '</tr>' gruppentabelle += '</table>' else: gruppentabelle = '' gruppentabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_security_groups): if counter > 0: gruppentabelle += '<tr><td colspan="2"> </td></tr>' counter += 1 gruppentabelle += '<tr>' gruppentabelle += '<td align="left" bgcolor="#D4D4D4">' gruppentabelle += '<a href="/gruppenentfernen?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title=" Sicherheitsgruppe löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Security Gruppe löschen"></a>' else: gruppentabelle += '" title="erase security group"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase security group"></a>' gruppentabelle += '</td>' gruppentabelle += '<td align="left">' gruppentabelle += '<a href="/gruppenaendern?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title="Regeln einsehen/ändern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Regeln einsehen/ändern"></a>' else: gruppentabelle += '" title="check/alter rules"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="check/alter rules"></a>' gruppentabelle += '</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>' gruppentabelle += '<td align="left">'+liste_security_groups[i].name+'</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Beschreibung:</b></td>' else: gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Description:</b></td>' gruppentabelle += '<td align="left">'+liste_security_groups[i].description+'</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Besitzer:</b></td>' else: gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Owner:</b></td>' gruppentabelle += '<td align="left">'+liste_security_groups[i].owner_id+'</td>' gruppentabelle += '</tr>' gruppentabelle += '</table>' path = '&path=securitygroups&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'securitygroupsliste': gruppentabelle, 'input_error_message': input_error_message, 'zonen_liste': zonen_liste, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "securitygroups.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "securitygroups.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Den Namen der zu löschenden Gruppe holen gruppe = self.request.get('gruppe') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: regionname = '---' zone_amazon = "" else: conn_region, regionname = login(username) zone_amazon = amazon_region(username) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' zonen_liste = zonen_liste_funktion(username,sprache,mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("28", "37"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "29", "30", "31", "32", "33", "34", "35", "36", "38", "39"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Security Groups # Man kann nicht direkt versuchen mit get_all_security_groups(gruppen_liste) # die anzulegende Gruppe zu erzeugen. Wenn die Gruppe noch nicht existiert, # gibt es eine Fehlermeldung liste_security_groups = conn_region.get_all_security_groups() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "7" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "7" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat und die Liste geholt wurde... # Anzahl der Elemente in der Liste laenge_liste_security_groups = len(liste_security_groups) for i in range(laenge_liste_security_groups): # Vergleichen if liste_security_groups[i].name == gruppe: # Liste mit den Regeln der Security Group holen liste_regeln = liste_security_groups[i].rules # Anzahl der Elemente in der Liste mit den Regeln laenge_liste_regeln = len(liste_regeln) if laenge_liste_regeln == 0: if sprache == "de": regelntabelle = 'Es sind noch keine Regeln vorhanden' else: regelntabelle = 'Still no rules exist' else: for i in range(laenge_liste_regeln): regelntabelle = '' regelntabelle += '<table border="0" cellspacing="0" cellpadding="5">' regelntabelle += '<tr>' regelntabelle += '<th> </th>' if sprache == "de": regelntabelle += '<th align="center">Protokoll</th>' regelntabelle += '<th align="center">Extern</th>' regelntabelle += '<th align="center">Intern</th>' else: regelntabelle += '<th align="center">Protocol</th>' regelntabelle += '<th align="center">From Port</th>' regelntabelle += '<th align="center">To Port</th>' regelntabelle += '</tr>' for i in range(laenge_liste_regeln): regelntabelle += '<tr>' regelntabelle += '<td>' regelntabelle += '<a href="/grupperegelentfernen?regel=' regelntabelle += str(liste_regeln[i]) regelntabelle += "&mobile=" regelntabelle += str(mobile) regelntabelle += '&gruppe=' regelntabelle += gruppe regelntabelle += '" title="Regel löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Regel löschen"></a>' regelntabelle += '</td>' # upper() sorgt für die Großbuchstaben # upper() converts a string to uppercase regelntabelle += '<td align="center">'+str(liste_regeln[i].ip_protocol).upper()+'</td>' regelntabelle += '<td align="center">'+str(liste_regeln[i].from_port)+'</td>' regelntabelle += '<td align="center">'+str(liste_regeln[i].to_port)+'</td>' regelntabelle += '</tr>' regelntabelle += '</table>' path = '&path=gruppenaendern&gruppe='+gruppe template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'gruppe': gruppe, 'regelntabelle': regelntabelle, 'input_error_message': input_error_message, 'zonen_liste': zonen_liste, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "securitygrouprules.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "securitygrouprules.html") self.response.out.write(template.render(path,template_values))