From 6895178168a60ad8f295a33791cda4c8846d6da3 Mon Sep 17 00:00:00 2001 From: BuildFeed Bot Date: Sat, 6 Oct 2018 19:20:54 +0100 Subject: [PATCH] Begin port to .NET Core --- BuildFeed.Model/BuildDetails.cs | 2 - BuildFeed.Model/BuildFeed.Model.csproj | 125 +- BuildFeed.Model/BuildRepository.cs | 10 +- BuildFeed.Model/MetaItem.cs | 14 +- BuildFeed.Model/MongoConfig.cs | 39 +- BuildFeed.Model/Properties/AssemblyInfo.cs | 39 - BuildFeed.Model/View/SitemapData.cs | 2 +- BuildFeed.Model/app.config | 18 - BuildFeed.sln | 78 +- BuildFeed/App_Code/BuildHelpers.cshtml | 26 - BuildFeed/App_Code/PaginationHelpers.cshtml | 164 - BuildFeed/App_Start/FilterConfig.cs | 12 - BuildFeed/App_Start/RouteConfig.cs | 26 - .../Areas/admin/Controllers/RootController.cs | 25 - .../Areas/admin/Controllers/metaController.cs | 118 - .../admin/Controllers/usersController.cs | 83 - .../admin/Models/ViewModel/MetaListing.cs | 12 - BuildFeed/Areas/admin/Views/Root/index.cshtml | 20 - BuildFeed/Areas/admin/Views/_ViewStart.cshtml | 3 - .../Areas/admin/Views/meta/create.cshtml | 107 - BuildFeed/Areas/admin/Views/meta/index.cshtml | 82 - .../Areas/admin/Views/users/admins.cshtml | 47 - .../Areas/admin/Views/users/index.cshtml | 109 - BuildFeed/Areas/admin/Views/web.config | 36 - .../Areas/admin/adminAreaRegistration.cs | 13 - BuildFeed/BuildFeed.csproj | 535 +- BuildFeed/BuildFeed.csproj.DotSettings | 3 - BuildFeed/Code/Base32Encoding.cs | 137 - BuildFeed/Code/CustomContentTypeAttribute.cs | 15 - BuildFeed/Code/DateTimeModelBinder.cs | 32 - BuildFeed/Code/DisplayHelpers.cs | 26 +- BuildFeed/Code/EmailManager/EmailManager.cs | 7 - .../Code/EmailManager/RegistrationEmail.cs | 24 - BuildFeed/Code/MvcIntrinsics.cs | 12 - BuildFeed/Code/OneSignalHelper.cs | 4 +- BuildFeed/Code/Options/Locale.cs | 89 - BuildFeed/Code/Options/Theme.cs | 50 - BuildFeed/Code/OutputCachePushAttribute.cs | 25 - BuildFeed/Controllers/AccountController.cs | 161 - BuildFeed/Controllers/BaseController.cs | 31 - BuildFeed/Controllers/apiController.cs | 264 - BuildFeed/Controllers/frontController.cs | 61 +- BuildFeed/Controllers/rssController.cs | 169 - BuildFeed/Controllers/supportController.cs | 224 - BuildFeed/Global.asax | 1 - BuildFeed/Global.asax.cs | 68 - BuildFeed/Models/ErrorViewModel.cs | 11 + BuildFeed/Program.cs | 17 + BuildFeed/Properties/AssemblyInfo.cs | 38 - .../PublishProfiles/Local Folder.pubxml | 24 - BuildFeed/Properties/launchSettings.json | 27 + BuildFeed/Scripts/_references.js | Bin 4664 -> 0 bytes BuildFeed/Scripts/trumbowyg/langs/da.min.js | 9 - BuildFeed/Scripts/trumbowyg/langs/fa.min.js | 10 - BuildFeed/Scripts/trumbowyg/langs/fr.min.js | 10 - .../Scripts/trumbowyg/langs/zh_tw.min.js | 11 - .../plugins/base64/trumbowyg.base64.min.js | 1 - .../cleanpaste/trumbowyg.cleanpaste.min.js | 1 - .../plugins/colors/trumbowyg.colors.min.js | 1 - .../plugins/emoji/trumbowyg.emoji.min.js | 1 - .../insertaudio/trumbowyg.insertaudio.min.js | 1 - .../plugins/noembed/trumbowyg.noembed.min.js | 1 - .../plugins/table/trumbowyg.table.min.js | 1 - .../template/trumbowyg.template.min.js | 1 - .../plugins/upload/trumbowyg.upload.min.js | 1 - BuildFeed/Scripts/trumbowyg/trumbowyg.min.js | 2 - BuildFeed/Scripts/trumbowyg/ui/icons.svg | 1 - .../Scripts/trumbowyg/ui/trumbowyg.min.css | 2 - BuildFeed/Startup.cs | 66 + BuildFeed/Views/Web.config | 32 - BuildFeed/Views/_ViewImports.cshtml | 7 + BuildFeed/Views/_ViewStart.cshtml | 4 +- BuildFeed/Views/account/login.cshtml | 69 - BuildFeed/Views/account/password.cshtml | 60 - BuildFeed/Views/account/register.cshtml | 68 - BuildFeed/Views/account/registerthanks.cshtml | 6 - .../Views/account/validate-failure.cshtml | 6 - .../Views/account/validate-success.cshtml | 6 - BuildFeed/Views/front/AddBulk.cshtml | 5 +- BuildFeed/Views/front/Pages.cshtml | 7 +- BuildFeed/Views/front/ViewFamily.cshtml | 11 +- BuildFeed/Views/front/editBuild.cshtml | 8 +- BuildFeed/Views/front/index.cshtml | 103 +- BuildFeed/Views/front/viewBuild.cshtml | 23 +- BuildFeed/Views/front/viewGroup.cshtml | 9 +- BuildFeed/Views/front/viewLab.cshtml | 11 +- BuildFeed/Views/front/viewSource.cshtml | 11 +- BuildFeed/Views/front/viewVersion.cshtml | 11 +- BuildFeed/Views/front/viewYear.cshtml | 11 +- .../DisplayTemplates/Enumeration.cshtml | 4 - BuildFeed/Views/shared/_default.cshtml | 511 +- BuildFeed/Views/shared/error.cshtml | 119 - BuildFeed/Views/support/credits.cshtml | 299 - BuildFeed/Views/support/rss.cshtml | 52 - BuildFeed/Views/support/sitemap.cshtml | 130 - BuildFeed/Web.Debug.config | 8 - BuildFeed/Web.Release.config | 28 - BuildFeed/Web.config | 195 - BuildFeed/appsettings.Development.json | 9 + BuildFeed/appsettings.json | 17 + BuildFeed/gulpfile.js | 8 +- BuildFeed/package-lock.json | 10430 ++++++++-------- BuildFeed/res/Web.config | 9 - BuildFeed/res/{css => scss}/dark.scss | 0 BuildFeed/res/{css => scss}/default.scss | 0 .../res/{css => scss}/inc/_christmas.scss | 0 BuildFeed/res/{css => scss}/inc/_nord.scss | 0 .../res/{css => scss}/inc/_variables.scss | 0 BuildFeed/res/{css => scss}/light.scss | 0 BuildFeed/res/{css => scss}/rtl.scss | 0 BuildFeed/res/{css => scss}/winter.scss | 0 BuildFeed/res/ts/bfs.js.map | 1 - BuildFeed/res/ts/christmas.js.map | 1 - BuildFeed/{ => wwwroot}/BingSiteAuth.xml | 0 .../OneSignalSDKUpdaterWorker.js | 0 BuildFeed/{ => wwwroot}/OneSignalSDKWorker.js | 0 BuildFeed/{ => wwwroot}/browserconfig.xml | 0 BuildFeed/{ => wwwroot}/favicon.ico | Bin .../{ => wwwroot}/googleacffc6da14c53e15.html | 0 BuildFeed/{ => wwwroot}/manifest.json | 0 BuildFeed/{ => wwwroot}/res/css/dark.css | 0 BuildFeed/{ => wwwroot}/res/css/dark.css.map | 2 +- BuildFeed/{ => wwwroot}/res/css/default.css | 0 .../{ => wwwroot}/res/css/default.css.map | 0 BuildFeed/{ => wwwroot}/res/css/light.css | 0 BuildFeed/{ => wwwroot}/res/css/light.css.map | 2 +- BuildFeed/{ => wwwroot}/res/css/rtl.css | 0 BuildFeed/{ => wwwroot}/res/css/rtl.css.map | 0 BuildFeed/{ => wwwroot}/res/css/winter.css | 0 .../{ => wwwroot}/res/css/winter.css.map | 2 +- BuildFeed/{ => wwwroot}/res/ico/large.png | Bin BuildFeed/{ => wwwroot}/res/ico/notify.png | Bin BuildFeed/{ => wwwroot}/res/ico/square.png | Bin BuildFeed/{ => wwwroot}/res/ico/tiny.png | Bin BuildFeed/{ => wwwroot}/res/ico/wide.png | Bin BuildFeed/{res/ts => wwwroot/res/js}/bfs.js | 0 BuildFeed/wwwroot/res/js/bfs.js.map | 1 + .../{res/ts => wwwroot/res/js}/christmas.js | 0 BuildFeed/wwwroot/res/js/christmas.js.map | 1 + .../res/js}/trumbowyg/langs/ar.min.js | 0 .../res/js}/trumbowyg/langs/bg.min.js | 0 .../res/js}/trumbowyg/langs/by.min.js | 0 .../res/js}/trumbowyg/langs/ca.min.js | 0 .../res/js}/trumbowyg/langs/cs.min.js | 0 .../wwwroot/res/js/trumbowyg/langs/da.min.js | 9 + .../res/js}/trumbowyg/langs/de.min.js | 2 +- .../res/js}/trumbowyg/langs/el.min.js | 0 .../res/js}/trumbowyg/langs/es.min.js | 0 .../res/js}/trumbowyg/langs/es_ar.min.js | 0 .../wwwroot/res/js/trumbowyg/langs/fa.min.js | 10 + .../res/js}/trumbowyg/langs/fi.min.js | 0 .../wwwroot/res/js/trumbowyg/langs/fr.min.js | 12 + .../res/js}/trumbowyg/langs/he.min.js | 0 .../res/js}/trumbowyg/langs/hr.min.js | 0 .../res/js}/trumbowyg/langs/hu.min.js | 0 .../res/js}/trumbowyg/langs/id.min.js | 0 .../res/js}/trumbowyg/langs/it.min.js | 0 .../res/js}/trumbowyg/langs/ja.min.js | 0 .../res/js}/trumbowyg/langs/ko.min.js | 0 .../wwwroot/res/js/trumbowyg/langs/lt.min.js | 8 + .../res/js}/trumbowyg/langs/mn.min.js | 0 .../res/js}/trumbowyg/langs/my.min.js | 0 .../res/js}/trumbowyg/langs/nl.min.js | 0 .../res/js}/trumbowyg/langs/no_nb.min.js | 0 .../res/js}/trumbowyg/langs/ph.min.js | 0 .../res/js}/trumbowyg/langs/pl.min.js | 0 .../res/js}/trumbowyg/langs/pt.min.js | 0 .../res/js}/trumbowyg/langs/pt_br.min.js | 0 .../res/js}/trumbowyg/langs/ro.min.js | 0 .../res/js}/trumbowyg/langs/rs.min.js | 0 .../res/js}/trumbowyg/langs/rs_latin.min.js | 0 .../res/js}/trumbowyg/langs/ru.min.js | 0 .../res/js}/trumbowyg/langs/sk.min.js | 0 .../wwwroot/res/js/trumbowyg/langs/sq.min.js | 8 + .../res/js}/trumbowyg/langs/sv.min.js | 0 .../wwwroot/res/js/trumbowyg/langs/th.min.js | 9 + .../res/js}/trumbowyg/langs/tr.min.js | 0 .../res/js}/trumbowyg/langs/ua.min.js | 0 .../res/js}/trumbowyg/langs/vi.min.js | 0 .../res/js}/trumbowyg/langs/zh_cn.min.js | 0 .../res/js/trumbowyg/langs/zh_tw.min.js | 11 + .../trumbowyg.allowtagsfrompaste.js | 143 + .../trumbowyg.allowtagsfrompaste.min.js | 1 + .../plugins/base64/trumbowyg.base64.js | 141 + .../plugins/base64/trumbowyg.base64.min.js | 1 + .../cleanpaste/trumbowyg.cleanpaste.js | 112 + .../cleanpaste/trumbowyg.cleanpaste.min.js | 1 + .../plugins/colors/trumbowyg.colors.js | 198 + .../plugins/colors/trumbowyg.colors.min.js | 1 + .../colors/ui/sass/trumbowyg.colors.scss | 49 + .../plugins/colors/ui/trumbowyg.colors.css | 43 + .../colors/ui/trumbowyg.colors.min.css | 2 +- .../plugins/emoji/trumbowyg.emoji.js | 1279 ++ .../plugins/emoji/trumbowyg.emoji.min.js | 1 + .../emoji/ui/sass/trumbowyg.emoji.scss | 56 + .../plugins/emoji/ui/trumbowyg.emoji.css | 47 + .../plugins/emoji/ui/trumbowyg.emoji.min.css | 2 +- .../fontfamily/trumbowyg.fontfamily.js | 82 + .../fontfamily/trumbowyg.fontfamily.min.js | 1 + .../plugins/fontsize/trumbowyg.fontsize.js | 160 + .../fontsize/trumbowyg.fontsize.min.js | 1 + .../plugins/highlight/trumbowyg.highlight.js | 82 + .../highlight/trumbowyg.highlight.min.js | 1 + .../ui/sass/trumbowyg.highlight.scss | 25 + .../highlight/ui/trumbowyg.highlight.css | 20 + .../highlight/ui/trumbowyg.highlight.min.css | 2 + .../plugins/history/trumbowyg.history.js | 202 + .../plugins/history/trumbowyg.history.min.js | 1 + .../insertaudio/trumbowyg.insertaudio.js | 92 + .../insertaudio/trumbowyg.insertaudio.min.js | 1 + .../lineheight/trumbowyg.lineheight.js | 122 + .../lineheight/trumbowyg.lineheight.min.js | 1 + .../plugins/mathml/trumbowyg.mathml.js | 98 + .../plugins/mathml/trumbowyg.mathml.min.js | 1 + .../mathml/ui/sass/trumbowyg.mathml.scss | 36 + .../plugins/mathml/ui/trumbowyg.mathml.css | 29 + .../mathml/ui/trumbowyg.mathml.min.css | 2 + .../plugins/mention/trumbowyg.mention.js | 111 + .../plugins/mention/trumbowyg.mention.min.js | 1 + .../mention/ui/sass/trumbowyg.mention.scss | 39 + .../plugins/mention/ui/trumbowyg.mention.css | 32 + .../mention/ui/trumbowyg.mention.min.css | 2 + .../plugins/noembed/trumbowyg.noembed.js | 111 + .../plugins/noembed/trumbowyg.noembed.min.js | 1 + .../pasteembed/trumbowyg.pasteembed.js | 96 + .../pasteembed/trumbowyg.pasteembed.min.js | 1 + .../pasteimage/trumbowyg.pasteimage.js | 41 + .../pasteimage/trumbowyg.pasteimage.min.js | 2 +- .../preformatted/trumbowyg.preformatted.js | 136 + .../trumbowyg.preformatted.min.js | 2 +- .../plugins/resizimg/trumbowyg.resizimg.js | 69 + .../resizimg/trumbowyg.resizimg.min.js | 1 + .../trumbowyg/plugins/ruby/trumbowyg.ruby.js | 82 + .../plugins/ruby/trumbowyg.ruby.min.js | 1 + .../plugins/table/trumbowyg.table.js | 304 + .../plugins/table/trumbowyg.table.min.js | 1 + .../table/ui/sass/trumbowyg.table.scss | 42 + .../plugins/table/ui/trumbowyg.table.css | 33 + .../plugins/table/ui/trumbowyg.table.min.css | 2 + .../plugins/template/trumbowyg.template.js | 70 + .../template/trumbowyg.template.min.js | 1 + .../plugins/upload/trumbowyg.upload.js | 266 + .../plugins/upload/trumbowyg.upload.min.js | 1 + .../wwwroot/res/js/trumbowyg/trumbowyg.js | 1825 +++ .../wwwroot/res/js/trumbowyg/trumbowyg.min.js | 2 + .../wwwroot/res/js/trumbowyg/ui/icons.svg | 1 + .../res/js/trumbowyg/ui/sass/trumbowyg.scss | 809 ++ .../wwwroot/res/js/trumbowyg/ui/trumbowyg.css | 587 + .../res/js/trumbowyg/ui/trumbowyg.min.css | 2 + BuildFeed/{ => wwwroot}/robots.txt | 0 .../yandex_702baad42b020be7.html | 0 251 files changed, 13444 insertions(+), 10017 deletions(-) delete mode 100644 BuildFeed.Model/Properties/AssemblyInfo.cs delete mode 100644 BuildFeed.Model/app.config delete mode 100644 BuildFeed/App_Code/BuildHelpers.cshtml delete mode 100644 BuildFeed/App_Code/PaginationHelpers.cshtml delete mode 100644 BuildFeed/App_Start/FilterConfig.cs delete mode 100644 BuildFeed/App_Start/RouteConfig.cs delete mode 100644 BuildFeed/Areas/admin/Controllers/RootController.cs delete mode 100644 BuildFeed/Areas/admin/Controllers/metaController.cs delete mode 100644 BuildFeed/Areas/admin/Controllers/usersController.cs delete mode 100644 BuildFeed/Areas/admin/Models/ViewModel/MetaListing.cs delete mode 100644 BuildFeed/Areas/admin/Views/Root/index.cshtml delete mode 100644 BuildFeed/Areas/admin/Views/_ViewStart.cshtml delete mode 100644 BuildFeed/Areas/admin/Views/meta/create.cshtml delete mode 100644 BuildFeed/Areas/admin/Views/meta/index.cshtml delete mode 100644 BuildFeed/Areas/admin/Views/users/admins.cshtml delete mode 100644 BuildFeed/Areas/admin/Views/users/index.cshtml delete mode 100644 BuildFeed/Areas/admin/Views/web.config delete mode 100644 BuildFeed/Areas/admin/adminAreaRegistration.cs delete mode 100644 BuildFeed/BuildFeed.csproj.DotSettings delete mode 100644 BuildFeed/Code/Base32Encoding.cs delete mode 100644 BuildFeed/Code/CustomContentTypeAttribute.cs delete mode 100644 BuildFeed/Code/DateTimeModelBinder.cs delete mode 100644 BuildFeed/Code/EmailManager/EmailManager.cs delete mode 100644 BuildFeed/Code/EmailManager/RegistrationEmail.cs delete mode 100644 BuildFeed/Code/MvcIntrinsics.cs delete mode 100644 BuildFeed/Code/Options/Locale.cs delete mode 100644 BuildFeed/Code/Options/Theme.cs delete mode 100644 BuildFeed/Code/OutputCachePushAttribute.cs delete mode 100644 BuildFeed/Controllers/AccountController.cs delete mode 100644 BuildFeed/Controllers/BaseController.cs delete mode 100644 BuildFeed/Controllers/apiController.cs delete mode 100644 BuildFeed/Controllers/rssController.cs delete mode 100644 BuildFeed/Controllers/supportController.cs delete mode 100644 BuildFeed/Global.asax delete mode 100644 BuildFeed/Global.asax.cs create mode 100644 BuildFeed/Models/ErrorViewModel.cs create mode 100644 BuildFeed/Program.cs delete mode 100644 BuildFeed/Properties/AssemblyInfo.cs delete mode 100644 BuildFeed/Properties/PublishProfiles/Local Folder.pubxml create mode 100644 BuildFeed/Properties/launchSettings.json delete mode 100644 BuildFeed/Scripts/_references.js delete mode 100644 BuildFeed/Scripts/trumbowyg/langs/da.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/langs/fa.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/langs/fr.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/langs/zh_tw.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/plugins/base64/trumbowyg.base64.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/plugins/colors/trumbowyg.colors.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/plugins/emoji/trumbowyg.emoji.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/plugins/noembed/trumbowyg.noembed.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/plugins/table/trumbowyg.table.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/plugins/template/trumbowyg.template.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/plugins/upload/trumbowyg.upload.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/trumbowyg.min.js delete mode 100644 BuildFeed/Scripts/trumbowyg/ui/icons.svg delete mode 100644 BuildFeed/Scripts/trumbowyg/ui/trumbowyg.min.css create mode 100644 BuildFeed/Startup.cs delete mode 100644 BuildFeed/Views/Web.config create mode 100644 BuildFeed/Views/_ViewImports.cshtml delete mode 100644 BuildFeed/Views/account/login.cshtml delete mode 100644 BuildFeed/Views/account/password.cshtml delete mode 100644 BuildFeed/Views/account/register.cshtml delete mode 100644 BuildFeed/Views/account/registerthanks.cshtml delete mode 100644 BuildFeed/Views/account/validate-failure.cshtml delete mode 100644 BuildFeed/Views/account/validate-success.cshtml delete mode 100644 BuildFeed/Views/shared/DisplayTemplates/Enumeration.cshtml delete mode 100644 BuildFeed/Views/shared/error.cshtml delete mode 100644 BuildFeed/Views/support/credits.cshtml delete mode 100644 BuildFeed/Views/support/rss.cshtml delete mode 100644 BuildFeed/Views/support/sitemap.cshtml delete mode 100644 BuildFeed/Web.Debug.config delete mode 100644 BuildFeed/Web.Release.config delete mode 100644 BuildFeed/Web.config create mode 100644 BuildFeed/appsettings.Development.json create mode 100644 BuildFeed/appsettings.json delete mode 100644 BuildFeed/res/Web.config rename BuildFeed/res/{css => scss}/dark.scss (100%) rename BuildFeed/res/{css => scss}/default.scss (100%) rename BuildFeed/res/{css => scss}/inc/_christmas.scss (100%) rename BuildFeed/res/{css => scss}/inc/_nord.scss (100%) rename BuildFeed/res/{css => scss}/inc/_variables.scss (100%) rename BuildFeed/res/{css => scss}/light.scss (100%) rename BuildFeed/res/{css => scss}/rtl.scss (100%) rename BuildFeed/res/{css => scss}/winter.scss (100%) delete mode 100644 BuildFeed/res/ts/bfs.js.map delete mode 100644 BuildFeed/res/ts/christmas.js.map rename BuildFeed/{ => wwwroot}/BingSiteAuth.xml (100%) rename BuildFeed/{ => wwwroot}/OneSignalSDKUpdaterWorker.js (100%) rename BuildFeed/{ => wwwroot}/OneSignalSDKWorker.js (100%) rename BuildFeed/{ => wwwroot}/browserconfig.xml (100%) rename BuildFeed/{ => wwwroot}/favicon.ico (100%) rename BuildFeed/{ => wwwroot}/googleacffc6da14c53e15.html (100%) rename BuildFeed/{ => wwwroot}/manifest.json (100%) rename BuildFeed/{ => wwwroot}/res/css/dark.css (100%) rename BuildFeed/{ => wwwroot}/res/css/dark.css.map (59%) rename BuildFeed/{ => wwwroot}/res/css/default.css (100%) rename BuildFeed/{ => wwwroot}/res/css/default.css.map (100%) rename BuildFeed/{ => wwwroot}/res/css/light.css (100%) rename BuildFeed/{ => wwwroot}/res/css/light.css.map (59%) rename BuildFeed/{ => wwwroot}/res/css/rtl.css (100%) rename BuildFeed/{ => wwwroot}/res/css/rtl.css.map (100%) rename BuildFeed/{ => wwwroot}/res/css/winter.css (100%) rename BuildFeed/{ => wwwroot}/res/css/winter.css.map (52%) rename BuildFeed/{ => wwwroot}/res/ico/large.png (100%) rename BuildFeed/{ => wwwroot}/res/ico/notify.png (100%) rename BuildFeed/{ => wwwroot}/res/ico/square.png (100%) rename BuildFeed/{ => wwwroot}/res/ico/tiny.png (100%) rename BuildFeed/{ => wwwroot}/res/ico/wide.png (100%) rename BuildFeed/{res/ts => wwwroot/res/js}/bfs.js (100%) create mode 100644 BuildFeed/wwwroot/res/js/bfs.js.map rename BuildFeed/{res/ts => wwwroot/res/js}/christmas.js (100%) create mode 100644 BuildFeed/wwwroot/res/js/christmas.js.map rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/ar.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/bg.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/by.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/ca.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/cs.min.js (100%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/langs/da.min.js rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/de.min.js (86%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/el.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/es.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/es_ar.min.js (100%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/langs/fa.min.js rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/fi.min.js (100%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/langs/fr.min.js rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/he.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/hr.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/hu.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/id.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/it.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/ja.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/ko.min.js (100%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/langs/lt.min.js rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/mn.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/my.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/nl.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/no_nb.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/ph.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/pl.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/pt.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/pt_br.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/ro.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/rs.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/rs_latin.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/ru.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/sk.min.js (100%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/langs/sq.min.js rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/sv.min.js (100%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/langs/th.min.js rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/tr.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/ua.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/vi.min.js (100%) rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/langs/zh_cn.min.js (100%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/langs/zh_tw.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/base64/trumbowyg.base64.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/base64/trumbowyg.base64.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/colors/trumbowyg.colors.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/colors/trumbowyg.colors.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/colors/ui/sass/trumbowyg.colors.scss create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/colors/ui/trumbowyg.colors.css rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css (83%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/emoji/trumbowyg.emoji.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/emoji/trumbowyg.emoji.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/emoji/ui/sass/trumbowyg.emoji.scss create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.css rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.min.css (80%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/fontsize/trumbowyg.fontsize.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/fontsize/trumbowyg.fontsize.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/highlight/trumbowyg.highlight.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/highlight/trumbowyg.highlight.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/highlight/ui/sass/trumbowyg.highlight.scss create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.css create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.min.css create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/history/trumbowyg.history.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/history/trumbowyg.history.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/lineheight/trumbowyg.lineheight.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/lineheight/trumbowyg.lineheight.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/mathml/trumbowyg.mathml.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/mathml/trumbowyg.mathml.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/mathml/ui/sass/trumbowyg.mathml.scss create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.css create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.min.css create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/mention/trumbowyg.mention.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/mention/trumbowyg.mention.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/mention/ui/sass/trumbowyg.mention.scss create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/mention/ui/trumbowyg.mention.css create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/mention/ui/trumbowyg.mention.min.css create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/noembed/trumbowyg.noembed.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/noembed/trumbowyg.noembed.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.js rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.min.js (83%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js rename BuildFeed/{Scripts => wwwroot/res/js}/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js (74%) create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/resizimg/trumbowyg.resizimg.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/resizimg/trumbowyg.resizimg.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/ruby/trumbowyg.ruby.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/ruby/trumbowyg.ruby.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/table/trumbowyg.table.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/table/trumbowyg.table.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/table/ui/trumbowyg.table.css create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/table/ui/trumbowyg.table.min.css create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/template/trumbowyg.template.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/template/trumbowyg.template.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/upload/trumbowyg.upload.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/plugins/upload/trumbowyg.upload.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/trumbowyg.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/trumbowyg.min.js create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/ui/icons.svg create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/ui/sass/trumbowyg.scss create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/ui/trumbowyg.css create mode 100644 BuildFeed/wwwroot/res/js/trumbowyg/ui/trumbowyg.min.css rename BuildFeed/{ => wwwroot}/robots.txt (100%) rename BuildFeed/{ => wwwroot}/yandex_702baad42b020be7.html (100%) diff --git a/BuildFeed.Model/BuildDetails.cs b/BuildFeed.Model/BuildDetails.cs index 0fdf537..d79aa00 100644 --- a/BuildFeed.Model/BuildDetails.cs +++ b/BuildFeed.Model/BuildDetails.cs @@ -1,6 +1,5 @@ using System; using System.ComponentModel.DataAnnotations; -using System.Web.Mvc; using BuildFeed.Local; using MongoDB.Bson.Serialization.Attributes; @@ -42,7 +41,6 @@ public class BuildDetails public TypeOfSource SourceType { get; set; } [Display(ResourceType = typeof(VariantTerms), Name = nameof(VariantTerms.Model_SourceDetails))] - [AllowHtml] public string SourceDetails { get; set; } [Display(ResourceType = typeof(VariantTerms), Name = nameof(VariantTerms.Model_LeakDate))] diff --git a/BuildFeed.Model/BuildFeed.Model.csproj b/BuildFeed.Model/BuildFeed.Model.csproj index decf0bd..27aea8f 100644 --- a/BuildFeed.Model/BuildFeed.Model.csproj +++ b/BuildFeed.Model/BuildFeed.Model.csproj @@ -1,118 +1,19 @@ - - - + + - Debug - AnyCPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664} - Library - Properties - BuildFeed.Model - BuildFeed.Model - v4.7.1 - 512 - - true - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 + netstandard2.0 + - - 7.0.1 - - - 1.8.9 - - - 5.2.6 - - - 3.2.6 - - - 3.2.6 - - - 2.7.0 - + + + + + + - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {9ebd4db1-1d37-456b-ad90-357aa89dd1b7} - BuildFeed.Local - - - - - \ No newline at end of file + + diff --git a/BuildFeed.Model/BuildRepository.cs b/BuildFeed.Model/BuildRepository.cs index b6c41f7..7bf1d4d 100644 --- a/BuildFeed.Model/BuildRepository.cs +++ b/BuildFeed.Model/BuildRepository.cs @@ -31,22 +31,22 @@ public partial class BuildRepository private readonly IMongoCollection _buildCollection; - public BuildRepository() + public BuildRepository(MongoConfig config) { var settings = new MongoClientSettings { - Server = new MongoServerAddress(MongoConfig.Host, MongoConfig.Port) + Server = new MongoServerAddress(config.Host, config.Port) }; - if (!string.IsNullOrEmpty(MongoConfig.Username) && !string.IsNullOrEmpty(MongoConfig.Password)) + if (!string.IsNullOrEmpty(config.Username) && !string.IsNullOrEmpty(config.Password)) { settings.Credential = - MongoCredential.CreateCredential(MongoConfig.Database, MongoConfig.Username, MongoConfig.Password); + MongoCredential.CreateCredential(config.Database, config.Username, config.Password); } var dbClient = new MongoClient(settings); - IMongoDatabase buildDatabase = dbClient.GetDatabase(MongoConfig.Database); + IMongoDatabase buildDatabase = dbClient.GetDatabase(config.Database); _buildCollection = buildDatabase.GetCollection(BUILD_COLLECTION_NAME); } diff --git a/BuildFeed.Model/MetaItem.cs b/BuildFeed.Model/MetaItem.cs index b973e3b..51152b1 100644 --- a/BuildFeed.Model/MetaItem.cs +++ b/BuildFeed.Model/MetaItem.cs @@ -4,7 +4,6 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; -using System.Web.Mvc; using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; using MongoDB.Driver; @@ -24,7 +23,6 @@ public class MetaItemModel public string MetaDescription { get; set; } [DisplayName("Page Content")] - [AllowHtml] public string PageContent { get; set; } } @@ -35,24 +33,24 @@ public class MetaItem private readonly IMongoCollection _metaCollection; - public MetaItem() + public MetaItem(MongoConfig config) { var settings = new MongoClientSettings { - Server = new MongoServerAddress(MongoConfig.Host, MongoConfig.Port) + Server = new MongoServerAddress(config.Host, config.Port) }; - if (!string.IsNullOrEmpty(MongoConfig.Username) && !string.IsNullOrEmpty(MongoConfig.Password)) + if (!string.IsNullOrEmpty(config.Username) && !string.IsNullOrEmpty(config.Password)) { settings.Credential = - MongoCredential.CreateCredential(MongoConfig.Database, MongoConfig.Username, MongoConfig.Password); + MongoCredential.CreateCredential(config.Database, config.Username, config.Password); } var dbClient = new MongoClient(settings); - _metaCollection = dbClient.GetDatabase(MongoConfig.Database) + _metaCollection = dbClient.GetDatabase(config.Database) .GetCollection(META_COLLECTION_NAME); - _bModel = new BuildRepository(); + _bModel = new BuildRepository(config); } [DataObjectMethod(DataObjectMethodType.Select, false)] diff --git a/BuildFeed.Model/MongoConfig.cs b/BuildFeed.Model/MongoConfig.cs index 0906e7f..79b9e8a 100644 --- a/BuildFeed.Model/MongoConfig.cs +++ b/BuildFeed.Model/MongoConfig.cs @@ -1,40 +1,37 @@ -using System.Configuration; - -namespace BuildFeed.Model +namespace BuildFeed.Model { - public static class MongoConfig + public class MongoConfig { - public static string Host { get; } - public static int Port { get; } - public static string Database { get; } - public static string Username { get; } - public static string Password { get; } + public string Host { get; } + public int Port { get; } + public string Database { get; } + public string Username { get; } + public string Password { get; } - static MongoConfig() + public MongoConfig(string host, int? port, string database, string username, string password) { - Host = !string.IsNullOrEmpty(ConfigurationManager.AppSettings["data:MongoHost"]) - ? ConfigurationManager.AppSettings["data:MongoHost"] + Host = !string.IsNullOrEmpty(host) + ? host : "localhost"; - bool success = int.TryParse(ConfigurationManager.AppSettings["data:MongoPort"], out int port); - if (!success) + if (!port.HasValue) { port = 27017; // mongo default port } - Port = port; + Port = port.Value; - Database = !string.IsNullOrEmpty(ConfigurationManager.AppSettings["data:MongoDB"]) - ? ConfigurationManager.AppSettings["data:MongoDB"] + Database = !string.IsNullOrEmpty(database) + ? database : "MongoAuth"; - Username = ConfigurationManager.AppSettings["data:MongoUser"] ?? ""; - Password = ConfigurationManager.AppSettings["data:MongoPass"] ?? ""; + Username = username ?? ""; + Password = password ?? ""; } - public static void SetupIndexes() + public void SetupIndexes() { - var b = new BuildRepository(); + var b = new BuildRepository(this); #pragma warning disable 4014 b.SetupIndexes(); #pragma warning restore 4014 diff --git a/BuildFeed.Model/Properties/AssemblyInfo.cs b/BuildFeed.Model/Properties/AssemblyInfo.cs deleted file mode 100644 index 8e21a56..0000000 --- a/BuildFeed.Model/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("BuildFeed.Model")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("BuildFeed.Model")] -[assembly: AssemblyCopyright("Copyright © 2013 - 2018, The BuildFeed Team")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. - -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM - -[assembly: Guid("7e2b4f61-1c11-4471-af80-5480e94c0664")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] - -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/BuildFeed.Model/View/SitemapData.cs b/BuildFeed.Model/View/SitemapData.cs index e610007..124e5bb 100644 --- a/BuildFeed.Model/View/SitemapData.cs +++ b/BuildFeed.Model/View/SitemapData.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Web.Routing; +using Microsoft.AspNetCore.Routing; namespace BuildFeed.Model.View { diff --git a/BuildFeed.Model/app.config b/BuildFeed.Model/app.config deleted file mode 100644 index ac76913..0000000 --- a/BuildFeed.Model/app.config +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/BuildFeed.sln b/BuildFeed.sln index a687b73..5d88b83 100644 --- a/BuildFeed.sln +++ b/BuildFeed.sln @@ -3,12 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.27130.2010 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildFeed", "BuildFeed\BuildFeed.csproj", "{CDDCF754-ECAA-4A66-ADAA-62957A57A51B}" - ProjectSection(ProjectDependencies) = postProject - {7E2B4F61-1C11-4471-AF80-5480E94C0664} = {7E2B4F61-1C11-4471-AF80-5480E94C0664} - {7C67BFB9-1B3B-4676-A58D-10573DA82CFE} = {7C67BFB9-1B3B-4676-A58D-10573DA82CFE} - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MongoAuth", "Authentication\MongoAuth\MongoAuth.csproj", "{7C67BFB9-1B3B-4676-A58D-10573DA82CFE}" EndProject Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "BuildFeedApp-Westminster", "Mobile\BuildFeedApp-Westminster\BuildFeedApp-Westminster.jsproj", "{5CAADB66-1FC2-4492-B766-36354687120D}" @@ -17,15 +11,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication", "Authentic EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobile", "Mobile", "{2B646675-44D1-4722-8A86-8C64876C8FB7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildFeed.Model", "BuildFeed.Model\BuildFeed.Model.csproj", "{7E2B4F61-1C11-4471-AF80-5480E94C0664}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{948A2168-A092-4958-A465-427271563061}" ProjectSection(SolutionItems) = preProject LICENSE.md = LICENSE.md README.md = README.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildFeed.Local", "BuildFeed.Local\BuildFeed.Local.csproj", "{9EBD4DB1-1D37-456B-AD90-357AA89DD1B7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuildFeed.Local", "BuildFeed.Local\BuildFeed.Local.csproj", "{9EBD4DB1-1D37-456B-AD90-357AA89DD1B7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuildFeed.Model", "BuildFeed.Model\BuildFeed.Model.csproj", "{0D3A70CB-4657-485A-8662-14665C3F1B10}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildFeed", "BuildFeed\BuildFeed.csproj", "{73311A63-73DC-4AF4-89F0-92B2443C05D9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -39,22 +35,6 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Debug|ARM.Build.0 = Debug|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Debug|x64.ActiveCfg = Debug|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Debug|x64.Build.0 = Debug|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Debug|x86.ActiveCfg = Debug|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Debug|x86.Build.0 = Debug|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Release|Any CPU.Build.0 = Release|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Release|ARM.ActiveCfg = Release|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Release|ARM.Build.0 = Release|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Release|x64.ActiveCfg = Release|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Release|x64.Build.0 = Release|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Release|x86.ActiveCfg = Release|Any CPU - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B}.Release|x86.Build.0 = Release|Any CPU {7C67BFB9-1B3B-4676-A58D-10573DA82CFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7C67BFB9-1B3B-4676-A58D-10573DA82CFE}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C67BFB9-1B3B-4676-A58D-10573DA82CFE}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -95,22 +75,6 @@ Global {5CAADB66-1FC2-4492-B766-36354687120D}.Release|x86.ActiveCfg = Release|x86 {5CAADB66-1FC2-4492-B766-36354687120D}.Release|x86.Build.0 = Release|x86 {5CAADB66-1FC2-4492-B766-36354687120D}.Release|x86.Deploy.0 = Release|x86 - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Debug|ARM.ActiveCfg = Debug|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Debug|ARM.Build.0 = Debug|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Debug|x64.ActiveCfg = Debug|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Debug|x64.Build.0 = Debug|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Debug|x86.ActiveCfg = Debug|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Debug|x86.Build.0 = Debug|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Release|Any CPU.Build.0 = Release|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Release|ARM.ActiveCfg = Release|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Release|ARM.Build.0 = Release|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Release|x64.ActiveCfg = Release|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Release|x64.Build.0 = Release|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Release|x86.ActiveCfg = Release|Any CPU - {7E2B4F61-1C11-4471-AF80-5480E94C0664}.Release|x86.Build.0 = Release|Any CPU {9EBD4DB1-1D37-456B-AD90-357AA89DD1B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9EBD4DB1-1D37-456B-AD90-357AA89DD1B7}.Debug|Any CPU.Build.0 = Debug|Any CPU {9EBD4DB1-1D37-456B-AD90-357AA89DD1B7}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -127,6 +91,38 @@ Global {9EBD4DB1-1D37-456B-AD90-357AA89DD1B7}.Release|x64.Build.0 = Release|Any CPU {9EBD4DB1-1D37-456B-AD90-357AA89DD1B7}.Release|x86.ActiveCfg = Release|Any CPU {9EBD4DB1-1D37-456B-AD90-357AA89DD1B7}.Release|x86.Build.0 = Release|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Debug|ARM.Build.0 = Debug|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Debug|x64.ActiveCfg = Debug|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Debug|x64.Build.0 = Debug|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Debug|x86.ActiveCfg = Debug|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Debug|x86.Build.0 = Debug|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Release|Any CPU.Build.0 = Release|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Release|ARM.ActiveCfg = Release|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Release|ARM.Build.0 = Release|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Release|x64.ActiveCfg = Release|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Release|x64.Build.0 = Release|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Release|x86.ActiveCfg = Release|Any CPU + {0D3A70CB-4657-485A-8662-14665C3F1B10}.Release|x86.Build.0 = Release|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Debug|ARM.ActiveCfg = Debug|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Debug|ARM.Build.0 = Debug|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Debug|x64.ActiveCfg = Debug|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Debug|x64.Build.0 = Debug|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Debug|x86.ActiveCfg = Debug|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Debug|x86.Build.0 = Debug|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Release|Any CPU.Build.0 = Release|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Release|ARM.ActiveCfg = Release|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Release|ARM.Build.0 = Release|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Release|x64.ActiveCfg = Release|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Release|x64.Build.0 = Release|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Release|x86.ActiveCfg = Release|Any CPU + {73311A63-73DC-4AF4-89F0-92B2443C05D9}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/BuildFeed/App_Code/BuildHelpers.cshtml b/BuildFeed/App_Code/BuildHelpers.cshtml deleted file mode 100644 index 8766466..0000000 --- a/BuildFeed/App_Code/BuildHelpers.cshtml +++ /dev/null @@ -1,26 +0,0 @@ -@using BuildFeed.Model.View -@helper LatestBuild(string title, FrontPageBuild build) -{ -

@title

-
-

- @if (build.Revision.HasValue) - { - @($"{build.Number}.{build.Revision}") - } - else - { - @build.Number - } -

-

- @build.Lab -

- @if (build.BuildTime.HasValue) - { -

- @build.BuildTime.Value.ToString("HH:mm, dddd dd MMMM yyyy") -

- } -
-} diff --git a/BuildFeed/App_Code/PaginationHelpers.cshtml b/BuildFeed/App_Code/PaginationHelpers.cshtml deleted file mode 100644 index 156cd0b..0000000 --- a/BuildFeed/App_Code/PaginationHelpers.cshtml +++ /dev/null @@ -1,164 +0,0 @@ -@using System.Web.Mvc.Html -@using System.Web.Routing -@using BuildFeed.Code -@helper PaginationBlock(int currentPage, int totalPages, string view, RouteValueDictionary rd) -{ - string multiView = view + "Page"; - - if (totalPages > 1) - { -
    - @if (currentPage == 2) - { - var rvd = new RouteValueDictionary(rd); - rvd.Remove("page"); -
  • - - - -
  • -
  • - - - -
  • - } - else if (currentPage > 2) - { - var firstRvd = new RouteValueDictionary(rd); - firstRvd.Remove("page"); -
  • - - - -
  • - - var rvd = new RouteValueDictionary(rd) - { - ["page"] = currentPage - 1 - }; -
  • - - - -
  • - } - else - { -
  • - - - -
  • -
  • - - - -
  • - } - - - @{ - var rvdIndex = new RouteValueDictionary(rd); - rvdIndex.Remove("page"); - IEnumerable pages; - } - - @if (totalPages == 1) - { - var firstRvd = new RouteValueDictionary(rd); - firstRvd.Remove("page"); - pages = Array.Empty(); - -
  • - @MvcIntrinsics.Html.ActionLink(1.ToString(), view, firstRvd) -
  • - } - else if (totalPages <= 7 && totalPages >= 2) - { - var firstRvd = new RouteValueDictionary(rd); - firstRvd.Remove("page"); - pages = Enumerable.Range(2, totalPages - 1); - -
  • - @MvcIntrinsics.Html.ActionLink(1.ToString(), view, firstRvd) -
  • - } - else if (currentPage <= 4) - { - var firstRvd = new RouteValueDictionary(rd); - firstRvd.Remove("page"); - pages = Enumerable.Range(2, 6); - -
  • - @MvcIntrinsics.Html.ActionLink(1.ToString(), view, firstRvd) -
  • - } - else if (currentPage >= totalPages - 2) - { - pages = Enumerable.Range(totalPages - 6, 7); - } - else - { - pages = Enumerable.Range(currentPage - 3, 7); - } - - @foreach (int i in pages) - { - var rvd = new RouteValueDictionary(rd) - { - ["page"] = i - }; - -
  • - @MvcIntrinsics.Html.ActionLink(i.ToString(), multiView, rvd)
  • - } - - - @if (currentPage < totalPages) - { - var rvd = new RouteValueDictionary(rd) - { - ["page"] = currentPage + 1 - }; - -
  • - - - -
  • - - var lastRvd = new RouteValueDictionary(rd) - { - ["page"] = totalPages - }; -
  • - - - -
  • - } - else - { -
  • - - - -
  • -
  • - - - -
  • - } -
- } -} \ No newline at end of file diff --git a/BuildFeed/App_Start/FilterConfig.cs b/BuildFeed/App_Start/FilterConfig.cs deleted file mode 100644 index 0a738c6..0000000 --- a/BuildFeed/App_Start/FilterConfig.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Web.Mvc; - -namespace BuildFeed -{ - public class FilterConfig - { - public static void RegisterGlobalFilters(GlobalFilterCollection filters) - { - filters.Add(new HandleErrorAttribute()); - } - } -} \ No newline at end of file diff --git a/BuildFeed/App_Start/RouteConfig.cs b/BuildFeed/App_Start/RouteConfig.cs deleted file mode 100644 index 8a4a2c6..0000000 --- a/BuildFeed/App_Start/RouteConfig.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Web.Http; -using System.Web.Mvc; -using System.Web.Routing; - -namespace BuildFeed -{ - public class RouteConfig - { - public static void RegisterRoutes(RouteCollection routes) - { - routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); - - routes.AppendTrailingSlash = true; - routes.MapHttpRoute("API", - "api/{action}/{id}", - new - { - controller = "api", - action = "GetBuilds", - id = UrlParameter.Optional - }); - - routes.MapMvcAttributeRoutes(); - } - } -} \ No newline at end of file diff --git a/BuildFeed/Areas/admin/Controllers/RootController.cs b/BuildFeed/Areas/admin/Controllers/RootController.cs deleted file mode 100644 index 6e6e8bd..0000000 --- a/BuildFeed/Areas/admin/Controllers/RootController.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Threading.Tasks; -using System.Web.Mvc; -using BuildFeed.Controllers; -using BuildFeed.Model; - -namespace BuildFeed.Admin.Controllers -{ - [Authorize(Roles = "Administrators")] - [RouteArea("admin")] - [RoutePrefix("")] - public class RootController : BaseController - { - [Route("")] - public ActionResult Index() => View(); - - [Route("regen-cache")] - public async Task RegenerateCache() - { - var bRepo = new BuildRepository(); - await bRepo.RegenerateCachedProperties(); - - return RedirectToAction(nameof(Index)); - } - } -} \ No newline at end of file diff --git a/BuildFeed/Areas/admin/Controllers/metaController.cs b/BuildFeed/Areas/admin/Controllers/metaController.cs deleted file mode 100644 index c77c616..0000000 --- a/BuildFeed/Areas/admin/Controllers/metaController.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System.Linq; -using System.Threading.Tasks; -using System.Web.Mvc; -using BuildFeed.Admin.Models.ViewModel; -using BuildFeed.Controllers; -using BuildFeed.Model; - -namespace BuildFeed.Admin.Controllers -{ - [Authorize(Roles = "Administrators")] - [RouteArea("admin")] - [RoutePrefix("meta")] - public class MetaController : BaseController - { - private readonly MetaItem _mModel; - - public MetaController() - { - _mModel = new MetaItem(); - } - - [Route("")] - public async Task Index() => View(new MetaListing - { - CurrentItems = from i in await _mModel.Select() - group i by i.Id.Type - into b - orderby b.Key.ToString() - select b, - - NewItems = from i in (from l in await _mModel.SelectUnusedLabs() - select new MetaItemModel - { - Id = new MetaItemKey - { - Type = MetaType.Lab, - Value = l - } - }).Concat(from v in await _mModel.SelectUnusedVersions() - select new MetaItemModel - { - Id = new MetaItemKey - { - Type = MetaType.Version, - Value = v - } - }) - .Concat(from y in await _mModel.SelectUnusedYears() - select new MetaItemModel - { - Id = new MetaItemKey - { - Type = MetaType.Year, - Value = y - } - }) - .Concat(from y in await _mModel.SelectUnusedFamilies() - select new MetaItemModel - { - Id = new MetaItemKey - { - Type = MetaType.Family, - Value = y - } - }) - group i by i.Id.Type - into b - orderby b.Key.ToString() - select b - }); - - [Route("create/{type}/{value}")] - public ActionResult Create(MetaType type, string value) => View(new MetaItemModel - { - Id = new MetaItemKey - { - Type = type, - Value = value - } - }); - - [HttpPost] - [ValidateAntiForgeryToken] - [Route("create/{type}/{value}")] - public async Task Create(MetaItemModel meta) - { - if (ModelState.IsValid) - { - await _mModel.Insert(meta); - return RedirectToAction(nameof(Index)); - } - - return View(meta); - } - - [Route("edit/{type}/{value}")] - public async Task Edit(MetaType type, string value) => View(nameof(Create), - await _mModel.SelectById(new MetaItemKey - { - Type = type, - Value = value - })); - - [HttpPost] - [ValidateAntiForgeryToken] - [Route("edit/{type}/{value}")] - public async Task Edit(MetaItemModel meta) - { - if (ModelState.IsValid) - { - await _mModel.Update(meta); - return RedirectToAction("Index"); - } - - return View(nameof(Create), meta); - } - } -} \ No newline at end of file diff --git a/BuildFeed/Areas/admin/Controllers/usersController.cs b/BuildFeed/Areas/admin/Controllers/usersController.cs deleted file mode 100644 index 33ff342..0000000 --- a/BuildFeed/Areas/admin/Controllers/usersController.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Linq; -using System.Web.Mvc; -using System.Web.Security; -using BuildFeed.Controllers; -using MongoAuth; - -namespace BuildFeed.Admin.Controllers -{ - [Authorize(Roles = "Administrators")] - [RouteArea("admin")] - [RoutePrefix("users")] - public class UsersController : BaseController - { - [Route] - public ActionResult Index() => View(Membership.GetAllUsers().Cast()); - - [Route("admins")] - public ActionResult Admins() - { - var admins = Roles.GetUsersInRole("Administrators").Select(Membership.GetUser).ToList(); - - return View(admins.OrderByDescending(m => m.UserName)); - } - - [Route("approve/{id:guid}")] - public ActionResult Approve(Guid id) - { - var provider = Membership.Provider as MongoMembershipProvider; - provider?.ChangeApproval(id, true); - return RedirectToAction(nameof(Index)); - } - - [Route("unapprove/{id:guid}")] - public ActionResult Unapprove(Guid id) - { - var provider = Membership.Provider as MongoMembershipProvider; - provider?.ChangeApproval(id, false); - return RedirectToAction(nameof(Index)); - } - - [Route("lock/{id:guid}")] - public ActionResult Lock(Guid id) - { - var provider = Membership.Provider as MongoMembershipProvider; - provider?.ChangeLockStatus(id, true); - return RedirectToAction(nameof(Index)); - } - - [Route("unlock/{id:guid}")] - public ActionResult Unlock(Guid id) - { - var provider = Membership.Provider as MongoMembershipProvider; - provider?.ChangeLockStatus(id, false); - return RedirectToAction(nameof(Index)); - } - - [Route("delete/{id:guid}")] - public ActionResult Delete(Guid id) - { - var provider = Membership.Provider as MongoMembershipProvider; - provider?.DeleteUser(id); - return RedirectToAction(nameof(Index)); - } - - [Route("cleanup")] - public ActionResult Cleanup() - { - MembershipUserCollection users = Membership.GetAllUsers(); - - foreach (MembershipUser user in users) - { - if (!user.IsApproved - && user.CreationDate.AddDays(30) < DateTime.Now) - { - Membership.DeleteUser(user.UserName); - } - } - - return RedirectToAction(nameof(Index)); - } - } -} \ No newline at end of file diff --git a/BuildFeed/Areas/admin/Models/ViewModel/MetaListing.cs b/BuildFeed/Areas/admin/Models/ViewModel/MetaListing.cs deleted file mode 100644 index b36ac49..0000000 --- a/BuildFeed/Areas/admin/Models/ViewModel/MetaListing.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using BuildFeed.Model; - -namespace BuildFeed.Admin.Models.ViewModel -{ - public class MetaListing - { - public IEnumerable> CurrentItems { get; set; } - public IEnumerable> NewItems { get; set; } - } -} \ No newline at end of file diff --git a/BuildFeed/Areas/admin/Views/Root/index.cshtml b/BuildFeed/Areas/admin/Views/Root/index.cshtml deleted file mode 100644 index 4948f17..0000000 --- a/BuildFeed/Areas/admin/Views/Root/index.cshtml +++ /dev/null @@ -1,20 +0,0 @@ -@{ - ViewBag.Title = $"Administration | {InvariantTerms.SiteName}"; -} - -

Administration

- -
    -
  • - @Html.ActionLink("Manage users", nameof(UsersController.Index), "Users") -
      -
    • @Html.ActionLink("View administrators", nameof(UsersController.Admins), "Users")
    • -
    -
  • -
  • - @Html.ActionLink("Manage metadata", nameof(MetaController.Index), "Meta") -
  • -
  • - @Html.ActionLink("Regenerate cached properties", nameof(RootController.RegenerateCache), "Root") -
  • -
\ No newline at end of file diff --git a/BuildFeed/Areas/admin/Views/_ViewStart.cshtml b/BuildFeed/Areas/admin/Views/_ViewStart.cshtml deleted file mode 100644 index d599c2d..0000000 --- a/BuildFeed/Areas/admin/Views/_ViewStart.cshtml +++ /dev/null @@ -1,3 +0,0 @@ -@{ - Layout = "~/Views/shared/_default.cshtml"; -} \ No newline at end of file diff --git a/BuildFeed/Areas/admin/Views/meta/create.cshtml b/BuildFeed/Areas/admin/Views/meta/create.cshtml deleted file mode 100644 index 288f717..0000000 --- a/BuildFeed/Areas/admin/Views/meta/create.cshtml +++ /dev/null @@ -1,107 +0,0 @@ -@using BuildFeed.Model -@model MetaItemModel -@{ - ViewBag.Title = $"Add metadata for {Model.Id.Value} | {InvariantTerms.SiteName}"; -} - -@section head -{ - -} - -

@($"Add metadata for {Model.Id.Value}")

- - -@using (Html.BeginForm()) -{ - @Html.AntiForgeryToken() - - @Html.HiddenFor(model => model.Id.Type) - @Html.HiddenFor(model => model.Id.Value) - -
- @Html.LabelFor(model => model.MetaDescription) -
- @Html.TextAreaFor(model => model.MetaDescription, new - { - rows = "4" - }) -
- 0 characters - @Html.ValidationMessageFor(model => model.MetaDescription) -
-
-
- -
- @Html.LabelFor(model => model.PageContent) -
- @Html.TextAreaFor(model => model.PageContent) -
- @Html.ValidationMessageFor(model => model.PageContent) -
-
-
- -
- -
- -
-
-} - -@section Scripts -{ - - - - - - - -} \ No newline at end of file diff --git a/BuildFeed/Areas/admin/Views/meta/index.cshtml b/BuildFeed/Areas/admin/Views/meta/index.cshtml deleted file mode 100644 index a8dcec7..0000000 --- a/BuildFeed/Areas/admin/Views/meta/index.cshtml +++ /dev/null @@ -1,82 +0,0 @@ -@using BuildFeed.Admin.Models.ViewModel -@using BuildFeed.Model -@model MetaListing - -@{ - ViewBag.Title = $"Manage metadata | {InvariantTerms.SiteName}"; -} - -

Manage metadata

-
    -
  • @Html.ActionLink("Return to admin panel", nameof(RootController.Index), "Root")
  • -
-

Current items

- - - - - - - - - @foreach (var group in Model.CurrentItems) - { - - - - foreach (MetaItemModel item in group) - { - - - - - } - } - -
Name
-

@group.Key

-
@item.Id.Value - @Html.ActionLink("Edit", nameof(MetaController.Edit), new - { - type = item.Id.Type, - value = item.Id.Value - }, new - { - @class = "button", - style = "width:50px" - })
-

Add new items

- - - - - - - - - @foreach (var group in Model.NewItems) - { - - - - foreach (MetaItemModel item in group) - { - - - - - } - } - -
Name
-

@group.Key

-
@item.Id.Value - @Html.ActionLink("Create", nameof(MetaController.Create), new - { - type = item.Id.Type, - value = item.Id.Value - }, new - { - @class = "button", - style = "width:50px" - })
\ No newline at end of file diff --git a/BuildFeed/Areas/admin/Views/users/admins.cshtml b/BuildFeed/Areas/admin/Views/users/admins.cshtml deleted file mode 100644 index adde895..0000000 --- a/BuildFeed/Areas/admin/Views/users/admins.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@using Humanizer -@model IEnumerable - -@{ - ViewBag.Title = "View administrators | BuildFeed"; -} - -

View administrators

- -
    -
  • @Html.ActionLink("Manage users", "Index")
  • -
  • @Html.ActionLink("Return to admin panel", "Index", "Root")
  • -
- - - - - - - - - - - @foreach (MembershipUser mu in Model) - { - - - - - - } - -
- Username - - Email Address - - Last Login Time -
- @mu.UserName - - @mu.Email - - @(mu.LastLoginDate == default(DateTime) - ? "Never" - : mu.LastLoginDate.Humanize()) -
\ No newline at end of file diff --git a/BuildFeed/Areas/admin/Views/users/index.cshtml b/BuildFeed/Areas/admin/Views/users/index.cshtml deleted file mode 100644 index b6b0a4e..0000000 --- a/BuildFeed/Areas/admin/Views/users/index.cshtml +++ /dev/null @@ -1,109 +0,0 @@ -@using Humanizer -@model IEnumerable - -@{ - ViewBag.Title = $"Manage users | {InvariantTerms.SiteName}"; -} - -

Manage users

- -
    -
  • @Html.ActionLink("View administrators", "Admins")
  • -
  • @Html.ActionLink("Clean-up old unapproved users", "Cleanup")
  • -
  • @Html.ActionLink("Return to admin panel", "Index", "Root")
  • -
- - - - - - - - - - - - - - - - @foreach (MembershipUser mu in Model) - { - - - - - - - - - - - } - -
- Username - - Email Address - - Registration Time - - Last Login Time - - Last Lockout Time -
- @mu.UserName - - @mu.Email - - @mu.CreationDate.Humanize() - - @(mu.LastLoginDate == DateTime.MinValue - ? "Never" - : mu.LastLoginDate.Humanize()) - - @(mu.LastLockoutDate == DateTime.MinValue - ? "Never" - : mu.LastLockoutDate.Humanize()) - - @(mu.IsApproved - ? Html.ActionLink("Unapprove", nameof(UsersController.Unapprove), new - { - id = mu.ProviderUserKey - }, new - { - @class = "button delete-button" - }) - : Html.ActionLink("Approve", nameof(UsersController.Approve), new - { - id = mu.ProviderUserKey - }, new - { - @class = "button add-button" - })) - - @(!mu.IsLockedOut - ? Html.ActionLink("Lock", nameof(UsersController.Lock), new - { - id = mu.ProviderUserKey - }, new - { - @class = "button delete-button" - }) - : Html.ActionLink("Unlock", nameof(UsersController.Unlock), new - { - id = mu.ProviderUserKey - }, new - { - @class = "button add-button" - })) - - @Html.ActionLink("Delete", nameof(UsersController.Delete), new - { - id = mu.ProviderUserKey - }, new - { - @class = "button delete-button", - onclick = @"return !(confirm(""Are you sure you want to delete this user?"") === false);" - }) -
\ No newline at end of file diff --git a/BuildFeed/Areas/admin/Views/web.config b/BuildFeed/Areas/admin/Views/web.config deleted file mode 100644 index 9ab7a67..0000000 --- a/BuildFeed/Areas/admin/Views/web.config +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/BuildFeed/Areas/admin/adminAreaRegistration.cs b/BuildFeed/Areas/admin/adminAreaRegistration.cs deleted file mode 100644 index 9723209..0000000 --- a/BuildFeed/Areas/admin/adminAreaRegistration.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Web.Mvc; - -namespace BuildFeed.Admin -{ - public class AdminAreaRegistration : AreaRegistration - { - public override string AreaName => "admin"; - - public override void RegisterArea(AreaRegistrationContext context) - { - } - } -} \ No newline at end of file diff --git a/BuildFeed/BuildFeed.csproj b/BuildFeed/BuildFeed.csproj index 93b1115..4e87b72 100644 --- a/BuildFeed/BuildFeed.csproj +++ b/BuildFeed/BuildFeed.csproj @@ -1,430 +1,133 @@ - - - - + + - Debug - AnyCPU - - - 2.0 - {CDDCF754-ECAA-4A66-ADAA-62957A57A51B} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - BuildFeed - BuildFeed - v4.7.1 - false - true - true - - - - - /subscriptions/4af45631-0e5c-4253-9e38-d0c47f9c5b32/resourcegroups/Default-ApplicationInsights-CentralUS/providers/microsoft.insights/components/BuildFeed - - - - - true - Latest - - False - False - true - true - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - ExtendedCorrectnessRules.ruleset - - - pdbonly - true - bin\ - TRACE - prompt - 4 - ES6 - None - True - False - ES6 - False - - - False - True - True - - + netcoreapp2.1 + aspnet-BuildFeed-794E2AE1-72C2-4F00-B783-1C78917251E7 + 3.0 + - - - - 2.5.1 - - - 5.2.6 - - - 3.2.6 - - - 5.2.6 - - - 3.2.6 - - - 2.0.1 - - - 2.9.0 - - - 1.0.0 - - - 0.3.0 - - - 1.0.3 - - - 1.3.0 - + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - Global.asax - - + + + - - - - - - - package.json - - - - - winter.scss - - - winter.css - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dark.scss - - - dark.css - - - default.scss - - - default.css - - - light.scss - - - light.css - - - rtl.scss - - - rtl.css - - - bfs.ts - - - bfs.js - - - christmas.ts - - - christmas.js - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - - - Web.config - Designer - - - Web.config - Designer - - - - - - - - - - - - - - Designer - - - - - - - - - - - - - Always - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - - - - - {7c67bfb9-1b3b-4676-a58d-10573da82cfe} - MongoAuth - - - {9ebd4db1-1d37-456b-ad90-357aa89dd1b7} - BuildFeed.Local - - - {7e2b4f61-1c11-4471-af80-5480e94c0664} - BuildFeed.Model - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - ES2015 - None - False - False - None - True - - - False - True - False - - - - - - - - - - - - - - - - - True - True - 50468 - / - http://localhost:50505/ - False - False - - - False - - - - - - attrib +H $(ProjectDir)node_modules /D -attrib +H $(ProjectDir)obj /D - - \ No newline at end of file + + diff --git a/BuildFeed/BuildFeed.csproj.DotSettings b/BuildFeed/BuildFeed.csproj.DotSettings deleted file mode 100644 index b9bda2e..0000000 --- a/BuildFeed/BuildFeed.csproj.DotSettings +++ /dev/null @@ -1,3 +0,0 @@ - - True - True \ No newline at end of file diff --git a/BuildFeed/Code/Base32Encoding.cs b/BuildFeed/Code/Base32Encoding.cs deleted file mode 100644 index 6592bba..0000000 --- a/BuildFeed/Code/Base32Encoding.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System; - -namespace BuildFeed.Code -{ - /* Based off http://stackoverflow.com/a/7135008 */ - public class Base32Encoding - { - public static byte[] ToBytes(string input) - { - if (string.IsNullOrEmpty(input)) - { - throw new ArgumentNullException(nameof(input)); - } - - input = input.TrimEnd('='); //remove padding characters - int byteCount = input.Length * 5 / 8; //this must be TRUNCATED - var returnArray = new byte[byteCount]; - - byte curByte = 0, - bitsRemaining = 8; - - int arrayIndex = 0; - - foreach (char c in input) - { - int cValue = CharToValue(c); - - int mask; - if (bitsRemaining > 5) - { - mask = cValue << (bitsRemaining - 5); - curByte = (byte)(curByte | mask); - bitsRemaining -= 5; - } - else - { - mask = cValue >> (5 - bitsRemaining); - curByte = (byte)(curByte | mask); - returnArray[arrayIndex++] = curByte; - curByte = (byte)(cValue << (3 + bitsRemaining)); - bitsRemaining += 3; - } - } - - //if we didn't end with a full byte - if (arrayIndex != byteCount) - { - returnArray[arrayIndex] = curByte; - } - - return returnArray; - } - - public static string ToString(byte[] input) - { - if (input == null || input.Length == 0) - { - throw new ArgumentNullException(nameof(input)); - } - - int charCount = (int)Math.Ceiling(input.Length / 5d) * 8; - var returnArray = new char[charCount]; - - byte nextChar = 0, - bitsRemaining = 5; - int arrayIndex = 0; - - foreach (byte b in input) - { - nextChar = (byte)(nextChar | (b >> (8 - bitsRemaining))); - returnArray[arrayIndex++] = ValueToChar(nextChar); - - if (bitsRemaining < 4) - { - nextChar = (byte)((b >> (3 - bitsRemaining)) & 31); - returnArray[arrayIndex++] = ValueToChar(nextChar); - bitsRemaining += 5; - } - - bitsRemaining -= 3; - nextChar = (byte)((b << bitsRemaining) & 31); - } - - //if we didn't end with a full char - if (arrayIndex != charCount) - { - returnArray[arrayIndex++] = ValueToChar(nextChar); - while (arrayIndex != charCount) - { - returnArray[arrayIndex++] = '='; //padding - } - } - - return new string(returnArray); - } - - private static int CharToValue(char c) - { - int value = c; - - //65-90 == uppercase letters - if (value < 91 && value > 64) - { - return value - 65; - } - - //50-55 == numbers 2-7 - if (value < 56 && value > 49) - { - return value - 24; - } - - //97-122 == lowercase letters - if (value < 123 && value > 96) - { - return value - 97; - } - - throw new ArgumentException("Character is not a Base32 character.", nameof(c)); - } - - private static char ValueToChar(byte b) - { - if (b < 26) - { - return (char)(b + 65); - } - - if (b < 32) - { - return (char)(b + 24); - } - - throw new ArgumentException("Byte is not a value Base32 value.", nameof(b)); - } - } -} \ No newline at end of file diff --git a/BuildFeed/Code/CustomContentTypeAttribute.cs b/BuildFeed/Code/CustomContentTypeAttribute.cs deleted file mode 100644 index 628db91..0000000 --- a/BuildFeed/Code/CustomContentTypeAttribute.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Web.Mvc; - -namespace BuildFeed.Code -{ - // this class is a hacky workaround because Microsoft just don't feel like caching the correct content type - public class CustomContentTypeAttribute : ActionFilterAttribute - { - public string ContentType { get; set; } - - public override void OnResultExecuted(ResultExecutedContext filterContext) - { - filterContext.HttpContext.Response.ContentType = ContentType; - } - } -} \ No newline at end of file diff --git a/BuildFeed/Code/DateTimeModelBinder.cs b/BuildFeed/Code/DateTimeModelBinder.cs deleted file mode 100644 index 052bc5b..0000000 --- a/BuildFeed/Code/DateTimeModelBinder.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Globalization; -using System.Web.Mvc; - -namespace BuildFeed.Code -{ - public class DateTimeModelBinder : DefaultModelBinder - { - public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) - { - ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); - - bool success = DateTime.TryParse(value.AttemptedValue, - CultureInfo.CurrentUICulture.DateTimeFormat, - DateTimeStyles.AllowWhiteSpaces, - out DateTime retValue); - - if (!success) - { - success = DateTime.TryParseExact(value.AttemptedValue, - "yyMMdd-HHmm", - CultureInfo.InvariantCulture, - DateTimeStyles.AllowWhiteSpaces, - out retValue); - } - - return success - ? retValue as DateTime? - : null; - } - } -} \ No newline at end of file diff --git a/BuildFeed/Code/DisplayHelpers.cs b/BuildFeed/Code/DisplayHelpers.cs index d0d4a64..0e06914 100644 --- a/BuildFeed/Code/DisplayHelpers.cs +++ b/BuildFeed/Code/DisplayHelpers.cs @@ -3,14 +3,14 @@ using System.Globalization; using System.Linq; using System.Text; -using System.Web; -using System.Web.Mvc; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.ViewFeatures; namespace BuildFeed.Code { public static class MvcExtensions { - public static IHtmlString CheckboxListForEnum(this HtmlHelper html, string id, T currentItem) + public static string CheckboxListForEnum(this HtmlHelper html, string id, T currentItem) where T : struct { var sb = new StringBuilder(); @@ -29,9 +29,15 @@ public static IHtmlString CheckboxListForEnum(this HtmlHelper html, string id var wrapper = new TagBuilder("div"); wrapper.Attributes.Add("class", "checkbox"); - var label = new TagBuilder("label"); + var label = new TagBuilder("label") + { + TagRenderMode = TagRenderMode.Normal + }; - var input = new TagBuilder("input"); + var input = new TagBuilder("input") + { + TagRenderMode = TagRenderMode.SelfClosing + }; if ((enumValue & currentValue) != 0) { input.MergeAttribute("checked", "checked"); @@ -41,15 +47,15 @@ public static IHtmlString CheckboxListForEnum(this HtmlHelper html, string id input.MergeAttribute("value", enumValue.ToString()); input.MergeAttribute("name", id); - label.InnerHtml = input.ToString(TagRenderMode.SelfClosing); - label.InnerHtml += GetDisplayTextForEnum(enumItem); + label.InnerHtml.AppendHtml(input.ToString()); + label.InnerHtml.Append(GetDisplayTextForEnum(enumItem)); - wrapper.InnerHtml = label.ToString(TagRenderMode.Normal); + wrapper.InnerHtml.AppendHtml(label.ToString()); - sb.Append(wrapper.ToString(TagRenderMode.Normal)); + sb.Append(wrapper); } - return new HtmlString(sb.ToString()); + return sb.ToString(); } public static string GetDisplayTextForEnum(object o) diff --git a/BuildFeed/Code/EmailManager/EmailManager.cs b/BuildFeed/Code/EmailManager/EmailManager.cs deleted file mode 100644 index d62bd88..0000000 --- a/BuildFeed/Code/EmailManager/EmailManager.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace BuildFeed.Code -{ - public static partial class EmailManager - { - private const string EMAIL_FROM = "thomas@buildfeed.net"; - } -} \ No newline at end of file diff --git a/BuildFeed/Code/EmailManager/RegistrationEmail.cs b/BuildFeed/Code/EmailManager/RegistrationEmail.cs deleted file mode 100644 index 3fd6ca9..0000000 --- a/BuildFeed/Code/EmailManager/RegistrationEmail.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Net.Mail; -using System.Threading.Tasks; -using System.Web.Security; -using BuildFeed.Local; - -namespace BuildFeed.Code -{ - public static partial class EmailManager - { - public static async Task SendRegistrationEmail(MembershipUser mu, string validationLink) - { - using (var mm = new MailMessage(EMAIL_FROM, mu.Email)) - { - mm.Subject = string.Format(VariantTerms.Email_Registration_Subject, InvariantTerms.SiteName); - mm.Body = string.Format(VariantTerms.Email_Registration_Body, InvariantTerms.SiteName, validationLink); - - using (var sc = new SmtpClient()) - { - await sc.SendMailAsync(mm); - } - } - } - } -} \ No newline at end of file diff --git a/BuildFeed/Code/MvcIntrinsics.cs b/BuildFeed/Code/MvcIntrinsics.cs deleted file mode 100644 index 65770b5..0000000 --- a/BuildFeed/Code/MvcIntrinsics.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Web.Mvc; -using System.Web.WebPages; - -namespace BuildFeed.Code -{ - public static class MvcIntrinsics - { - public static AjaxHelper Ajax => ((WebViewPage)WebPageContext.Current.Page).Ajax; - public static HtmlHelper Html => ((WebViewPage)WebPageContext.Current.Page).Html; - public static UrlHelper Url => ((WebViewPage)WebPageContext.Current.Page).Url; - } -} \ No newline at end of file diff --git a/BuildFeed/Code/OneSignalHelper.cs b/BuildFeed/Code/OneSignalHelper.cs index ca88332..7ee0c5a 100644 --- a/BuildFeed/Code/OneSignalHelper.cs +++ b/BuildFeed/Code/OneSignalHelper.cs @@ -12,11 +12,11 @@ namespace BuildFeed.Code { public static class OneSignalHelper { - public static void PushNewBuild(this OneSignalClient osc, Build build, string url) + public static void PushNewBuild(this OneSignalClient osc, Guid appId, Build build, string url) { osc.Notifications.Create(new NotificationCreateOptions { - AppId = Guid.Parse(ConfigurationManager.AppSettings["push:AppId"]), + AppId = appId, IncludedSegments = new List { #if DEBUG diff --git a/BuildFeed/Code/Options/Locale.cs b/BuildFeed/Code/Options/Locale.cs deleted file mode 100644 index e4ee295..0000000 --- a/BuildFeed/Code/Options/Locale.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System.Globalization; -using System.Linq; -using System.Web; - -namespace BuildFeed.Code.Options -{ - public class Locale - { - private const string LANG_COOKIE_NAME = "bf_lang"; - - public static readonly Locale[] AvailableLocales = - { - new Locale("ar"), - //new Locale("bn"), - new Locale("cs"), - new Locale("de"), - new Locale("el"), - new Locale("en"), - new Locale("es"), - new Locale("fa"), - new Locale("fi"), - new Locale("fr"), - new Locale("he"), - new Locale("hr"), - new Locale("hu"), - new Locale("id"), - new Locale("it"), - new Locale("ja"), - new Locale("ko"), - new Locale("lt"), - new Locale("nl"), - new Locale("pl"), - new Locale("pt"), - new Locale("pt-br"), - //new Locale("qps-ploc"), - new Locale("ro"), - new Locale("ru"), - new Locale("sk"), - new Locale("sl"), - new Locale("sv"), - new Locale("tr"), - new Locale("uk"), - new Locale("vi"), - new Locale("zh-hans"), - new Locale("zh-hant") - }; - - public string DisplayName => Info.NativeName; - - public CultureInfo Info { get; set; } - public string LocaleId { get; set; } - - public Locale(string localeId) - { - LocaleId = localeId; - Info = CultureInfo.GetCultureInfo(localeId); - } - - public static CultureInfo DetectCulture(HttpContextBase context) - { - string langCookie = context.Request.Cookies[LANG_COOKIE_NAME]?.Value; - - if (!string.IsNullOrEmpty(langCookie)) - { - try - { - var ci = (CultureInfo)CultureInfo.GetCultureInfo(langCookie).Clone(); - - // Get Gregorian Calendar in locale if available - Calendar gc = ci.OptionalCalendars.FirstOrDefault(c - => c is GregorianCalendar - && ((GregorianCalendar)c).CalendarType == GregorianCalendarTypes.Localized); - if (gc != null) - { - ci.DateTimeFormat.Calendar = gc; - } - - return ci; - } - - catch (CultureNotFoundException) - { - } - } - - return CultureInfo.CurrentCulture; - } - } -} \ No newline at end of file diff --git a/BuildFeed/Code/Options/Theme.cs b/BuildFeed/Code/Options/Theme.cs deleted file mode 100644 index 63cd3f5..0000000 --- a/BuildFeed/Code/Options/Theme.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Web; -using BuildFeed.Local; - -namespace BuildFeed.Code.Options -{ - public class Theme - { - private const string THEME_COOKIE_NAME = "bf_theme"; - - public static Theme[] AvailableThemes = (from st in Enum.GetValues(typeof(SiteTheme)).Cast() - select new Theme(st)).ToArray(); - - public string CookieValue => Value.ToString(); - public string CssPath => $"~/res/css/{Value.ToString().ToLower()}.css"; - public string DisplayName => MvcExtensions.GetDisplayTextForEnum(Value); - public SiteTheme Value { get; } - - public Theme(SiteTheme st) - { - Value = st; - } - - public static SiteTheme DetectTheme(HttpContextBase context) - { - string themeCookie = context.Request.Cookies[THEME_COOKIE_NAME]?.Value; - var theme = SiteTheme.Dark; - if (!string.IsNullOrEmpty(themeCookie)) - { - Enum.TryParse(themeCookie, out theme); - } - - return theme; - } - } - - public enum SiteTheme - { - [Display(ResourceType = typeof(VariantTerms), Name = nameof(VariantTerms.Common_ThemeDark))] - Dark = 0, - - [Display(ResourceType = typeof(VariantTerms), Name = nameof(VariantTerms.Common_ThemeLight))] - Light, - - [Display(ResourceType = typeof(VariantTerms), Name = nameof(VariantTerms.Common_ThemeWinter))] - Winter - } -} \ No newline at end of file diff --git a/BuildFeed/Code/OutputCachePushAttribute.cs b/BuildFeed/Code/OutputCachePushAttribute.cs deleted file mode 100644 index dda114c..0000000 --- a/BuildFeed/Code/OutputCachePushAttribute.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Globalization; -using System.Web; -using System.Web.Mvc; -using BuildFeed.Code.Options; - -namespace BuildFeed.Code -{ - public class OutputCachePushAttribute : ActionFilterAttribute - { - public override void OnResultExecuted(ResultExecutedContext filterContext) - { - bool isRtl = CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft; - var theme = new Theme(Theme.DetectTheme(filterContext.HttpContext)); - - filterContext.HttpContext.Response.PushPromise("/res/css/default.css"); - filterContext.HttpContext.Response.PushPromise(VirtualPathUtility.ToAbsolute(theme.CssPath)); - if (isRtl) - { - filterContext.HttpContext.Response.PushPromise("/res/css/rtl.css"); - } - - filterContext.HttpContext.Response.PushPromise("/res/ts/bfs.js"); - } - } -} \ No newline at end of file diff --git a/BuildFeed/Controllers/AccountController.cs b/BuildFeed/Controllers/AccountController.cs deleted file mode 100644 index 93ffbdf..0000000 --- a/BuildFeed/Controllers/AccountController.cs +++ /dev/null @@ -1,161 +0,0 @@ -using System; -using System.Threading.Tasks; -using System.Web; -using System.Web.Mvc; -using System.Web.Security; -using BuildFeed.Code; -using BuildFeed.Local; -using BuildFeed.Model.View; -using MongoAuth; - -namespace BuildFeed.Controllers -{ - public class AccountController : BaseController - { - [Route("login/")] - public ActionResult Login() => View(); - - [HttpPost] - [ValidateAntiForgeryToken] - [Route("login/")] - public ActionResult Login(LoginUser ru) - { - if (ModelState.IsValid) - { - bool isAuthenticated = Membership.ValidateUser(ru.UserName, ru.Password); - - if (isAuthenticated) - { - int expiryLength = ru.RememberMe - ? 129600 - : 60; - - var ticket = new FormsAuthenticationTicket(ru.UserName, true, expiryLength); - string encryptedTicket = FormsAuthentication.Encrypt(ticket); - var cookieTicket = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) - { - Expires = DateTime.Now.AddMinutes(expiryLength), - Path = FormsAuthentication.FormsCookiePath - }; - Response.Cookies.Add(cookieTicket); - - string returnUrl = string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) - ? "/" - : Request.QueryString["ReturnUrl"]; - - return Redirect(returnUrl); - } - } - - ViewData["ErrorMessage"] = "The username and password are not valid."; - return View(ru); - } - - [Authorize] - [Route("password/")] - public ActionResult Password() => View(); - - [HttpPost] - [ValidateAntiForgeryToken] - [Authorize] - [Route("password/")] - public ActionResult Password(ChangePassword cp) - { - if (ModelState.IsValid) - { - MembershipUser user = Membership.GetUser(); - - if (user != null) - { - bool success = user.ChangePassword(cp.OldPassword, cp.NewPassword); - - if (success) - { - return Redirect("/"); - } - } - } - - ViewData["ErrorMessage"] = VariantTerms.Support_Error_ChangingPasswordFail; - return View(cp); - } - - [Route("logout/")] - public ActionResult Logout() - { - FormsAuthentication.SignOut(); - return Redirect("/"); - } - - [Route("register/")] - public ActionResult Register() => View(); - - [HttpPost] - [ValidateAntiForgeryToken] - [Route("register/")] - public async Task Register(RegistrationUser ru) - { - if (ModelState.IsValid) - { - MembershipUser mu = Membership.CreateUser(ru.UserName, - ru.Password, - ru.EmailAddress, - "{IGNORE}", - "{IGNORE}", - false, - out MembershipCreateStatus status); - - switch (status) - { - case MembershipCreateStatus.Success: - { - Roles.AddUserToRole(mu.UserName, "Users"); - - var provider = (MongoMembershipProvider)Membership.Provider; - var id = (Guid)mu.ProviderUserKey; - string hash = (await provider.GenerateValidationHash(id)).ToLowerInvariant(); - - string fullUrl = Request.Url?.GetLeftPart(UriPartial.Authority) - + Url.Action("Validate", - "Account", - new - { - id, - hash - }); - await EmailManager.SendRegistrationEmail(mu, fullUrl); - return RedirectToAction(nameof(RegisterThanks)); - } - case MembershipCreateStatus.InvalidPassword: - ViewData["ErrorMessage"] = VariantTerms.Support_Error_InvalidPassword; - break; - case MembershipCreateStatus.DuplicateEmail: - ViewData["ErrorMessage"] = VariantTerms.Support_Error_DuplicateEmail; - break; - case MembershipCreateStatus.DuplicateUserName: - ViewData["ErrorMessage"] = VariantTerms.Support_Error_DuplicateUserName; - break; - default: - ViewData["ErrorMessage"] = VariantTerms.Support_Error_UnknownError; - break; - } - } - - return View(ru); - } - - [Route("register/thanks/")] - public ActionResult RegisterThanks() => View(); - - [Route("validate/{id:guid}/{hash}/")] - public async Task Validate(Guid id, string hash) - { - var provider = (MongoMembershipProvider)Membership.Provider; - bool success = await provider.ValidateUserFromHash(id, hash); - - return View(success - ? "validate-success" - : "validate-failure"); - } - } -} \ No newline at end of file diff --git a/BuildFeed/Controllers/BaseController.cs b/BuildFeed/Controllers/BaseController.cs deleted file mode 100644 index b26be30..0000000 --- a/BuildFeed/Controllers/BaseController.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Globalization; -using System.Linq; -using System.Reflection; -using System.Web.Mvc; -using System.Web.Routing; -using BuildFeed.Code.Options; - -namespace BuildFeed.Controllers -{ - public class BaseController : Controller - { - public static string VersionString = Assembly.GetExecutingAssembly() - .GetCustomAttributes(typeof(AssemblyMetadataAttribute)) - .OfType() - .FirstOrDefault(a => a.Key == "GitHash") - ?.Value - ?? "N/A"; - - protected override void Initialize(RequestContext requestContext) - { - CultureInfo ci = Locale.DetectCulture(requestContext.HttpContext); - CultureInfo.CurrentCulture = ci; - CultureInfo.CurrentUICulture = ci; - - ViewBag.Theme = new Theme(Theme.DetectTheme(requestContext.HttpContext)); - ViewBag.Version = VersionString; - - base.Initialize(requestContext); - } - } -} \ No newline at end of file diff --git a/BuildFeed/Controllers/apiController.cs b/BuildFeed/Controllers/apiController.cs deleted file mode 100644 index 55c8858..0000000 --- a/BuildFeed/Controllers/apiController.cs +++ /dev/null @@ -1,264 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Linq; -using System.Threading.Tasks; -using System.Web.Http; -using System.Web.Security; -using AutoMapper; -using BuildFeed.Code; -using BuildFeed.Local; -using BuildFeed.Model; -using BuildFeed.Model.Api; -using BuildFeed.Model.View; -using OneSignal.RestAPIv3.Client; - -#pragma warning disable SG0016 // Controller method is vulnerable to CSRF - Not relevant for API - -namespace BuildFeed.Controllers -{ - public class ApiController : System.Web.Http.ApiController - { - private readonly BuildRepository _bModel; - - public ApiController() - { - _bModel = new BuildRepository(); - } - - public async Task GetBuilds(int limit = 20, int skip = 0) - => (from b in await _bModel.SelectBuildsByOrder(limit, skip) - select Mapper.Map(b)).ToArray(); - - public async Task GetBuildGroups(int limit = 20, int skip = 0) - { - var bgroups = await _bModel.SelectAllGroups(limit, skip); - return bgroups.ToArray(); - } - - public async Task GetBuildsForBuildGroup(uint major, uint minor, uint number, uint? revision = null) - => (from b in await _bModel.SelectGroup(new BuildGroup - { - Major = major, - Minor = minor, - Build = number, - Revision = revision - }) - select Mapper.Map(b)).ToArray(); - - public async Task GetBuildsByLab(string lab, int limit = 20, int skip = 0) - => (from b in await _bModel.SelectLab(lab, limit, skip) - select Mapper.Map(b)).ToArray(); - - public async Task> GetFamilyOverviews() => await _bModel.SelectFamilyOverviews(); - - public async Task> GetWin10Labs() - { - var labs = new List(); - labs.AddRange(await _bModel.SelectLabsForVersion(6, 4)); - labs.AddRange(await _bModel.SelectLabsForVersion(10, 0)); - - return labs.GroupBy(l => l).Select(l => l.Key).Where(l => l.All(c => c != '(')).ToArray(); - } - - [HttpPost] - public async Task AddWin10Builds(NewBuildPost apiModel) - { - if (apiModel == null) - { - return false; - } - - if (Membership.ValidateUser(apiModel.Username, apiModel.Password) - && (Roles.IsUserInRole(apiModel.Username, "Editors") - || Roles.IsUserInRole(apiModel.Username, "Administrators"))) - { - var generateOldItem = new Func(nb => - { - var bi = new BuildDetails - { - MajorVersion = nb.MajorVersion, - MinorVersion = nb.MinorVersion, - Number = nb.Number, - Revision = nb.Revision, - Lab = nb.Lab, - BuildTime = nb.BuildTime.HasValue - ? DateTime.SpecifyKind(nb.BuildTime.Value, DateTimeKind.Utc) - : null as DateTime?, - SourceType = TypeOfSource.PrivateLeak - }; - - return bi; - }); - - var builds = apiModel.NewBuilds.Select(nb => new Build - { - MajorVersion = nb.MajorVersion, - MinorVersion = nb.MinorVersion, - Number = nb.Number, - Revision = nb.Revision, - Lab = nb.Lab, - BuildTime = nb.BuildTime.HasValue - ? DateTime.SpecifyKind(nb.BuildTime.Value, DateTimeKind.Utc) - : null as DateTime?, - Added = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc), - Modified = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc), - SourceType = TypeOfSource.PrivateLeak, - - History = new List> - { - new ItemHistory - { - Type = ItemHistoryType.Added, - Time = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc), - UserName = apiModel.Username, - Item = generateOldItem(nb) - } - } - }); - - foreach (Build build in builds) - { - await _bModel.Insert(build); - - var osc = new OneSignalClient(ConfigurationManager.AppSettings["push:OneSignalApiKey"]); - osc.PushNewBuild(build, - $"https://buildfeed.net{Url.Route("Build", new { controller = "Front", action = nameof(FrontController.ViewBuild), id = build.Id, area = "", httproute = "" })}?utm_source=notification&utm_campaign=new_build"); - } - - return true; - } - - return false; - } - - public async Task> GetSearchResult(string id, int maxResults = 16) - { - if (string.IsNullOrWhiteSpace(id)) - { - return Array.Empty(); - } - - var results = new List(); - - results.AddRange(from s in (from c in await _bModel.SelectAllSources() - select new - { - Text = MvcExtensions.GetDisplayTextForEnum(c), - Value = c - }) - where s.Text.ToLower().Contains(id.ToLower()) - orderby s.Text.ToLower().IndexOf(id.ToLower(), StringComparison.Ordinal) - select new SearchResult - { - Url = Url.Route("Source Root", - new - { - controller = "Front", - action = "ViewSource", - source = s.Value - }), - Label = s.Text.Replace(id, "" + id + ""), - Title = s.Text, - Group = VariantTerms.Search_Source - }); - - if (results.Count >= maxResults) - { - return results.Take(maxResults); - } - - results.AddRange(from v in await _bModel.SelectAllVersions() - where $"{v.Major}.{v.Minor}".StartsWith(id) - orderby v.Major descending, v.Minor descending - select new SearchResult - { - Url = Url.Route("Version Root", - new - { - controller = "Front", - action = "ViewVersion", - major = v.Major, - minor = v.Minor - }), - Label = $"{v.Major}.{v.Minor}".Replace(id, "" + id + ""), - Title = "", - Group = VariantTerms.Search_Version - }); - - if (results.Count >= maxResults) - { - return results.Take(maxResults); - } - - results.AddRange(from y in await _bModel.SelectAllYears() - where y.ToString().Contains(id) - orderby y descending - select new SearchResult - { - Url = Url.Route("Year Root", - new - { - controller = "Front", - action = "ViewYear", - year = y - }), - Label = y.ToString().Replace(id, "" + id + ""), - Title = "", - Group = VariantTerms.Search_Year - }); - - if (results.Count >= maxResults) - { - return results.Take(maxResults); - } - - results.AddRange(from l in await _bModel.SearchLabs(id) - select new SearchResult - { - Url = Url.Route("Lab Root", - new - { - controller = "Front", - action = "ViewLab", - lab = l.Replace('/', '-') - }), - Label = l.Replace(id, $"{id}"), - Title = l, - Group = VariantTerms.Search_Lab - }); - - if (results.Count >= maxResults) - { - return results.Take(maxResults); - } - - results.AddRange(from b in await _bModel.SelectBuildsByStringSearch(id, maxResults) - select new SearchResult - { - Url = Url.Route("Build", - new - { - controller = "Front", - action = "ViewBuild", - id = b.Id - }), - Label = b.FullBuildString.Replace(id, $"{id}"), - Title = b.FullBuildString, - Group = VariantTerms.Search_Build - }); - - if (results.Count == 0) - { - results.Add(new SearchResult - { - Url = "/", - Label = VariantTerms.Search_Empty, - Group = "" - }); - } - - return results.Take(16); - } - } -} \ No newline at end of file diff --git a/BuildFeed/Controllers/frontController.cs b/BuildFeed/Controllers/frontController.cs index d3dd6a9..6f59f23 100644 --- a/BuildFeed/Controllers/frontController.cs +++ b/BuildFeed/Controllers/frontController.cs @@ -8,27 +8,37 @@ using System.Globalization; using System.IO; using System.Linq; +using System.Security.Policy; using System.Text.RegularExpressions; using System.Threading.Tasks; -using System.Web.Mvc; using BuildFeed.Code; using BuildFeed.Model; using BuildFeed.Model.View; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.IdentityModel.Protocols; using OneSignal.RestAPIv3.Client; namespace BuildFeed.Controllers { - public class FrontController : BaseController + public class FrontController : Controller { public const int PAGE_SIZE = 72; private readonly BuildRepository _bModel; private readonly MetaItem _mModel; + private readonly IHostingEnvironment _env; + private readonly IConfiguration _config; - public FrontController() + public FrontController(IHostingEnvironment env, IConfiguration config, BuildRepository bModel, MetaItem mModel) { - _bModel = new BuildRepository(); - _mModel = new MetaItem(); + _env = env; + _bModel = bModel; + _mModel = mModel; + _config = config; } [Route("", Order = 1)] @@ -61,7 +71,7 @@ public async Task IndexPage(int page) if (ViewBag.PageNumber > ViewBag.PageCount) { - return new HttpNotFoundResult(); + return NotFound(); } return View("Pages", buildGroups); @@ -105,7 +115,7 @@ public async Task ViewBuild(Guid id) Build b = await _bModel.SelectById(id); if (b == null) { - return new HttpNotFoundResult(); + return NotFound(); } return View(b); @@ -117,7 +127,7 @@ public async Task ViewBuild(long id) Build b = await _bModel.SelectByLegacyId(id); if (b == null) { - return new HttpNotFoundResult(); + return NotFound(); } return RedirectToAction(nameof(ViewBuild), @@ -137,10 +147,10 @@ public async Task TwitterCard(Guid id) Build b = await _bModel.SelectById(id); if (b == null) { - return new HttpNotFoundResult(); + return NotFound(); } - string path = Path.Combine(Server.MapPath("~/res/card/"), $"{b.Family}.png"); + string path = Path.Combine(_env.WebRootPath, "res/card", $"{b.Family}.png"); bool backExists = System.IO.File.Exists(path); using (Bitmap bm = backExists @@ -252,7 +262,7 @@ public async Task TwitterCard(Guid id) } Response.ContentType = "image/png"; - bm.Save(Response.OutputStream, ImageFormat.Png); + bm.Save(Response.Body, ImageFormat.Png); } } @@ -265,7 +275,7 @@ public async Task TwitterCard(long id) Build b = await _bModel.SelectByLegacyId(id); if (b == null) { - return new HttpNotFoundResult(); + return NotFound(); } return RedirectToAction(nameof(TwitterCard), @@ -308,7 +318,7 @@ public async Task ViewFamilyPage(ProjectFamily family, int page) if (ViewBag.PageNumber > ViewBag.PageCount) { - return new HttpNotFoundResult(); + return NotFound(); } return View("viewFamily", builds); @@ -347,7 +357,7 @@ public async Task ViewLabPage(string lab, int page) if (ViewBag.PageNumber > ViewBag.PageCount) { - return new HttpNotFoundResult(); + return NotFound(); } return View("viewLab", builds); @@ -386,7 +396,7 @@ public async Task ViewSourcePage(TypeOfSource source, int page) if (ViewBag.PageNumber > ViewBag.PageCount) { - return new HttpNotFoundResult(); + return NotFound(); } return View("viewSource", builds); @@ -424,7 +434,7 @@ public async Task ViewYearPage(int year, int page) if (ViewBag.PageNumber > ViewBag.PageCount) { - return new HttpNotFoundResult(); + return NotFound(); } return View("viewYear", builds); @@ -464,7 +474,7 @@ public async Task ViewVersionPage(uint major, uint minor, int page if (ViewBag.PageNumber > ViewBag.PageCount) { - return new HttpNotFoundResult(); + return NotFound(); } return View("viewVersion", builds); @@ -538,8 +548,11 @@ public async Task AddBuild(Build build) return View("EditBuild", build); } - var osc = new OneSignalClient(ConfigurationManager.AppSettings["push:OneSignalApiKey"]); - osc.PushNewBuild(build, + + var osc = new OneSignalClient(_config.GetValue("push:OneSignalApiKey")); + osc.PushNewBuild( + _config.GetValue("push:AppId"), + build, $"https://buildfeed.net{Url.Action(nameof(ViewBuild), new { id = build.Id })}?utm_source=notification&utm_campaign=new_build"); return RedirectToAction(nameof(ViewBuild), @@ -562,12 +575,12 @@ public async Task AddBuild(Build build) [HttpPost] public async Task AddBulk(FormCollection values) { - var osc = new OneSignalClient(ConfigurationManager.AppSettings["push:OneSignalApiKey"]); + var osc = new OneSignalClient(_config.GetValue("push:OneSignalApiKey")); var success = new List(); var failed = new List(); - bool notify = bool.Parse(values[nameof(BulkAddition.SendNotifications)].Split(',')[0]); + bool notify = bool.Parse(values[nameof(BulkAddition.SendNotifications)][0]); - foreach (string line in values[nameof(BulkAddition.Builds)] + foreach (string line in values[nameof(BulkAddition.Builds)][0] .Split(new[] { '\r', @@ -636,7 +649,9 @@ public async Task AddBulk(FormCollection values) if (notify) { - osc.PushNewBuild(b, + osc.PushNewBuild( + _config.GetValue("push:AppId"), + b, $"https://buildfeed.net{Url.Action(nameof(ViewBuild), new { id = b.Id })}?utm_source=notification&utm_campaign=new_build"); } diff --git a/BuildFeed/Controllers/rssController.cs b/BuildFeed/Controllers/rssController.cs deleted file mode 100644 index 59e2d88..0000000 --- a/BuildFeed/Controllers/rssController.cs +++ /dev/null @@ -1,169 +0,0 @@ -using System; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Web.Mvc; -using BuildFeed.Model; -using WilderMinds.RssSyndication; - -namespace BuildFeed.Controllers -{ - public class RssController : BaseController - { - private const int RSS_SIZE = 25; - private readonly BuildRepository _bModel; - - public RssController() - { - _bModel = new BuildRepository(); - } - - [Route("rss/compiled")] - public async Task Index() - { - var builds = await _bModel.SelectBuildsByCompileDate(RSS_SIZE); - - var feed = new Feed - { - Title = "BuildFeed RSS - Recently Compiled", - Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}"), - Items = (from build in builds - select new Item - { - Title = build.AlternateBuildString, - Link = new Uri( - $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"), - Permalink = - $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}", - Categories = build.RssCategories, - PublishDate = DateTime.SpecifyKind(build.BuildTime.GetValueOrDefault(), DateTimeKind.Utc) - }).ToList() - }; - - return new ContentResult - { - Content = feed.Serialize(), - ContentType = "application/rss+xml", - ContentEncoding = Encoding.UTF8 - }; - } - - [Route("rss/added")] - public async Task Added() - { - var builds = await _bModel.SelectBuildsByAddedDate(RSS_SIZE); - - var feed = new Feed - { - Title = "BuildFeed RSS - Recently Added", - Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}"), - Items = (from build in builds - select new Item - { - Title = build.AlternateBuildString, - Link = new Uri( - $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"), - Permalink = - $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}", - Categories = build.RssCategories, - PublishDate = DateTime.SpecifyKind(build.Added, DateTimeKind.Utc) - }).ToList() - }; - - return new ContentResult - { - Content = feed.Serialize(), - ContentType = "application/rss+xml", - ContentEncoding = Encoding.UTF8 - }; - } - - [Route("rss/leaked")] - public async Task Leaked() - { - var builds = await _bModel.SelectBuildsByLeakedDate(RSS_SIZE); - - var feed = new Feed - { - Title = "BuildFeed RSS - Recently Leaked", - Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}"), - Items = (from build in builds - select new Item - { - Title = build.AlternateBuildString, - Link = new Uri( - $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"), - Permalink = - $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}", - Categories = build.RssCategories, - PublishDate = DateTime.SpecifyKind(build.LeakDate.GetValueOrDefault(), DateTimeKind.Utc) - }).ToList() - }; - - return new ContentResult - { - Content = feed.Serialize(), - ContentType = "application/rss+xml", - ContentEncoding = Encoding.UTF8 - }; - } - - [Route("rss/version")] - public async Task Version() - { - var builds = await _bModel.SelectBuildsByOrder(RSS_SIZE); - - var feed = new Feed - { - Title = "BuildFeed RSS - Highest Version", - Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}"), - Items = (from build in builds - select new Item - { - Title = build.AlternateBuildString, - Link = new Uri( - $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"), - Permalink = - $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}", - Categories = build.RssCategories - }).ToList() - }; - - return new ContentResult - { - Content = feed.Serialize(), - ContentType = "application/rss+xml", - ContentEncoding = Encoding.UTF8 - }; - } - - [Route("rss/lab/{lab}")] - public async Task Lab(string lab) - { - var builds = await _bModel.SelectLab(lab, RSS_SIZE); - - var feed = new Feed - { - Title = $"BuildFeed RSS - {lab} Lab", - Link = new Uri($"{Request.Url.Scheme}://{Request.Url.Authority}"), - Items = (from build in builds - select new Item - { - Title = build.AlternateBuildString, - Link = new Uri( - $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}"), - Permalink = - $"{Request.Url.Scheme}://{Request.Url.Authority}{Url.Action(nameof(FrontController.ViewBuild), new { controller = "Front", id = build.Id })}", - Categories = build.RssCategories - }).ToList() - }; - - return new ContentResult - { - Content = feed.Serialize(), - ContentType = "application/rss+xml", - ContentEncoding = Encoding.UTF8 - }; - } - } -} \ No newline at end of file diff --git a/BuildFeed/Controllers/supportController.cs b/BuildFeed/Controllers/supportController.cs deleted file mode 100644 index 736f579..0000000 --- a/BuildFeed/Controllers/supportController.cs +++ /dev/null @@ -1,224 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using System.Web.Mvc; -using System.Web.Routing; -using System.Xml.Linq; -using BuildFeed.Code; -using BuildFeed.Local; -using BuildFeed.Model; -using BuildFeed.Model.View; - -namespace BuildFeed.Controllers -{ - public class SupportController : BaseController - { - private readonly BuildRepository _bModel; - - public SupportController() - { - _bModel = new BuildRepository(); - } - - [Route("rss")] - public async Task Rss() - { - ViewBag.Labs = await _bModel.SelectAllLabs(); - return View(); - } - - [Route("sitemap/")] - #if !DEBUG - [OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")] - #endif - public async Task Sitemap() - { - var builds = await _bModel.SelectBuildsByOrder(); - var actions = new Dictionary - { - { - "Pages", new[] - { - new SitemapPagedAction - { - UrlParams = new RouteValueDictionary(new - { - controller = "Front", - action = "Index", - page = 1 - }), - Pages = (builds.Count + (FrontController.PAGE_SIZE - 1)) / FrontController.PAGE_SIZE - } - } - }, - { - "Versions", (from b in builds - group b by new BuildVersion - { - Major = b.MajorVersion, - Minor = b.MinorVersion - } - into bv - orderby bv.Key.Major descending, bv.Key.Minor descending - select new SitemapPagedAction - { - Name = $"{InvariantTerms.ProductName} {bv.Key.Major}.{bv.Key.Minor}", - UrlParams = new RouteValueDictionary(new - { - controller = "Front", - action = "ViewVersion", - major = bv.Key.Major, - minor = bv.Key.Minor, - page = 1 - }), - Pages = (bv.Count() + (FrontController.PAGE_SIZE - 1)) / FrontController.PAGE_SIZE - }).ToArray() - }, - { - "Labs", (from b in builds - where !string.IsNullOrEmpty(b.Lab) - group b by b.Lab - into bv - orderby bv.Key - select new SitemapPagedAction - { - Name = bv.Key, - UrlParams = new RouteValueDictionary(new - { - controller = "Front", - action = "ViewLab", - lab = bv.Key, - page = 1 - }), - Pages = (bv.Count() + (FrontController.PAGE_SIZE - 1)) / FrontController.PAGE_SIZE - }).ToArray() - }, - { - "Years", (from b in builds - where b.BuildTime.HasValue - group b by b.BuildTime.Value.Year - into bv - orderby bv.Key descending - select new SitemapPagedAction - { - Name = bv.Key.ToString(), - UrlParams = new RouteValueDictionary(new - { - controller = "Front", - action = "ViewYear", - year = bv.Key, - page = 1 - }), - Pages = (bv.Count() + (FrontController.PAGE_SIZE - 1)) / FrontController.PAGE_SIZE - }).ToArray() - }, - { - "Sources", (from b in builds - group b by b.SourceType - into bv - orderby bv.Key - select new SitemapPagedAction - { - Name = MvcExtensions.GetDisplayTextForEnum(bv.Key), - UrlParams = new RouteValueDictionary(new - { - controller = "Front", - action = "ViewSource", - source = bv.Key, - page = 1 - }), - Pages = (bv.Count() + (FrontController.PAGE_SIZE - 1)) / FrontController.PAGE_SIZE - }).ToArray() - } - }; - - - var model = new SitemapData - { - Builds = (from b in builds - group b by new - { - Major = b.MajorVersion, - Minor = b.MinorVersion, - Build = b.Number, - b.Revision - } - into bg - orderby bg.Key.Major descending, bg.Key.Minor descending, bg.Key.Build descending, bg.Key.Revision - descending - select new SitemapDataBuildGroup - { - Id = new BuildGroup - { - Major = bg.Key.Major, - Minor = bg.Key.Minor, - Build = bg.Key.Build, - Revision = bg.Key.Revision - }, - Builds = (from bgb in bg - select new SitemapDataBuild - { - Id = bgb.Id, - Name = bgb.FullBuildString - }).ToArray() - }).ToArray(), - Actions = actions, - Labs = (from b in builds - group b by b.Lab - into lab - select lab.Key).ToArray() - }; - - return View(model); - } - - [Route("xml-sitemap/")] - #if !DEBUG - [OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "userName;lang;theme")] - #endif - public async Task XmlSitemap() - { - XNamespace xn = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9"); - var xlist = new List(); - - // home page - var home = new XElement(xn + "url"); - home.Add(new XElement(xn + "loc", Request.Url?.GetLeftPart(UriPartial.Authority) + "/")); - home.Add(new XElement(xn + "changefreq", "daily")); - xlist.Add(home); - - foreach (Build b in await _bModel.Select()) - { - var url = new XElement(xn + "url"); - url.Add(new XElement(xn + "loc", - Request.Url?.GetLeftPart(UriPartial.Authority) - + Url.Action("ViewBuild", - "Front", - new - { - id = b.Id - }))); - if (b.Modified != DateTime.MinValue) - { - url.Add(new XElement(xn + "lastmod", b.Modified.ToString("yyyy-MM-dd"))); - } - - xlist.Add(url); - } - - var decl = new XDeclaration("1.0", "utf-8", ""); - var root = new XElement(xn + "urlset", xlist); - - var xdoc = new XDocument(decl, root); - - Response.ContentType = "application/xml"; - xdoc.Save(Response.OutputStream); - - return new EmptyResult(); - } - - [Route("credits/")] - public ActionResult Credits() => View(); - } -} \ No newline at end of file diff --git a/BuildFeed/Global.asax b/BuildFeed/Global.asax deleted file mode 100644 index 9d17b82..0000000 --- a/BuildFeed/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="BuildFeed.MvcApplication" Language="C#" %> \ No newline at end of file diff --git a/BuildFeed/Global.asax.cs b/BuildFeed/Global.asax.cs deleted file mode 100644 index 8ed7e25..0000000 --- a/BuildFeed/Global.asax.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using System.Web.Routing; -using System.Web.Security; -using BuildFeed.Code; -using BuildFeed.Code.Options; -using BuildFeed.Model; - -namespace BuildFeed -{ - public class MvcApplication : HttpApplication - { - protected void Application_Start() - { - // Disable ASP.NET MVC version header - MvcHandler.DisableMvcResponseHeader = true; - - // Don't bother looking for the legacy aspx view engine. - ViewEngines.Engines.Clear(); - ViewEngines.Engines.Add(new RazorViewEngine()); - - RouteConfig.RegisterRoutes(RouteTable.Routes); - AreaRegistration.RegisterAllAreas(); - FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); - - var db = new DateTimeModelBinder(); - - ModelBinders.Binders.Add(typeof(DateTime), db); - ModelBinders.Binders.Add(typeof(DateTime?), db); - - ModelMappings.Initialise(); - - Roles.CreateRole("Administrators"); - Roles.CreateRole("Editors"); - Roles.CreateRole("Users"); - - MongoConfig.SetupIndexes(); - } - - public override string GetVaryByCustomString(HttpContext context, string custom) - { - var parts = custom.Split(';'); - var varyParts = new List(); - var contextWrapper = new HttpContextWrapper(context); - - foreach (string part in parts) - { - switch (part) - { - case "userName": - varyParts.Add($"user:{context.User.Identity.Name}"); - break; - case "lang": - varyParts.Add($"lang:{Locale.DetectCulture(contextWrapper).IetfLanguageTag}"); - break; - case "theme": - varyParts.Add($"theme:{Theme.DetectTheme(contextWrapper)}"); - break; - } - } - - return string.Join(";", varyParts.OrderBy(s => s)); - } - } -} \ No newline at end of file diff --git a/BuildFeed/Models/ErrorViewModel.cs b/BuildFeed/Models/ErrorViewModel.cs new file mode 100644 index 0000000..1a8863f --- /dev/null +++ b/BuildFeed/Models/ErrorViewModel.cs @@ -0,0 +1,11 @@ +using System; + +namespace BuildFeed.Models +{ + public class ErrorViewModel + { + public string RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + } +} \ No newline at end of file diff --git a/BuildFeed/Program.cs b/BuildFeed/Program.cs new file mode 100644 index 0000000..2d99b14 --- /dev/null +++ b/BuildFeed/Program.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; + +namespace BuildFeed +{ + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup(); + } +} \ No newline at end of file diff --git a/BuildFeed/Properties/AssemblyInfo.cs b/BuildFeed/Properties/AssemblyInfo.cs deleted file mode 100644 index dc0e127..0000000 --- a/BuildFeed/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("BuildFeed")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("BuildFeed")] -[assembly: AssemblyCopyright("Copyright © 2013 - 2018, The BuildFeed Team")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. - -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM - -[assembly: Guid("6c5846cb-43ac-4818-a9b5-a6cd1d6983a3")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: - -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/BuildFeed/Properties/PublishProfiles/Local Folder.pubxml b/BuildFeed/Properties/PublishProfiles/Local Folder.pubxml deleted file mode 100644 index e1ed985..0000000 --- a/BuildFeed/Properties/PublishProfiles/Local Folder.pubxml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - FileSystem - Release - Any CPU - - True - False - $(HOMEDRIVE)$(HOMEPATH)\Documents\Publish\buildfeed.net - True - True - False - False - MergeAllOutputsToASingleAssembly - True - BuildFeed.Views - True - - \ No newline at end of file diff --git a/BuildFeed/Properties/launchSettings.json b/BuildFeed/Properties/launchSettings.json new file mode 100644 index 0000000..0081cbd --- /dev/null +++ b/BuildFeed/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:50201", + "sslPort": 44395 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "BuildFeed": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/BuildFeed/Scripts/_references.js b/BuildFeed/Scripts/_references.js deleted file mode 100644 index b7dcf6b4f95974cd373c95b2e0df1a136d24cc84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4664 zcmchb-A;o*5QXR3#CK@CmnOz|rM?PjE7(&0gaxAyuYR+5L2Vln%TCC`0<(M0&K_oW z`2Jdo9t(Mtm2~2yl2$&Xlnu`kt}9tfPVGgWliqPPV>vBoWs7w&m*lc}=hVPEk{-NVcJNi)geL`eWl)5U{ww@6 zc&7!g4}g3tcZ@>I{Vbyz*cR}vKG%8r(#AfPFjnt45bu7G>8byWeOc8WS-CNcU3%}`#WP{^Oa55uZ z?^&HJ{8sqgL-^I9G>WFR8IFzK8Y3MvMyrtG#D2f!e)p&0wWoV`i*Kowy%A1tf}?AQ zh2J`(nA#id6+X%PV)8)EzQU_}Ky&0Wq0ls@c4SAIPils=X1-eXDGy|1n$PO@HO{A^ z1B**?+~dBNWY&jlHblsrqLJk^o3TY`Hu}e4hfg#YFNp`I8U3{i&8o&b`j0}rR4{vv dLphvgcg{LA%g)bj1;2C5#ujt4Io8@S!VlLt4^#jE diff --git a/BuildFeed/Scripts/trumbowyg/langs/da.min.js b/BuildFeed/Scripts/trumbowyg/langs/da.min.js deleted file mode 100644 index 47adf1a..0000000 --- a/BuildFeed/Scripts/trumbowyg/langs/da.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* =========================================================== - * da.js - * Danish translation for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Christian Pedersen - * Github : https://github.com/chripede - */ -jQuery.trumbowyg.langs.da={viewHTML:"Vis HTML",formatting:"Formatter",p:"Afsnit",blockquote:"Citat",code:"Kode",header:"Overskrift",bold:"Fed",italic:"Kursiv",strikethrough:"Gennemstreg",underline:"Understreg",strong:"Vigtig",em:"Fremhæv",del:"Slettet",unorderedList:"Uordnet liste",orderedList:"Ordnet liste",insertImage:"Indsæt billede",insertVideo:"Indsæt video",link:"Link",createLink:"Indsæt link",unlink:"Fjern link",justifyLeft:"Venstrestil",justifyCenter:"Centrer",justifyRight:"Højrestil",justifyFull:"Lige margener",horizontalRule:"Horisontal linie",fullscreen:"Fuld skærm",close:"Luk",submit:"Bekræft",reset:"Annuller",required:"Påkrævet",description:"Beskrivelse",title:"Titel",text:"Tekst"}; \ No newline at end of file diff --git a/BuildFeed/Scripts/trumbowyg/langs/fa.min.js b/BuildFeed/Scripts/trumbowyg/langs/fa.min.js deleted file mode 100644 index c3f9843..0000000 --- a/BuildFeed/Scripts/trumbowyg/langs/fa.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/* =========================================================== - * fa.js - * Persian translation for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Kiarash Soleimanzadeh - * Github : https://github.com/kiyarash - * Email : kiarash.s@hotmail.com - */ -jQuery.trumbowyg.langs.fa={viewHTML:"نمایش کد اچ تی ام ال",formatting:"قالب بندی",p:"پاراگراف",blockquote:"نقل قول",code:"کد",header:"سر تیتر",bold:"ضخیم",italic:"مورب",strikethrough:"میان خط دار",underline:"زیر خط دار",strong:"برجسته",em:"مورب",del:"حذف شده",unorderedList:"لیست نامرتب",orderedList:"لیست مرتب",insertImage:"درج تصویر",insertVideo:"درج ویدئو",link:"لینک",createLink:"درج لینک",unlink:"حذف لینک",justifyLeft:"تراز به چپ",justifyCenter:"تراز به وسط",justifyRight:"تراز به راست",justifyFull:"تراز به چپ و راست",horizontalRule:"درج خط افقی",fullscreen:"تمام صفحه",close:"بستن",submit:"تائید",reset:"انصراف",required:"اجباری",description:"توضیحات",title:"عنوان",text:"متن"}; \ No newline at end of file diff --git a/BuildFeed/Scripts/trumbowyg/langs/fr.min.js b/BuildFeed/Scripts/trumbowyg/langs/fr.min.js deleted file mode 100644 index 9a6062e..0000000 --- a/BuildFeed/Scripts/trumbowyg/langs/fr.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/* =========================================================== - * fr.js - * French translation for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Alexandre Demode (Alex-D) - * Twitter : @AlexandreDemode - * Website : alex-d.fr - */ -jQuery.trumbowyg.langs.fr={viewHTML:"Voir le HTML",undo:"Annuler",redo:"Refaire",formatting:"Format",p:"Paragraphe",blockquote:"Citation",code:"Code",header:"Titre",bold:"Gras",italic:"Italique",strikethrough:"Rayé",underline:"Souligné",strong:"Fort",em:"Emphase",del:"Supprimé",superscript:"Exposant",subscript:"Indice",unorderedList:"Liste à puces",orderedList:"Liste ordonnée",insertImage:"Insérer une image",insertVideo:"Insérer une video",link:"Lien",createLink:"Insérer un lien",unlink:"Supprimer le lien",justifyLeft:"Aligner à gauche",justifyCenter:"Centrer",justifyRight:"Aligner à droite",justifyFull:"Justifier",horizontalRule:"Insérer un séparateur horizontal",removeformat:"Supprimer formatage",fullscreen:"Plein écran",close:"Fermer",submit:"Valider",reset:"Annuler",required:"Obligatoire",description:"Description",title:"Titre",text:"Texte",target:"Cible"}; \ No newline at end of file diff --git a/BuildFeed/Scripts/trumbowyg/langs/zh_tw.min.js b/BuildFeed/Scripts/trumbowyg/langs/zh_tw.min.js deleted file mode 100644 index 0231b50..0000000 --- a/BuildFeed/Scripts/trumbowyg/langs/zh_tw.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/* =========================================================== - * zh_tw.js - * Traditional Chinese translation for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Peter Dave Hello (PeterDaveHello) - * Twitter : @PeterDaveHello - * Github : https://github.com/PeterDaveHello - */ -// jshint camelcase:false -jQuery.trumbowyg.langs.zh_tw={viewHTML:"原始碼",formatting:"格式",p:"段落",blockquote:"引用",code:"代碼",header:"標題",bold:"加粗",italic:"斜體",strikethrough:"刪除線",underline:"底線",strong:"加粗",em:"斜體",del:"刪除線",unorderedList:"無序列表",orderedList:"有序列表",insertImage:"插入圖片",insertVideo:"插入影片",link:"超連結",createLink:"插入連結",unlink:"取消連結",justifyLeft:"靠左對齊",justifyCenter:"置中對齊",justifyRight:"靠右對齊",justifyFull:"左右對齊",horizontalRule:"插入分隔線",fullscreen:"全螢幕",close:"關閉",submit:"確定",reset:"取消",required:"必需的",description:"描述",title:"標題",text:"文字"}; \ No newline at end of file diff --git a/BuildFeed/Scripts/trumbowyg/plugins/base64/trumbowyg.base64.min.js b/BuildFeed/Scripts/trumbowyg/plugins/base64/trumbowyg.base64.min.js deleted file mode 100644 index 778353a..0000000 --- a/BuildFeed/Scripts/trumbowyg/plugins/base64/trumbowyg.base64.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){"use strict";var a=function(){return"undefined"!=typeof FileReader},r=function(e){return/^data:image\/[a-z]?/i.test(e)};e.extend(!0,e.trumbowyg,{langs:{en:{base64:"Image as base64",file:"File",errFileReaderNotSupported:"FileReader is not supported by your browser.",errInvalidImage:"Invalid image file."},fr:{base64:"Image en base64",file:"Fichier"},cs:{base64:"Vložit obrázek",file:"Soubor"},zh_cn:{base64:"图片(Base64编码)",file:"文件"},nl:{errFileReaderNotSupported:"Uw browser ondersteunt deze functionaliteit niet.",errInvalidImage:"De gekozen afbeelding is ongeldig."},ru:{base64:"Изображение как код в base64",file:"Файл",errFileReaderNotSupported:"FileReader не поддерживается вашим браузером.",errInvalidImage:"Недопустимый файл изображения."},ja:{base64:"画像 (Base64形式)",file:"ファイル",errFileReaderNotSupported:"あなたのブラウザーはFileReaderをサポートしていません",errInvalidImage:"画像形式が正しくありません"}},plugins:{base64:{shouldInit:a,init:function(i){var t={isSupported:a,fn:function(){i.saveRange();var a,t=i.openModalInsert(i.lang.base64,{file:{type:"file",required:!0,attributes:{accept:"image/*"}},alt:{label:"description",value:i.getRangeText()}},function(n){var l=new FileReader;l.onloadend=function(a){r(a.target.result)?(i.execCmd("insertImage",l.result),e(['img[src="',l.result,'"]:not([alt])'].join(""),i.$box).attr("alt",n.alt),i.closeModal()):i.addErrorOnModalField(e("input[type=file]",t),i.lang.errInvalidImage)},l.readAsDataURL(a)});e("input[type=file]").on("change",function(e){a=e.target.files[0]})}};i.addBtnDef("base64",t)}}}})}(jQuery); \ No newline at end of file diff --git a/BuildFeed/Scripts/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.min.js b/BuildFeed/Scripts/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.min.js deleted file mode 100644 index 3636e5e..0000000 --- a/BuildFeed/Scripts/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(r){"use strict";function e(r){for(var e="",t=r.length-1;t>=0;t-=1)e+=r.charAt(t);return e}function t(r){var e=r;return e=e.replace(/<[^> ]*/g,function(r){return r.toLowerCase()}),e=e.replace(/<[^>]*>/g,function(r){return r=r.replace(/ [^=]+=/g,function(r){return r.toLowerCase()})}),e=e.replace(/<[^>]*>/g,function(r){return r=r.replace(/( [^=]+=)([^"][^ >]*)/g,'$1"$2"')})}function n(r,n){var a,c,i,l="",s="";for(a=0;n.charAt(a)===r.charAt(a);a+=1)l+=n.charAt(a);for(var u=a;u>=0;u-=1){if("<"===r.charAt(u)){a=u,l=r.substring(0,a);break}if(">"===r.charAt(u))break}for(n=e(n),r=e(r),c=0;n.charAt(c)===r.charAt(c);c+=1)s+=n.charAt(c);for(var g=c;g>=0;g-=1){if(">"===r.charAt(g)){c=g,s=r.substring(0,c);break}if("<"===r.charAt(g))break}if(s=e(s),a===n.length-c)return!1;for(n=e(n),i=n.substring(a,n.length-c),i=t(i),i=i.replace(/)/g,")/g,")/g,")/g,"\s*/g,""),i=i.replace(/ /gi," "),i=i.replace(/ <\//gi,"]*>/g,function(r){return r=r.replace(/ ([^=]+)="[^"]*"/g,function(r,e){return-1!==["alt","href","src","title"].indexOf(e)?r:""})}),i=i.replace(/<\?xml[^>]*>/g,""),i=i.replace(/<[^ >]+:[^>]*>/g,""),i=i.replace(/<\/[^ >]+:[^>]*>/g,""),i=i.replace(/<(div|span|style|meta|link){1}.*?>/gi,""),n=l+i+s}r.extend(!0,r.trumbowyg,{plugins:{cleanPaste:{init:function(r){r.pasteHandlers.push(function(){try{var e=r.$ed.html();setTimeout(function(){var t=r.$ed.html();t=n(e,t),r.$ed.html(t)},0)}catch(t){}})}}}})}(jQuery); \ No newline at end of file diff --git a/BuildFeed/Scripts/trumbowyg/plugins/colors/trumbowyg.colors.min.js b/BuildFeed/Scripts/trumbowyg/plugins/colors/trumbowyg.colors.min.js deleted file mode 100644 index 0bffe12..0000000 --- a/BuildFeed/Scripts/trumbowyg/plugins/colors/trumbowyg.colors.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(o){"use strict";function r(o){return("0"+parseInt(o).toString(16)).slice(-2)}function e(o){return-1===o.search("rgb")?o.replace("#",""):"rgba(0, 0, 0, 0)"===o?"transparent":(o=o.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/),r(o[1])+r(o[2])+r(o[3]))}function f(o,r){var f=[];if(!o.style)return f;if(""!==o.style.backgroundColor){var c=e(o.style.backgroundColor);r.o.plugins.colors.colorList.indexOf(c)>=0?f.push("backColor"+c):f.push("backColorFree")}var a;return""!==o.style.color?a=e(o.style.color):o.hasAttribute("color")&&(a=e(o.getAttribute("color"))),a&&(r.o.plugins.colors.colorList.indexOf(a)>=0?f.push("foreColor"+a):f.push("foreColorFree")),f}function c(r,e){var f=[];o.each(e.o.plugins.colors.colorList,function(o,c){var a=r+c,d={fn:r,forceCss:!0,param:"#"+c,style:"background-color: #"+c+";"};e.addBtnDef(a,d),f.push(a)});var c=r+"Remove",a={fn:"removeFormat",param:r,style:"background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);"};e.addBtnDef(c,a),f.push(c);var d=r+"Free",l={fn:function(){e.openModalInsert(e.lang[r],{color:{label:r,value:"#FFFFFF"}},function(o){return e.execCmd(r,o.color),!0})},text:"#",style:"text-indent: 0;line-height: 20px;padding: 0 5px;"};return e.addBtnDef(d,l),f.push(d),f}o.extend(!0,o.trumbowyg,{langs:{cs:{foreColor:"Barva textu",backColor:"Barva pozadí"},en:{foreColor:"Text color",backColor:"Background color"},fr:{foreColor:"Couleur du texte",backColor:"Couleur de fond"},sk:{foreColor:"Farba textu",backColor:"Farba pozadia"},zh_cn:{foreColor:"文字颜色",backColor:"背景颜色"},ru:{foreColor:"Цвет текста",backColor:"Цвет выделения текста"},ja:{foreColor:"文字色",backColor:"背景色"}}});var a={colorList:["ffffff","000000","eeece1","1f497d","4f81bd","c0504d","9bbb59","8064a2","4bacc6","f79646","ffff00","f2f2f2","7f7f7f","ddd9c3","c6d9f0","dbe5f1","f2dcdb","ebf1dd","e5e0ec","dbeef3","fdeada","fff2ca","d8d8d8","595959","c4bd97","8db3e2","b8cce4","e5b9b7","d7e3bc","ccc1d9","b7dde8","fbd5b5","ffe694","bfbfbf","3f3f3f","938953","548dd4","95b3d7","d99694","c3d69b","b2a2c7","b7dde8","fac08f","f2c314","a5a5a5","262626","494429","17365d","366092","953734","76923c","5f497a","92cddc","e36c09","c09100","7f7f7f","0c0c0c","1d1b10","0f243e","244061","632423","4f6128","3f3151","31859b","974806","7f6000"]};o.extend(!0,o.trumbowyg,{plugins:{color:{init:function(o){o.o.plugins.colors=o.o.plugins.colors||a;var r={dropdown:c("foreColor",o)},e={dropdown:c("backColor",o)};o.addBtnDef("foreColor",r),o.addBtnDef("backColor",e)},tagHandler:f}}})}(jQuery); \ No newline at end of file diff --git a/BuildFeed/Scripts/trumbowyg/plugins/emoji/trumbowyg.emoji.min.js b/BuildFeed/Scripts/trumbowyg/plugins/emoji/trumbowyg.emoji.min.js deleted file mode 100644 index f8adf11..0000000 --- a/BuildFeed/Scripts/trumbowyg/plugins/emoji/trumbowyg.emoji.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){"use strict";function a(a){var o=[];return e.each(a.o.plugins.emoji.emojiList,function(r,i){if(e.isArray(i)){var n=i[0],t=i[1],_=''+n+'',s="emoji-"+n.replace(/:/g,""),l={hasIcon:!1,text:_,fn:function(){return a.execCmd("insertImage",t,!1,!0),!0}};a.addBtnDef(s,l),o.push(s)}else{var c=i.replace(/:/g,""),u="emoji-"+c,h={text:i,fn:function(){return a.execCmd("insertText",i),!0}};a.addBtnDef(u,h),o.push(u)}}),o}var o={emojiList:[":bowtie:",":smile:",":laughing:",":blush:",":smiley:",":relaxed:",":smirk:",":heart_eyes:",":kissing_heart:",":kissing_closed_eyes:",":flushed:",":relieved:",":satisfied:",":grin:",":wink:",":stuck_out_tongue_winking_eye:",":stuck_out_tongue_closed_eyes:",":grinning:",":kissing:",":kissing_smiling_eyes:",":stuck_out_tongue:",":sleeping:",":worried:",":frowning:",":anguished:",":open_mouth:",":grimacing:",":confused:",":hushed:",":expressionless:",":unamused:",":sweat_smile:",":sweat:",":disappointed_relieved:",":weary:",":pensive:",":disappointed:",":confounded:",":fearful:",":cold_sweat:",":persevere:",":cry:",":sob:",":joy:",":astonished:",":scream:",":neckbeard:",":tired_face:",":angry:",":rage:",":triumph:",":sleepy:",":yum:",":mask:",":sunglasses:",":dizzy_face:",":imp:",":smiling_imp:",":neutral_face:",":no_mouth:",":innocent:",":alien:",":yellow_heart:",":blue_heart:",":purple_heart:",":heart:",":green_heart:",":broken_heart:",":heartbeat:",":heartpulse:",":two_hearts:",":revolving_hearts:",":cupid:",":sparkling_heart:",":sparkles:",":star:",":star2:",":dizzy:",":boom:",":collision:",":anger:",":exclamation:",":question:",":grey_exclamation:",":grey_question:",":zzz:",":dash:",":sweat_drops:",":notes:",":musical_note:",":fire:",":hankey:",":poop:",":shit:",":+1:",":thumbsup:",":-1:",":thumbsdown:",":ok_hand:",":punch:",":facepunch:",":fist:",":v:",":wave:",":hand:",":raised_hand:",":open_hands:",":point_up:",":point_down:",":point_left:",":point_right:",":raised_hands:",":pray:",":point_up_2:",":clap:",":muscle:",":metal:",":fu:",":runner:",":running:",":couple:",":family:",":two_men_holding_hands:",":two_women_holding_hands:",":dancer:",":dancers:",":ok_woman:",":no_good:",":information_desk_person:",":raising_hand:",":bride_with_veil:",":person_with_pouting_face:",":person_frowning:",":bow:",":couplekiss:",":couple_with_heart:",":massage:",":haircut:",":nail_care:",":boy:",":girl:",":woman:",":man:",":baby:",":older_woman:",":older_man:",":person_with_blond_hair:",":man_with_gua_pi_mao:",":man_with_turban:",":construction_worker:",":cop:",":angel:",":princess:",":smiley_cat:",":smile_cat:",":heart_eyes_cat:",":kissing_cat:",":smirk_cat:",":scream_cat:",":crying_cat_face:",":joy_cat:",":pouting_cat:",":japanese_ogre:",":japanese_goblin:",":see_no_evil:",":hear_no_evil:",":speak_no_evil:",":guardsman:",":skull:",":feet:",":lips:",":kiss:",":droplet:",":ear:",":eyes:",":nose:",":tongue:",":love_letter:",":bust_in_silhouette:",":busts_in_silhouette:",":speech_balloon:",":thought_balloon:",":feelsgood:",":finnadie:",":goberserk:",":godmode:",":hurtrealbad:",":rage1:",":rage2:",":rage3:",":rage4:",":suspect:",":trollface:",":sunny:",":umbrella:",":cloud:",":snowflake:",":snowman:",":zap:",":cyclone:",":foggy:",":ocean:",":cat:",":dog:",":mouse:",":hamster:",":rabbit:",":wolf:",":frog:",":tiger:",":koala:",":bear:",":pig:",":pig_nose:",":cow:",":boar:",":monkey_face:",":monkey:",":horse:",":racehorse:",":camel:",":sheep:",":elephant:",":panda_face:",":snake:",":bird:",":baby_chick:",":hatched_chick:",":hatching_chick:",":chicken:",":penguin:",":turtle:",":bug:",":honeybee:",":ant:",":beetle:",":snail:",":octopus:",":tropical_fish:",":fish:",":whale:",":whale2:",":dolphin:",":cow2:",":ram:",":rat:",":water_buffalo:",":tiger2:",":rabbit2:",":dragon:",":goat:",":rooster:",":dog2:",":pig2:",":mouse2:",":ox:",":dragon_face:",":blowfish:",":crocodile:",":dromedary_camel:",":leopard:",":cat2:",":poodle:",":paw_prints:",":bouquet:",":cherry_blossom:",":tulip:",":four_leaf_clover:",":rose:",":sunflower:",":hibiscus:",":maple_leaf:",":leaves:",":fallen_leaf:",":herb:",":mushroom:",":cactus:",":palm_tree:",":evergreen_tree:",":deciduous_tree:",":chestnut:",":seedling:",":blossom:",":ear_of_rice:",":shell:",":globe_with_meridians:",":sun_with_face:",":full_moon_with_face:",":new_moon_with_face:",":new_moon:",":waxing_crescent_moon:",":first_quarter_moon:",":waxing_gibbous_moon:",":full_moon:",":waning_gibbous_moon:",":last_quarter_moon:",":waning_crescent_moon:",":last_quarter_moon_with_face:",":first_quarter_moon_with_face:",":crescent_moon:",":earth_africa:",":earth_americas:",":earth_asia:",":volcano:",":milky_way:",":partly_sunny:",":octocat:",":squirrel:",":bamboo:",":gift_heart:",":dolls:",":school_satchel:",":mortar_board:",":flags:",":fireworks:",":sparkler:",":wind_chime:",":rice_scene:",":jack_o_lantern:",":ghost:",":santa:",":christmas_tree:",":gift:",":bell:",":no_bell:",":tanabata_tree:",":tada:",":confetti_ball:",":balloon:",":crystal_ball:",":cd:",":dvd:",":floppy_disk:",":camera:",":video_camera:",":movie_camera:",":computer:",":tv:",":iphone:",":phone:",":telephone:",":telephone_receiver:",":pager:",":fax:",":minidisc:",":vhs:",":sound:",":speaker:",":mute:",":loudspeaker:",":mega:",":hourglass:",":hourglass_flowing_sand:",":alarm_clock:",":watch:",":radio:",":satellite:",":loop:",":mag:",":mag_right:",":unlock:",":lock:",":lock_with_ink_pen:",":closed_lock_with_key:",":key:",":bulb:",":flashlight:",":high_brightness:",":low_brightness:",":electric_plug:",":battery:",":calling:",":email:",":mailbox:",":postbox:",":bath:",":bathtub:",":shower:",":toilet:",":wrench:",":nut_and_bolt:",":hammer:",":seat:",":moneybag:",":yen:",":dollar:",":pound:",":euro:",":credit_card:",":money_with_wings:",":e-mail:",":inbox_tray:",":outbox_tray:",":envelope:",":incoming_envelope:",":postal_horn:",":mailbox_closed:",":mailbox_with_mail:",":mailbox_with_no_mail:",":package:",":door:",":smoking:",":bomb:",":gun:",":hocho:",":pill:",":syringe:",":page_facing_up:",":page_with_curl:",":bookmark_tabs:",":bar_chart:",":chart_with_upwards_trend:",":chart_with_downwards_trend:",":scroll:",":clipboard:",":calendar:",":date:",":card_index:",":file_folder:",":open_file_folder:",":scissors:",":pushpin:",":paperclip:",":black_nib:",":pencil2:",":straight_ruler:",":triangular_ruler:",":closed_book:",":green_book:",":blue_book:",":orange_book:",":notebook:",":notebook_with_decorative_cover:",":ledger:",":books:",":bookmark:",":name_badge:",":microscope:",":telescope:",":newspaper:",":football:",":basketball:",":soccer:",":baseball:",":tennis:",":8ball:",":rugby_football:",":bowling:",":golf:",":mountain_bicyclist:",":bicyclist:",":horse_racing:",":snowboarder:",":swimmer:",":surfer:",":ski:",":spades:",":hearts:",":clubs:",":diamonds:",":gem:",":ring:",":trophy:",":musical_score:",":musical_keyboard:",":violin:",":space_invader:",":video_game:",":black_joker:",":flower_playing_cards:",":game_die:",":dart:",":mahjong:",":clapper:",":memo:",":pencil:",":book:",":art:",":microphone:",":headphones:",":trumpet:",":saxophone:",":guitar:",":shoe:",":sandal:",":high_heel:",":lipstick:",":boot:",":shirt:",":tshirt:",":necktie:",":womans_clothes:",":dress:",":running_shirt_with_sash:",":jeans:",":kimono:",":bikini:",":ribbon:",":tophat:",":crown:",":womans_hat:",":mans_shoe:",":closed_umbrella:",":briefcase:",":handbag:",":pouch:",":purse:",":eyeglasses:",":fishing_pole_and_fish:",":coffee:",":tea:",":sake:",":baby_bottle:",":beer:",":beers:",":cocktail:",":tropical_drink:",":wine_glass:",":fork_and_knife:",":pizza:",":hamburger:",":fries:",":poultry_leg:",":meat_on_bone:",":spaghetti:",":curry:",":fried_shrimp:",":bento:",":sushi:",":fish_cake:",":rice_ball:",":rice_cracker:",":rice:",":ramen:",":stew:",":oden:",":dango:",":egg:",":bread:",":doughnut:",":custard:",":icecream:",":ice_cream:",":shaved_ice:",":birthday:",":cake:",":cookie:",":chocolate_bar:",":candy:",":lollipop:",":honey_pot:",":apple:",":green_apple:",":tangerine:",":lemon:",":cherries:",":grapes:",":watermelon:",":strawberry:",":peach:",":melon:",":banana:",":pear:",":pineapple:",":sweet_potato:",":eggplant:",":tomato:",":corn:",":house:",":house_with_garden:",":school:",":office:",":post_office:",":hospital:",":bank:",":convenience_store:",":love_hotel:",":hotel:",":wedding:",":church:",":department_store:",":european_post_office:",":city_sunrise:",":city_sunset:",":japanese_castle:",":european_castle:",":tent:",":factory:",":tokyo_tower:",":japan:",":mount_fuji:",":sunrise_over_mountains:",":sunrise:",":stars:",":statue_of_liberty:",":bridge_at_night:",":carousel_horse:",":rainbow:",":ferris_wheel:",":fountain:",":roller_coaster:",":ship:",":speedboat:",":boat:",":sailboat:",":rowboat:",":anchor:",":rocket:",":airplane:",":helicopter:",":steam_locomotive:",":tram:",":mountain_railway:",":bike:",":aerial_tramway:",":suspension_railway:",":mountain_cableway:",":tractor:",":blue_car:",":oncoming_automobile:",":car:",":red_car:",":taxi:",":oncoming_taxi:",":articulated_lorry:",":bus:",":oncoming_bus:",":rotating_light:",":police_car:",":oncoming_police_car:",":fire_engine:",":ambulance:",":minibus:",":truck:",":train:",":station:",":train2:",":bullettrain_front:",":bullettrain_side:",":light_rail:",":monorail:",":railway_car:",":trolleybus:",":ticket:",":fuelpump:",":vertical_traffic_light:",":traffic_light:",":warning:",":construction:",":beginner:",":atm:",":slot_machine:",":busstop:",":barber:",":hotsprings:",":checkered_flag:",":crossed_flags:",":izakaya_lantern:",":moyai:",":circus_tent:",":performing_arts:",":round_pushpin:",":triangular_flag_on_post:",":jp:",":kr:",":cn:",":us:",":fr:",":es:",":it:",":ru:",":gb:",":uk:",":de:",":one:",":two:",":three:",":four:",":five:",":six:",":seven:",":eight:",":nine:",":keycap_ten:",":1234:",":zero:",":hash:",":symbols:",":arrow_backward:",":arrow_down:",":arrow_forward:",":arrow_left:",":capital_abcd:",":abcd:",":abc:",":arrow_lower_left:",":arrow_lower_right:",":arrow_right:",":arrow_up:",":arrow_upper_left:",":arrow_upper_right:",":arrow_double_down:",":arrow_double_up:",":arrow_down_small:",":arrow_heading_down:",":arrow_heading_up:",":leftwards_arrow_with_hook:",":arrow_right_hook:",":left_right_arrow:",":arrow_up_down:",":arrow_up_small:",":arrows_clockwise:",":arrows_counterclockwise:",":rewind:",":fast_forward:",":information_source:",":ok:",":twisted_rightwards_arrows:",":repeat:",":repeat_one:",":new:",":top:",":up:",":cool:",":free:",":ng:",":cinema:",":koko:",":signal_strength:",":u5272:",":u5408:",":u55b6:",":u6307:",":u6708:",":u6709:",":u6e80:",":u7121:",":u7533:",":u7a7a:",":u7981:",":sa:",":restroom:",":mens:",":womens:",":baby_symbol:",":no_smoking:",":parking:",":wheelchair:",":metro:",":baggage_claim:",":accept:",":wc:",":potable_water:",":put_litter_in_its_place:",":secret:",":congratulations:",":m:",":passport_control:",":left_luggage:",":customs:",":ideograph_advantage:",":cl:",":sos:",":id:",":no_entry_sign:",":underage:",":no_mobile_phones:",":do_not_litter:",":non-potable_water:",":no_bicycles:",":no_pedestrians:",":children_crossing:",":no_entry:",":eight_spoked_asterisk:",":sparkle:",":eight_pointed_black_star:",":heart_decoration:",":vs:",":vibration_mode:",":mobile_phone_off:",":chart:",":currency_exchange:",":aries:",":taurus:",":gemini:",":cancer:",":leo:",":virgo:",":libra:",":scorpius:",":sagittarius:",":capricorn:",":aquarius:",":pisces:",":ophiuchus:",":six_pointed_star:",":negative_squared_cross_mark:",":a:",":b:",":ab:",":o2:",":diamond_shape_with_a_dot_inside:",":recycle:",":end:",":back:",":on:",":soon:",":clock1:",":clock130:",":clock10:",":clock1030:",":clock11:",":clock1130:",":clock12:",":clock1230:",":clock2:",":clock230:",":clock3:",":clock330:",":clock4:",":clock430:",":clock5:",":clock530:",":clock6:",":clock630:",":clock7:",":clock730:",":clock8:",":clock830:",":clock9:",":clock930:",":heavy_dollar_sign:",":copyright:",":registered:",":tm:",":x:",":heavy_exclamation_mark:",":bangbang:",":interrobang:",":o:",":heavy_multiplication_x:",":heavy_plus_sign:",":heavy_minus_sign:",":heavy_division_sign:",":white_flower:",":100:",":heavy_check_mark:",":ballot_box_with_check:",":radio_button:",":link:",":curly_loop:",":wavy_dash:",":part_alternation_mark:",":trident:",":black_small_square:",":white_small_square:",":black_medium_small_square:",":white_medium_small_square:",":black_medium_square:",":white_medium_square:",":white_large_square:",":white_check_mark:",":black_square_button:",":white_square_button:",":black_circle:",":white_circle:",":red_circle:",":large_blue_circle:",":large_blue_diamond:",":large_orange_diamond:",":small_blue_diamond:",":small_orange_diamond:",":small_red_triangle:",":small_red_triangle_down:",":shipit:"]};e.extend(!0,e.trumbowyg,{langs:{en:{emoji:"Add an emoji"},fr:{emoji:"Ajouter un emoji"},zh_cn:{emoji:"添加表情"},ru:{emoji:"Вставить emoji"},ja:{emoji:"絵文字の挿入"}},plugins:{emoji:{init:function(e){e.o.plugins.emoji=e.o.plugins.emoji||o;var r={dropdown:a(e)};e.addBtnDef("emoji",r)}}}})}(jQuery); \ No newline at end of file diff --git a/BuildFeed/Scripts/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.min.js b/BuildFeed/Scripts/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.min.js deleted file mode 100644 index e2d70ee..0000000 --- a/BuildFeed/Scripts/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){"use strict";var r={src:{label:"URL",required:!0},autoplay:{label:"AutoPlay",required:!1,type:"checkbox"},muted:{label:"Muted",required:!1,type:"checkbox"},preload:{label:"preload options",required:!1}};e.extend(!0,e.trumbowyg,{langs:{en:{insertAudio:"Insert Audio"},ru:{insertAudio:"Вставить аудио"},ja:{insertAudio:"音声の挿入"}},plugins:{insertAudio:{init:function(t){var n={fn:function(){var n=function(r){var n="