tornado.locale.load_gettext_translations(os.path.join(BASEDIR, "translations"), "webapp")
class Application(tornado.web.Application):
- def __init__(self):
+ def __init__(self, **kwargs):
+ self.__backend = None
+
settings = dict(
cookie_secret = "aXBmaXJlY29va2llc2VjcmV0Cg==",
debug = options.debug,
"format_month_name" : self.format_month_name,
},
ui_modules = {
- "Advertisement" : AdvertisementModule,
- "DonationBox" : DonationBoxModule,
- "DownloadButton" : DownloadButtonModule,
- "Menu" : MenuModule,
- "MirrorItem" : MirrorItemModule,
- "MirrorsTable" : MirrorsTableModule,
- "NewsItem" : NewsItemModule,
- "NewsLine" : NewsLineModule,
- "NewsTable" : NewsTableModule,
- "NewsYearNavigation": NewsYearNavigationModule,
- "PlanetEntry" : PlanetEntryModule,
- "ReleaseItem" : ReleaseItemModule,
- "SidebarBanner" : SidebarBannerModule,
- "SidebarRelease" : SidebarReleaseModule,
- "StasyTable" : StasyTableModule,
- "StasyCPUCoreTable" : StasyCPUCoreTableModule,
- "StasyDeviceTable" : StasyDeviceTableModule,
- "StasyGeoTable" : StasyGeoTableModule,
- "TrackerPeerList": TrackerPeerListModule,
- "Wish" : WishModule,
- "Wishlist" : WishlistModule,
+ "Advertisement" : AdvertisementModule,
+ "DonationBox" : DonationBoxModule,
+ "DonationButton" : DonationButtonModule,
+ "DonationInputBox" : DonationInputBoxModule,
+ "DownloadButton" : DownloadButtonModule,
+ "LanguageName" : LanguageNameModule,
+ "Map" : MapModule,
+ "Menu" : MenuModule,
+ "MirrorItem" : MirrorItemModule,
+ "MirrorsTable" : MirrorsTableModule,
+ "NetBootMenuConfig" : NetBootMenuConfigModule,
+ "NetBootMenuHeader" : NetBootMenuHeaderModule,
+ "NetBootMenuSeparator" : NetBootMenuSeparatorModule,
+ "NewsItem" : NewsItemModule,
+ "NewsLine" : NewsLineModule,
+ "NewsTable" : NewsTableModule,
+ "NewsYearNavigation" : NewsYearNavigationModule,
+ "PlanetAuthorBox" : PlanetAuthorBoxModule,
+ "PlanetEntry" : PlanetEntryModule,
+ "PlanetSearchBox" : PlanetSearchBoxModule,
+ "ProgressBar" : ProgressBarModule,
+ "ReleaseItem" : ReleaseItemModule,
+ "SidebarBanner" : SidebarBannerModule,
+ "SidebarRelease" : SidebarReleaseModule,
+ "FireinfoDeviceTable" : FireinfoDeviceTableModule,
+ "FireinfoDeviceAndGroupsTable" : FireinfoDeviceAndGroupsTableModule,
+ "FireinfoGeoTable" : FireinfoGeoTableModule,
+ "TalkCallLog" : TalkCallLogModule,
+ "TalkLines" : TalkLinesModule,
+ "TalkOngoingCalls" : TalkOngoingCallsModule,
+ "TrackerPeerList" : TrackerPeerListModule,
+ "Wish" : WishModule,
+ "Wishlist" : WishlistModule,
+ "WishlistItems" : WishlistItemsModule,
},
xsrf_cookies = True,
)
+ settings.update(kwargs)
tornado.web.Application.__init__(self, **settings)
(r"/(robots\.txt)", tornado.web.StaticFileHandler, dict(path = static_path)),
]
+ authentication_handlers = [
+ (r"/login", LoginHandler),
+ (r"/logout", LogoutHandler),
+ ]
+
self.add_handlers(r"(dev|www)\.ipfire\.(at|org)", [
# Entry site that lead the user to index
(r"/", IndexHandler),
(r"/news", NewsIndexHandler),
(r"/news/year/([0-9]*)", NewsYearHandler),
(r"/news/(.*)", NewsItemHandler),
- (r"/author/(.*)", NewsAuthorHandler),
# Download sites
(r"/download", DownloadHandler),
# Handle old pages that have moved elsewhere
(r"/screenshots", tornado.web.RedirectHandler, { "url" : "/about" }),
(r"/about", tornado.web.RedirectHandler, { "url" : "/features" }),
- (r"/support", tornado.web.RedirectHandler, { "url" : "/getinvolved" }),
+ (r"/features/.*", tornado.web.RedirectHandler, { "url" : "/features" }),
+ (r"/getinvolved", tornado.web.RedirectHandler, { "url" : "/get-involved" }),
- (r"/donate", tornado.web.RedirectHandler, { "url" : "/donation" }),
+ # Donate
+ (r"/donate", DonateHandler),
+ (r"/donation", tornado.web.RedirectHandler, { "url" : "/donate" }),
# RSS feed
(r"/news.rss", RSSNewsHandler),
])
# downloads.ipfire.org
- self.add_handlers(r"downloads?\.ipfire\.org", [
+ self.add_handlers(r"downloads?(\.dev)?\.ipfire\.org", [
(r"/", DownloadsIndexHandler),
(r"/latest", DownloadsLatestHandler),
- (r"/release/([0-9]+)", DownloadsReleaseHandler),
+ (r"/release/(\d)", DownloadsReleaseHandler),
+ (r"/release/([\w\.\-]*)", DownloadsReleaseHandler),
(r"/older", DownloadsOlderHandler),
(r"/development", DownloadsDevelopmentHandler),
(r"/mirrors", tornado.web.RedirectHandler, { "url" : "http://mirrors.ipfire.org/" }),
])
# mirrors.ipfire.org
- self.add_handlers(r"mirrors\.ipfire\.org", [
+ self.add_handlers(r"mirrors(\.dev)?\.ipfire\.org", [
(r"/", MirrorIndexHandler),
- (r"/mirror/([0-9]+)", MirrorItemHandler),
+ (r"/mirror/(.*)", MirrorItemHandler),
+ (r"/lists/pakfire2", MirrorListPakfire2Handler),
] + static_handlers)
# planet.ipfire.org
- self.add_handlers(r"planet\.ipfire\.org", [
+ self.add_handlers(r"planet(\.dev)?\.ipfire\.org", [
(r"/", PlanetMainHandler),
+ (r"/hottest", PlanetHotEntriesHandler),
(r"/post/([A-Za-z0-9_-]+)", PlanetPostingHandler),
(r"/user/([a-z0-9_-]+)", PlanetUserHandler),
(r"/search", PlanetSearchHandler),
(r"/year/(\d+)", PlanetYearHandler),
- # API
- (r"/api/search/autocomplete", PlanetAPISearchAutocomplete),
-
# RSS
(r"/rss", RSSPlanetAllHandler),
(r"/user/([a-z0-9_-]+)/rss", RSSPlanetUserHandler),
+ (r"/news.rss", tornado.web.RedirectHandler, { "url" : "/rss" }),
] + static_handlers)
- # stasy.ipfire.org
- self.add_handlers(r"fireinfo\.ipfire\.org", [
- (r"/", StasyIndexHandler),
- (r"/profile/([a-z0-9]{40})", StasyProfileDetailHandler),
- (r"/vendor/(pci|usb)/([0-9a-f]{4})", StasyStatsVendorDetail),
- (r"/model/(pci|usb)/([0-9a-f]{4})/([0-9a-f]{4})", StasyStatsModelDetail),
+ # 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),
+
+ # Show profiles
+ (r"/profile/random", FireinfoRandomProfileHandler),
+ (r"/profile/([a-z0-9]{40})", FireinfoProfileDetailHandler),
# Send profiles.
- (r"/send/([a-z0-9]+)", StasyProfileSendHandler),
-
- # Stats handlers
- (r"/stats", StasyStatsHandler),
- (r"/stats/cpus", StasyStatsCPUHandler),
- (r"/stats/cpuflags", StasyStatsCPUFlagsHandler),
- (r"/stats/geo", StasyStatsGeoHandler),
- (r"/stats/memory", StasyStatsMemoryHandler),
- (r"/stats/network", StasyStatsNetworkHandler),
- (r"/stats/oses", StasyStatsOSesHandler),
- (r"/stats/virtual", StasyStatsVirtualHandler),
+ (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),
] + static_handlers)
# i-use.ipfire.org
- self.add_handlers(r"i-use\.ipfire\.org", [
+ self.add_handlers(r"i-use(\.dev)?\.ipfire\.org", [
(r"/profile/([a-f0-9]{40})/([0-9]+).png", IUseImage),
])
# tracker.ipfire.org
- self.add_handlers(r"(torrent|tracker)\.ipfire\.org", [
+ self.add_handlers(r"(torrent|tracker)(\.dev)?\.ipfire\.org", [
(r"/", TrackerIndexHandler),
(r"/announce.*", TrackerAnnounceHandler),
(r"/scrape", TrackerScrapeHandler),
# boot.ipfire.org
BOOT_STATIC_PATH = os.path.join(self.settings["static_path"], "netboot")
- self.add_handlers(r"boot\.ipfire\.org", [
+ self.add_handlers(r"boot(\.dev)?\.ipfire\.org", [
(r"/", tornado.web.RedirectHandler, { "url" : "http://www.ipfire.org/download" }),
# Configurations
+ (r"/premenu.cfg", PremenuCfgHandler),
(r"/menu.gpxe", MenuGPXEHandler),
(r"/menu.cfg", MenuCfgHandler),
- (r"/config/([0-9]+)/boot.gpxe", BootGPXEHandler),
# Static files
- (r"/(boot.png|custom.gpxe|premenu.cfg|vesamenu.c32|menu.c32)",
+ (r"/(boot\.png|pxelinux\.0|menu\.c32|vesamenu\.c32)",
tornado.web.StaticFileHandler, { "path" : BOOT_STATIC_PATH }),
])
# nopaste.ipfire.org
- self.add_handlers(r"nopaste\.ipfire\.org", [
- (r"/", NopasteIndexHandler),
- (r"/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", NopasteEntryHandler),
- ] + static_handlers)
+ self.add_handlers(r"nopaste(\.dev)?\.ipfire\.org", [
+ (r"/", NopasteCreateHandler),
+ (r"/raw/(.*)", NopasteRawHandler),
+ (r"/view/(.*)", NopasteViewHandler),
+ ] + authentication_handlers + static_handlers)
# wishlist.ipfire.org
- self.add_handlers(r"wishlist\.ipfire\.org", [
+ self.add_handlers(r"wishlist(\.dev)?\.ipfire\.org", [
(r"/", WishlistIndexHandler),
(r"/closed", WishlistClosedHandler),
(r"/wish/(.*)/donate", WishDonateHandler),
(r"/terms", WishlistTermsHandler),
] + static_handlers)
+ # geoip.ipfire.org
+ self.add_handlers(r"geoip(\.dev)?\.ipfire\.org", [
+ (r"/", GeoIPHandler),
+ ] + static_handlers)
+
+ # talk.ipfire.org
+ self.add_handlers(r"talk(\.dev)?\.ipfire\.org", [
+ (r"/", TalkIndexHandler),
+ (r"/call/(\d+)", TalkInitiateCallHandler),
+ (r"/conferences", TalkConferencesHandler),
+ (r"/conferences/(\d+)/invite/(\d+)", TalkConferencesInviteHandler),
+ (r"/diagnosis", TalkDiagnosisHandler),
+ (r"/phonebook/(\w+)", TalkPhonebookAccountHandler),
+ (r"/phonebook", TalkPhonebookHandler),
+ (r"/profile", TalkProfileHandler),
+ ] + authentication_handlers + static_handlers)
+
+ # accounts.ipfire.org
+ self.add_handlers(r"accounts(\.dev)?\.ipfire\.org", [
+ (r"/avatar/(\w+)\.jpg", AccountsAvatarHandler),
+ ] + static_handlers)
+
# admin.ipfire.org
- self.add_handlers(r"admin\.ipfire\.org", [
+ self.add_handlers(r"admin(\.dev)?\.ipfire\.org", [
(r"/", AdminIndexHandler),
- (r"/login", AdminLoginHandler),
- (r"/logout", AdminLogoutHandler),
# Accounts
(r"/accounts", AdminAccountsHandler),
#(r"/accounts/delete/([0-9]+)", AdminAccountsDeleteHandler),
# Planet
(r"/planet", AdminPlanetHandler),
(r"/planet/compose", AdminPlanetComposeHandler),
- (r"/planet/edit/([0-9]+)", AdminPlanetEditHandler),
+ (r"/planet/edit/(.*)", AdminPlanetEditHandler),
+ (r"/planet/publish/(.*)", AdminPlanetPublishHandler),
# Mirrors
(r"/mirrors", AdminMirrorsHandler),
(r"/mirrors/create", AdminMirrorsCreateHandler),
(r"/mirrors/details/([0-9]+)", AdminMirrorsDetailsHandler),
(r"/mirrors/update", AdminMirrorsUpdateHandler),
# Fireinfo
- (r"/fireinfo/stats", AdminFireinfoStatsHandler),
+ (r"/fireinfo", AdminFireinfoHandler),
# Downloads
(r"/downloads", AdminDownloadsHandler),
(r"/downloads/mirrors", AdminDownloadsMirrorsHandler),
# API
(r"/api/planet/render", AdminApiPlanetRenderMarkupHandler)
- ] + static_handlers)
+ ] + authentication_handlers + static_handlers)
# ipfire.org
self.add_handlers(r".*", [
def __del__(self):
logging.info("Shutting down application")
+ @property
+ def backend(self):
+ if self.__backend is None:
+ configfile = self.settings.get("configfile", None)
+ if not configfile:
+ raise RuntimeException("Could not find configuration file")
+
+ self.__backend = backend.Backend(configfile=configfile,
+ debug=self.settings.get("debug", False))
+
+ return self.__backend
+
@property
def ioloop(self):
return tornado.ioloop.IOLoop.instance()
http_server = tornado.httpserver.HTTPServer(self, xheaders=True)
+ num_processes = multiprocessing.cpu_count() / 2
+
# If we are not running in debug mode, we can actually run multiple
# frontends to get best performance out of our service.
if not self.settings["debug"]:
http_server.bind(port)
- http_server.start(num_processes=multiprocessing.cpu_count())
+ http_server.start(num_processes=num_processes)
else:
http_server.listen(port)