X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=src%2Fweb%2F__init__.py;h=41c3f6cdf466fd03eeb33b829eaa1d1432d562ce;hb=92c4b559f361801e697abb0a29744043f443fcdc;hp=0162d49a7ba3a1497b3a9484ced4cab41afd0944;hpb=e96e445be8ec96515dea306d12d4a065b5399d45;p=ipfire.org.git diff --git a/src/web/__init__.py b/src/web/__init__.py index 0162d49a..41c3f6cd 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -10,16 +10,24 @@ import tornado.options import tornado.web import ipfire +import ipfire.countries from .handlers import * from . import auth from . import blog +from . import boot +from . import donate from . import download +from . import fireinfo +from . import iuse from . import location +from . import mirrors from . import newsletter +from . import nopaste from . import people from . import ui_modules +from . import wiki class Application(tornado.web.Application): def __init__(self, config, **kwargs): @@ -40,14 +48,18 @@ class Application(tornado.web.Application): "static_path" : self.backend.config.get("global", "static_dir"), "template_path" : self.backend.config.get("global", "templates_dir"), - # UI Modules + # UI Methods "ui_methods" : { + "format_country_name" : self.format_country_name, + "format_language_name" : self.format_language_name, "format_month_name" : self.format_month_name, "format_phone_number" : self.format_phone_number, "format_phone_number_to_e164" : self.format_phone_number_to_e164, "format_phone_number_location" : self.format_phone_number_location, "grouper" : grouper, }, + + # UI Modules "ui_modules" : { # Blog "BlogHistoryNavigation": blog.HistoryNavigationModule, @@ -55,31 +67,44 @@ class Application(tornado.web.Application): "BlogPost" : blog.PostModule, "BlogPosts" : blog.PostsModule, - # Location - "Map" : ui_modules.MapModule, + # Boot + "BootMenuConfig" : boot.MenuConfigModule, + "BootMenuHeader" : boot.MenuHeaderModule, + "BootMenuSeparator" : boot.MenuSeparatorModule, - # Talk + # People "AccountsList" : people.AccountsListModule, + "Agent" : people.AgentModule, "CDR" : people.CDRModule, "Channels" : people.ChannelsModule, + "MOS" : people.MOSModule, + "NewAccounts" : people.NewAccountsModule, + "Password" : people.PasswordModule, "Registrations" : people.RegistrationsModule, + "SIPStatus" : people.SIPStatusModule, + + # Nopaste + "Code" : nopaste.CodeModule, - # Old modules - "LanguageName" : ui_modules.LanguageNameModule, + # Fireinfo + "FireinfoDeviceTable" : fireinfo.DeviceTableModule, + "FireinfoDeviceAndGroupsTable" + : fireinfo.DeviceAndGroupsTableModule, - "MirrorItem" : ui_modules.MirrorItemModule, - "MirrorsTable" : ui_modules.MirrorsTableModule, - "NetBootMenuConfig" : ui_modules.NetBootMenuConfigModule, - "NetBootMenuHeader" : ui_modules.NetBootMenuHeaderModule, - "NetBootMenuSeparator" : ui_modules.NetBootMenuSeparatorModule, + # Wiki + "WikiDiff" : wiki.WikiDiffModule, + "WikiNavbar" : wiki.WikiNavbarModule, + "WikiList" : wiki.WikiListModule, + + # Misc + "ChristmasBanner" : ui_modules.ChristmasBannerModule, + "Markdown" : ui_modules.MarkdownModule, + "Map" : ui_modules.MapModule, "ProgressBar" : ui_modules.ProgressBarModule, - "FireinfoDeviceTable" : ui_modules.FireinfoDeviceTableModule, - "FireinfoDeviceAndGroupsTable" : ui_modules.FireinfoDeviceAndGroupsTableModule, - "FireinfoGeoTable" : ui_modules.FireinfoGeoTableModule, }, # Call this when a page wasn't found - "default_handler_class" : NotFoundHandler, + "default_handler_class" : base.NotFoundHandler, } settings.update(kwargs) @@ -90,7 +115,7 @@ class Application(tornado.web.Application): (r"/logout", auth.LogoutHandler), ] - self.add_handlers(r"(dev|www)\.ipfire\.(at|org)", [ + self.add_handlers(r"(dev|www)\.ipfire\.org", [ # Entry site that lead the user to index (r"/", IndexHandler), @@ -100,7 +125,9 @@ class Application(tornado.web.Application): (r"/download/([0-9a-z\-\.]+)", download.ReleaseHandler), # Donate - (r"/donate", DonateHandler), + (r"/donate", donate.DonateHandler), + (r"/donate/thank-you", donate.ThankYouHandler), + (r"/donate/error", donate.ErrorHandler), (r"/donation", tornado.web.RedirectHandler, { "url" : "/donate" }), # Newsletter @@ -110,10 +137,9 @@ class Application(tornado.web.Application): (r"/news.rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.xml" }), # Redirect news articles to blog - (r"/news/(.*)", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/posts/{1}" }), + (r"/news/(.*)", handlers.NewsHandler), # Static Pages - (r"/chat", StaticHandler, { "template" : "chat.html" }), (r"/features", StaticHandler, { "template" : "features.html" }), (r"/legal", StaticHandler, { "template" : "legal.html" }), (r"/support", StaticHandler, { "template" : "support.html" }), @@ -123,7 +149,10 @@ class Application(tornado.web.Application): (r"/(de|en)/(.*)", LangCompatHandler), # Export arbitrary error pages - (r"/error/([45][0-9]{2})", ErrorHandler), + (r"/error/([45][0-9]{2})", base.ErrorHandler), + + # Block page + (r"/blocked", base.BlockedHandler), ]) # blog.ipfire.org @@ -133,6 +162,7 @@ class Application(tornado.web.Application): (r"/compose", blog.ComposeHandler), (r"/drafts", blog.DraftsHandler), (r"/post/([0-9a-z\-\._]+)", blog.PostHandler), + (r"/post/([0-9a-z\-\._]+)/delete", blog.DeleteHandler), (r"/post/([0-9a-z\-\._]+)/edit", blog.EditHandler), (r"/post/([0-9a-z\-\._]+)/publish", blog.PublishHandler), (r"/search", blog.SearchHandler), @@ -146,78 +176,66 @@ class Application(tornado.web.Application): # downloads.ipfire.org self.add_handlers(r"downloads?(\.dev)?\.ipfire\.org", [ (r"/", tornado.web.RedirectHandler, { "url" : "https://www.ipfire.org/" }), + (r"/release/(.*)", download.ReleaseRedirectHandler), (r"/(.*)", download.FileHandler), ]) # mirrors.ipfire.org self.add_handlers(r"mirrors(\.dev)?\.ipfire\.org", [ - (r"/", MirrorIndexHandler), - (r"/mirror/(.*)", MirrorItemHandler), + (r"/", mirrors.IndexHandler), + (r"/mirrors/(.*)", mirrors.MirrorHandler), ]) # planet.ipfire.org self.add_handlers(r"planet(\.dev)?\.ipfire\.org", [ (r"/", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/" }), - (r"/post/([A-Za-z0-9_-]+)", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/posts/{1}" }), - (r"/user/([a-z0-9_-]+)", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/authors/{1}" }), + (r"/post/([A-Za-z0-9_-]+)", handlers.PlanetPostHandler), + (r"/user/([a-z0-9_-]+)", handlers.PlanetUserHandler), # RSS (r"/rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.xml" }), - (r"/user/([a-z0-9_-]+)/rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/authors/{1}.rss" }), + (r"/user/([a-z0-9_-]+)/rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.xml" }), (r"/news.rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.xml" }), ]) # fireinfo.ipfire.org self.add_handlers(r"fireinfo(\.dev)?\.ipfire\.org", [ - (r"/", FireinfoIndexHandler), - (r"/device/driver/(.*)", FireinfoDeviceDriverDetail), - (r"/device/vendors", FireinfoDeviceVendorsHandler), - (r"/device/(pci|usb)/([0-9a-f]{4})", FireinfoDeviceVendorHandler), - (r"/device/(pci|usb)/([0-9a-f]{4})/([0-9a-f]{4})", FireinfoDeviceModelHandler), + (r"/", fireinfo.IndexHandler), + + # Vendors + (r"/vendors", fireinfo.VendorsHandler), + (r"/vendors/(pci|usb)/([0-9a-f]{4})", fireinfo.VendorHandler), + + # Driver + (r"/drivers/(.*)", fireinfo.DriverDetail), # Show profiles - (r"/profile/random", FireinfoRandomProfileHandler), - (r"/profile/([a-z0-9]{40})", FireinfoProfileDetailHandler), - - # Send profiles. - (r"/send/([a-z0-9]+)", FireinfoProfileSendHandler), - - # Stats handlers - (r"/statistics", FireinfoStatsHandler), - (r"/statistics/processors", FireinfoStatsProcessorsHandler), - (r"/statistics/processors/(arm|x86)", FireinfoStatsProcessorDetailHandler), - (r"/statistics/geo-locations", FireinfoStatsGeoHandler), - (r"/statistics/languages", FireinfoStatsLanguagesHandler), - (r"/statistics/memory", FireinfoStatsMemoryHandler), - (r"/statistics/networking", FireinfoStatsNetworkingHandler), - (r"/statistics/releases", FireinfoStatsReleasesHandler), - (r"/statistics/virtualization", FireinfoStatsVirtualHandler), - - # Compat handlers - (r"/stats", tornado.web.RedirectHandler, { "url" : "/statistics" }), - (r"/stats/cpus", tornado.web.RedirectHandler, { "url" : "/statistics/processors" }), - (r"/stats/geo", tornado.web.RedirectHandler, { "url" : "/statistics/geo-locations" }), - (r"/stats/network", tornado.web.RedirectHandler, { "url" : "/statistics/networking" }), - (r"/stats/oses", tornado.web.RedirectHandler, { "url" : "/statistics/releases" }), - (r"/stats/virtual", tornado.web.RedirectHandler, { "url" : "/statistics/virtualization" }), - (r"/vendor/(pci|usb)/([0-9a-f]{4})", FireinfoDeviceVendorCompatHandler), - (r"/model/(pci|usb)/([0-9a-f]{4})/([0-9a-f]{4})", FireinfoDeviceModelCompatHandler), + (r"/profile/random", fireinfo.RandomProfileHandler), + (r"/profile/([a-z0-9]{40})", fireinfo.ProfileHandler), + + # Stats + (r"/processors", fireinfo.ProcessorsHandler), + (r"/releases", fireinfo.ReleasesHandler), + + # Send profiles + (r"/send/([a-z0-9]+)", fireinfo.ProfileSendHandler), ]) # i-use.ipfire.org self.add_handlers(r"i-use(\.dev)?\.ipfire\.org", [ - (r"/profile/([a-f0-9]{40})/([0-9]+).png", IUseImage), + (r"/", tornado.web.RedirectHandler, { "url" : "https://www.ipfire.org/" }), + (r"/profile/([a-f0-9]{40})/([0-9]+).png", iuse.ImageHandler), ]) # boot.ipfire.org BOOT_STATIC_PATH = os.path.join(self.settings["static_path"], "netboot") self.add_handlers(r"boot(\.dev)?\.ipfire\.org", [ - (r"/", tornado.web.RedirectHandler, { "url" : "https://www.ipfire.org/download" }), + (r"/", tornado.web.RedirectHandler, { "url" : "https://wiki.ipfire.org/installation/pxe" }), # Configurations - (r"/premenu.cfg", PremenuCfgHandler), - (r"/menu.gpxe", MenuGPXEHandler), - (r"/menu.cfg", MenuCfgHandler), + (r"/premenu.cfg", boot.PremenuCfgHandler), + (r"/menu.gpxe", boot.MenuGPXEHandler), + (r"/menu.cfg", boot.MenuCfgHandler), # Static files (r"/(boot\.png|pxelinux\.0|menu\.c32|vesamenu\.c32)", @@ -226,14 +244,16 @@ class Application(tornado.web.Application): # nopaste.ipfire.org self.add_handlers(r"nopaste(\.dev)?\.ipfire\.org", [ - (r"/", NopasteCreateHandler), - (r"/raw/(.*)", NopasteRawHandler), - (r"/view/(.*)", NopasteViewHandler), + (r"/", nopaste.CreateHandler), + (r"/raw/(.*)", nopaste.RawHandler), + (r"/view/(.*)", nopaste.ViewHandler), ] + authentication_handlers) # location.ipfire.org self.add_handlers(r"location(\.dev)?\.ipfire\.org", [ (r"/", location.IndexHandler), + (r"/how\-to\-use", StaticHandler, { "template" : "../location/how-to-use.html" }), + (r"/lookup/(.+)/blacklists", location.BlacklistsHandler), (r"/lookup/(.+)", location.LookupHandler), ]) @@ -250,15 +270,61 @@ class Application(tornado.web.Application): # people.ipfire.org self.add_handlers(r"people(\.dev)?\.ipfire\.org", [ (r"/", people.IndexHandler), + (r"/activate/([a-z_][a-z0-9_-]{0,31})/(\w+)", auth.ActivateHandler), + (r"/conferences", people.ConferencesHandler), + (r"/groups", people.GroupsHandler), + (r"/groups/(\w+)", people.GroupHandler), + (r"/register", auth.RegisterHandler), (r"/search", people.SearchHandler), (r"/users", people.UsersHandler), - (r"/users/(\w+)", people.UserHandler), - (r"/users/(\w+)\.jpg", people.AvatarHandler), - (r"/users/(\w+)/calls(?:/(\d{4}-\d{2}-\d{2}))?", people.CallsHandler), - (r"/users/(\w+)/edit", people.UserEditHandler), - (r"/users/(\w+)/registrations", people.RegistrationsHandler), + (r"/users/([a-z_][a-z0-9_-]{0,31})", people.UserHandler), + (r"/users/([a-z_][a-z0-9_-]{0,31})\.jpg", people.AvatarHandler), + (r"/users/([a-z_][a-z0-9_-]{0,31})/calls/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})", people.CallHandler), + (r"/users/([a-z_][a-z0-9_-]{0,31})/calls(?:/(\d{4}-\d{2}-\d{2}))?", people.CallsHandler), + (r"/users/([a-z_][a-z0-9_-]{0,31})/edit", people.UserEditHandler), + (r"/users/([a-z_][a-z0-9_-]{0,31})/passwd", people.UserPasswdHandler), + (r"/users/([a-z_][a-z0-9_-]{0,31})/sip", people.SIPHandler), + + # Promotional Consent Stuff + (r"/subscribe", people.SubscribeHandler), + (r"/unsubscribe", people.UnsubscribeHandler), + + # Single-Sign-On for Discourse + (r"/sso/discourse", people.SSODiscourse), + + # Password Reset + (r"/password\-reset", auth.PasswordResetInitiationHandler), + (r"/password\-reset/([a-z_][a-z0-9_-]{0,31})/(\w+)", auth.PasswordResetHandler), + + # API + (r"/api/check/uid", auth.APICheckUID), ] + authentication_handlers) + # wiki.ipfire.org + self.add_handlers(r"wiki(\.dev)?\.ipfire\.org", + authentication_handlers + [ + + # Actions + (r"((?:[A-Za-z0-9\-_\/]+)?(?:.*)\.(?:\w+))/_delete", wiki.ActionDeleteHandler), + (r"([A-Za-z0-9\-_\/]+)?/_edit", wiki.ActionEditHandler), + (r"([A-Za-z0-9\-_\/]+)?/_render", wiki.ActionRenderHandler), + (r"([A-Za-z0-9\-_\/]+)?/_(watch|unwatch)", wiki.ActionWatchHandler), + (r"/actions/restore", wiki.ActionRestoreHandler), + (r"/actions/upload", wiki.ActionUploadHandler), + + # Handlers + (r"/recent\-changes", wiki.RecentChangesHandler), + (r"/search", wiki.SearchHandler), + (r"/watchlist", wiki.WatchlistHandler), + + # Media + (r"([A-Za-z0-9\-_\/]+)?/_files", wiki.FilesHandler), + (r"((?!/static)(?:[A-Za-z0-9\-_\/]+)?(?:.*)\.(?:\w+))$", wiki.FileHandler), + + # Render pages + (r"([A-Za-z0-9\-_\/]+)?", wiki.PageHandler), + ]) + # ipfire.org self.add_handlers(r"ipfire\.org", [ (r".*", tornado.web.RedirectHandler, { "url" : "https://www.ipfire.org" }) @@ -266,6 +332,35 @@ class Application(tornado.web.Application): logging.info("Successfully initialied application") + def format_country_name(self, handler, country_code): + return ipfire.countries.get_name(country_code) + + def format_language_name(self, handler, language): + _ = handler.locale.translate + + if language == "de": + return _("German") + elif language == "en": + return _("English") + elif language == "es": + return _("Spanish") + elif language == "fr": + return _("French") + elif language == "it": + return _("Italian") + elif language == "nl": + return _("Dutch") + elif language == "pl": + return _("Polish") + elif language == "pt": + return _("Portuguese") + elif language == "ru": + return _("Russian") + elif language == "tr": + return _("Turkish") + + return language + def format_month_name(self, handler, month): _ = handler.locale.translate @@ -299,7 +394,7 @@ class Application(tornado.web.Application): def format_phone_number(self, handler, number): if not isinstance(number, phonenumbers.PhoneNumber): try: - number = phonenumbers.parse(s, None) + number = phonenumbers.parse(number, None) except phonenumbers.phonenumberutil.NumberParseException: return number