diff --git a/.sandstorm/build.sh b/.sandstorm/build.sh index a72ac8cb24..93daf1ba86 100755 --- a/.sandstorm/build.sh +++ b/.sandstorm/build.sh @@ -1,6 +1,6 @@ #!/bin/bash # Checks if there's a composer.json, and if so, installs/runs composer. -# Only runs when we connect the app to sandstorm (so once). +# This script only runs once, when the app connects to sandstorm. set -euo pipefail diff --git a/.sandstorm/changelog.md b/.sandstorm/changelog.md new file mode 100644 index 0000000000..58249de976 --- /dev/null +++ b/.sandstorm/changelog.md @@ -0,0 +1,3 @@ +# 3.4.3 + +* Initial release on Sandstorm.io \ No newline at end of file diff --git a/.sandstorm/description.md b/.sandstorm/description.md new file mode 100644 index 0000000000..e9f6874f3f --- /dev/null +++ b/.sandstorm/description.md @@ -0,0 +1,3 @@ +"Firefly III" is a financial manager. It can help you keep track of expenses, income, budgets and everything in between. It even supports credit cards, shared household accounts and savings accounts! It’s pretty fancy. You should use it to save and organise money. + +Firefly works on the principle that if you know where you’re money is going, you can stop it from going there. \ No newline at end of file diff --git a/.sandstorm/launcher.sh b/.sandstorm/launcher.sh index dba084dfa2..790f4e9711 100755 --- a/.sandstorm/launcher.sh +++ b/.sandstorm/launcher.sh @@ -54,10 +54,6 @@ echo "Installing database.." echo "CREATE DATABASE IF NOT EXISTS firefly; GRANT ALL on firefly.* TO 'firefly'@'localhost' IDENTIFIED BY 'firefly';" | mysql -uroot echo "Done!" -#echo "Generate key..." -#php /opt/app/artisan key:generate -#echo "Done!" - echo "Migrating..." php /opt/app/artisan migrate:refresh --seed --force echo "Done!" diff --git a/.sandstorm/pgp-keyring b/.sandstorm/pgp-keyring new file mode 100644 index 0000000000..b0dec3c169 Binary files /dev/null and b/.sandstorm/pgp-keyring differ diff --git a/.sandstorm/pgp-signature b/.sandstorm/pgp-signature new file mode 100644 index 0000000000..82e5fc8a52 Binary files /dev/null and b/.sandstorm/pgp-signature differ diff --git a/.sandstorm/sandstorm-files.list b/.sandstorm/sandstorm-files.list index 5f1eacded3..7d8d51d516 100644 --- a/.sandstorm/sandstorm-files.list +++ b/.sandstorm/sandstorm-files.list @@ -25,6 +25,7 @@ etc/hosts.allow etc/hosts.deny etc/inputrc etc/ld.so.cache +etc/locale.alias etc/localtime etc/mysql/conf.d etc/mysql/conf.d/mysqld_safe_syslog.cnf @@ -229,9 +230,21 @@ opt/app/app/Console/Commands/UseEncryption.php opt/app/app/Console/Commands/VerifyDatabase.php opt/app/app/Console/Kernel.php opt/app/app/Exceptions/Handler.php +opt/app/app/Generator/Chart/Basic/ChartJsGenerator.php +opt/app/app/Generator/Chart/Basic/GeneratorInterface.php +opt/app/app/Helpers/Collector/JournalCollector.php +opt/app/app/Helpers/Collector/JournalCollectorInterface.php opt/app/app/Http/Controllers/Auth/LoginController.php +opt/app/app/Http/Controllers/BudgetController.php +opt/app/app/Http/Controllers/Chart/AccountController.php +opt/app/app/Http/Controllers/Chart/BudgetController.php +opt/app/app/Http/Controllers/Chart/CategoryController.php opt/app/app/Http/Controllers/Controller.php opt/app/app/Http/Controllers/HomeController.php +opt/app/app/Http/Controllers/JavascriptController.php +opt/app/app/Http/Controllers/JsonController.php +opt/app/app/Http/Controllers/NewUserController.php +opt/app/app/Http/Controllers/ProfileController.php opt/app/app/Http/Kernel.php opt/app/app/Http/Middleware/Authenticate.php opt/app/app/Http/Middleware/AuthenticateTwoFactor.php @@ -239,15 +252,27 @@ opt/app/app/Http/Middleware/Binder.php opt/app/app/Http/Middleware/EncryptCookies.php opt/app/app/Http/Middleware/Range.php opt/app/app/Http/Middleware/RedirectIfAuthenticated.php +opt/app/app/Http/Middleware/Sandstorm.php opt/app/app/Http/Middleware/VerifyCsrfToken.php +opt/app/app/Http/Requests/NewUserFormRequest.php +opt/app/app/Http/Requests/Request.php opt/app/app/Http/breadcrumbs.php opt/app/app/Jobs/Job.php opt/app/app/Jobs/MailError.php opt/app/app/Models/Account.php +opt/app/app/Models/AccountMeta.php opt/app/app/Models/AccountType.php +opt/app/app/Models/AvailableBudget.php +opt/app/app/Models/Bill.php +opt/app/app/Models/Budget.php +opt/app/app/Models/BudgetLimit.php +opt/app/app/Models/Category.php opt/app/app/Models/Configuration.php opt/app/app/Models/PiggyBank.php +opt/app/app/Models/Preference.php opt/app/app/Models/Role.php +opt/app/app/Models/Tag.php +opt/app/app/Models/Transaction.php opt/app/app/Models/TransactionCurrency.php opt/app/app/Models/TransactionJournal.php opt/app/app/Models/TransactionType.php @@ -270,11 +295,34 @@ opt/app/app/Providers/RuleGroupServiceProvider.php opt/app/app/Providers/RuleServiceProvider.php opt/app/app/Providers/SearchServiceProvider.php opt/app/app/Providers/TagServiceProvider.php +opt/app/app/Repositories/Account/AccountRepository.php opt/app/app/Repositories/Account/AccountRepositoryInterface.php +opt/app/app/Repositories/Account/AccountTasker.php +opt/app/app/Repositories/Account/AccountTaskerInterface.php +opt/app/app/Repositories/Bill/BillRepository.php +opt/app/app/Repositories/Bill/BillRepositoryInterface.php +opt/app/app/Repositories/Budget/BudgetRepository.php +opt/app/app/Repositories/Budget/BudgetRepositoryInterface.php +opt/app/app/Repositories/Category/CategoryRepository.php +opt/app/app/Repositories/Category/CategoryRepositoryInterface.php +opt/app/app/Repositories/Journal/JournalRepository.php +opt/app/app/Repositories/Journal/JournalRepositoryInterface.php +opt/app/app/Support/Amount.php +opt/app/app/Support/CacheProperties.php opt/app/app/Support/Domain.php +opt/app/app/Support/ExpandedForm.php +opt/app/app/Support/Facades/Amount.php +opt/app/app/Support/Facades/ExpandedForm.php opt/app/app/Support/Facades/FireflyConfig.php +opt/app/app/Support/Facades/Navigation.php +opt/app/app/Support/Facades/Preferences.php +opt/app/app/Support/Facades/Steam.php opt/app/app/Support/FireflyConfig.php +opt/app/app/Support/Models/TagSupport.php opt/app/app/Support/Models/TransactionJournalSupport.php +opt/app/app/Support/Navigation.php +opt/app/app/Support/Preferences.php +opt/app/app/Support/Steam.php opt/app/app/Support/Twig/General.php opt/app/app/Support/Twig/Journal.php opt/app/app/Support/Twig/PiggyBank.php @@ -320,24 +368,62 @@ opt/app/database/seeds/DatabaseSeeder.php opt/app/database/seeds/PermissionSeeder.php opt/app/database/seeds/TransactionCurrencySeeder.php opt/app/database/seeds/TransactionTypeSeeder.php +opt/app/public/css/bootstrap-tour.min.css +opt/app/public/css/daterangepicker.css opt/app/public/css/firefly.css opt/app/public/index.php +opt/app/public/js/ff/budgets/index.js +opt/app/public/js/ff/charts.defaults.js +opt/app/public/js/ff/charts.js +opt/app/public/js/ff/firefly.js opt/app/public/js/ff/guest.js +opt/app/public/js/ff/help.js +opt/app/public/js/ff/index.js +opt/app/public/js/lib/Chart.bundle.min.js +opt/app/public/js/lib/accounting.min.js +opt/app/public/js/lib/bootstrap-tour.min.js +opt/app/public/js/lib/daterangepicker.js opt/app/public/js/lib/jquery-3.1.1.min.js +opt/app/public/js/lib/moment.min.js opt/app/public/lib/adminlte/css/AdminLTE.min.css +opt/app/public/lib/adminlte/css/skins/skin-blue-light.min.css +opt/app/public/lib/adminlte/js/app.min.js opt/app/public/lib/bootstrap/css/bootstrap.min.css opt/app/public/lib/bootstrap/js/bootstrap.min.js opt/app/public/lib/font-awesome/css/font-awesome.min.css +opt/app/public/lib/font-awesome/fonts/fontawesome-webfont.woff2 +opt/app/resources/lang/en_US/breadcrumbs.php opt/app/resources/lang/en_US/config.php +opt/app/resources/lang/en_US/firefly.php +opt/app/resources/lang/en_US/form.php +opt/app/resources/lang/en_US/help.php +opt/app/resources/lang/en_US/validation.php opt/app/resources/views/auth/login.twig +opt/app/resources/views/budgets/index.twig opt/app/resources/views/emails/error-html.twig opt/app/resources/views/emails/error-text.twig opt/app/resources/views/emails/footer-html.twig opt/app/resources/views/emails/footer-text.twig opt/app/resources/views/emails/header-html.twig opt/app/resources/views/emails/header-text.twig +opt/app/resources/views/form/balance.twig +opt/app/resources/views/form/feedback.twig +opt/app/resources/views/form/help.twig +opt/app/resources/views/form/text.twig +opt/app/resources/views/index.twig +opt/app/resources/views/javascript/variables.twig +opt/app/resources/views/json/tour.twig +opt/app/resources/views/layout/default.twig opt/app/resources/views/layout/guest.twig +opt/app/resources/views/list/journals-tiny-tasker.twig +opt/app/resources/views/new-user/index.twig +opt/app/resources/views/partials/boxes.twig +opt/app/resources/views/partials/control-bar.twig opt/app/resources/views/partials/favicons.twig +opt/app/resources/views/partials/flashes.twig +opt/app/resources/views/partials/menu-sidebar.twig +opt/app/resources/views/partials/page-header.twig +opt/app/resources/views/profile/index.twig opt/app/routes/api.php opt/app/routes/console.php opt/app/routes/web.php @@ -353,6 +439,7 @@ opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Generator.php opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Manager.php opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/ServiceProvider.php opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/View.php +opt/app/vendor/davejamesmiller/laravel-breadcrumbs/views/bootstrap3.blade.php opt/app/vendor/doctrine/common/lib/Doctrine/Common/EventManager.php opt/app/vendor/doctrine/dbal/lib/Doctrine/DBAL/Configuration.php opt/app/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php @@ -416,6 +503,8 @@ opt/app/vendor/laravel/framework/src/Illuminate/Auth/Console/ClearResetsCommand. opt/app/vendor/laravel/framework/src/Illuminate/Auth/Console/MakeAuthCommand.php opt/app/vendor/laravel/framework/src/Illuminate/Auth/CreatesUserProviders.php opt/app/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php +opt/app/vendor/laravel/framework/src/Illuminate/Auth/Events/Authenticated.php +opt/app/vendor/laravel/framework/src/Illuminate/Auth/Events/Login.php opt/app/vendor/laravel/framework/src/Illuminate/Auth/GuardHelpers.php opt/app/vendor/laravel/framework/src/Illuminate/Auth/Passwords/CanResetPassword.php opt/app/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordResetServiceProvider.php @@ -428,6 +517,7 @@ opt/app/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php opt/app/vendor/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php opt/app/vendor/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php opt/app/vendor/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php +opt/app/vendor/laravel/framework/src/Illuminate/Cache/Events/CacheHit.php opt/app/vendor/laravel/framework/src/Illuminate/Cache/Events/CacheMissed.php opt/app/vendor/laravel/framework/src/Illuminate/Cache/Events/KeyForgotten.php opt/app/vendor/laravel/framework/src/Illuminate/Cache/Events/KeyWritten.php @@ -488,6 +578,7 @@ opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Queue/QueueableCollect opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Queue/QueueableEntity.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Queue/ShouldQueue.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Routing/Registrar.php +opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Routing/ResponseFactory.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Routing/UrlGenerator.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Routing/UrlRoutable.php opt/app/vendor/laravel/framework/src/Illuminate/Contracts/Support/Arrayable.php @@ -529,6 +620,11 @@ opt/app/vendor/laravel/framework/src/Illuminate/Database/DetectsLostConnections. opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php +opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php +opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php +opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php +opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php +opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Scope.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php @@ -542,8 +638,10 @@ opt/app/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationRep opt/app/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php opt/app/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php +opt/app/vendor/laravel/framework/src/Illuminate/Database/Query/Expression.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php +opt/app/vendor/laravel/framework/src/Illuminate/Database/Query/JoinClause.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php opt/app/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php opt/app/vendor/laravel/framework/src/Illuminate/Database/QueryException.php @@ -625,6 +723,7 @@ opt/app/vendor/laravel/framework/src/Illuminate/Foundation/Validation/ValidatesR opt/app/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php opt/app/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php opt/app/vendor/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php +opt/app/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php opt/app/vendor/laravel/framework/src/Illuminate/Http/RedirectResponse.php opt/app/vendor/laravel/framework/src/Illuminate/Http/Request.php opt/app/vendor/laravel/framework/src/Illuminate/Http/Response.php @@ -686,6 +785,7 @@ opt/app/vendor/laravel/framework/src/Illuminate/Routing/Matching/ValidatorInterf opt/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php opt/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php opt/app/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php +opt/app/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php opt/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php opt/app/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php opt/app/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php @@ -701,26 +801,33 @@ opt/app/vendor/laravel/framework/src/Illuminate/Session/SessionInterface.php opt/app/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php opt/app/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php opt/app/vendor/laravel/framework/src/Illuminate/Session/Store.php +opt/app/vendor/laravel/framework/src/Illuminate/Session/TokenMismatchException.php opt/app/vendor/laravel/framework/src/Illuminate/Support/AggregateServiceProvider.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Arr.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Collection.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Composer.php +opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php +opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Event.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Gate.php +opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Input.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php +opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php +opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Validator.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Fluent.php +opt/app/vendor/laravel/framework/src/Illuminate/Support/HtmlString.php opt/app/vendor/laravel/framework/src/Illuminate/Support/Manager.php opt/app/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php opt/app/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php @@ -738,8 +845,11 @@ opt/app/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerif opt/app/vendor/laravel/framework/src/Illuminate/Validation/Factory.php opt/app/vendor/laravel/framework/src/Illuminate/Validation/PresenceVerifierInterface.php opt/app/vendor/laravel/framework/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php +opt/app/vendor/laravel/framework/src/Illuminate/Validation/ValidationException.php opt/app/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php opt/app/vendor/laravel/framework/src/Illuminate/Validation/Validator.php +opt/app/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php +opt/app/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php opt/app/vendor/laravel/framework/src/Illuminate/View/Compilers/CompilerInterface.php opt/app/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php opt/app/vendor/laravel/framework/src/Illuminate/View/Engines/EngineInterface.php @@ -751,6 +861,10 @@ opt/app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromS opt/app/vendor/laravel/framework/src/Illuminate/View/View.php opt/app/vendor/laravel/framework/src/Illuminate/View/ViewFinderInterface.php opt/app/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php +opt/app/vendor/laravelcollective/html/src/Componentable.php +opt/app/vendor/laravelcollective/html/src/FormBuilder.php +opt/app/vendor/laravelcollective/html/src/FormFacade.php +opt/app/vendor/laravelcollective/html/src/HtmlBuilder.php opt/app/vendor/laravelcollective/html/src/HtmlServiceProvider.php opt/app/vendor/laravelcollective/html/src/helpers.php opt/app/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php @@ -765,6 +879,7 @@ opt/app/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php opt/app/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php opt/app/vendor/monolog/monolog/src/Monolog/Logger.php opt/app/vendor/nesbot/carbon/src/Carbon/Carbon.php +opt/app/vendor/nesbot/carbon/src/Carbon/Lang/en.php opt/app/vendor/paragonie/random_compat/lib/random.php opt/app/vendor/pragmarx/google2fa/src/Vendor/Laravel/ServiceProvider.php opt/app/vendor/psr/log/Psr/Log/LoggerInterface.php @@ -912,8 +1027,11 @@ opt/app/vendor/symfony/console/Style/SymfonyStyle.php opt/app/vendor/symfony/debug/Exception/FatalErrorException.php opt/app/vendor/symfony/debug/Exception/FlattenException.php opt/app/vendor/symfony/debug/ExceptionHandler.php +opt/app/vendor/symfony/finder/Comparator/Comparator.php +opt/app/vendor/symfony/finder/Comparator/DateComparator.php opt/app/vendor/symfony/finder/Finder.php opt/app/vendor/symfony/finder/Glob.php +opt/app/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php opt/app/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php opt/app/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php opt/app/vendor/symfony/finder/Iterator/FilenameFilterIterator.php @@ -922,9 +1040,12 @@ opt/app/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php opt/app/vendor/symfony/finder/Iterator/PathFilterIterator.php opt/app/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php opt/app/vendor/symfony/finder/SplFileInfo.php +opt/app/vendor/symfony/http-foundation/AcceptHeader.php +opt/app/vendor/symfony/http-foundation/AcceptHeaderItem.php opt/app/vendor/symfony/http-foundation/Cookie.php opt/app/vendor/symfony/http-foundation/FileBag.php opt/app/vendor/symfony/http-foundation/HeaderBag.php +opt/app/vendor/symfony/http-foundation/JsonResponse.php opt/app/vendor/symfony/http-foundation/ParameterBag.php opt/app/vendor/symfony/http-foundation/RedirectResponse.php opt/app/vendor/symfony/http-foundation/Request.php @@ -944,6 +1065,11 @@ opt/app/vendor/symfony/routing/CompiledRoute.php opt/app/vendor/symfony/routing/Route.php opt/app/vendor/symfony/routing/RouteCompiler.php opt/app/vendor/symfony/routing/RouteCompilerInterface.php +opt/app/vendor/symfony/translation/Loader/ArrayLoader.php +opt/app/vendor/symfony/translation/Loader/LoaderInterface.php +opt/app/vendor/symfony/translation/MessageSelector.php +opt/app/vendor/symfony/translation/Translator.php +opt/app/vendor/symfony/translation/TranslatorBagInterface.php opt/app/vendor/symfony/translation/TranslatorInterface.php opt/app/vendor/symfony/var-dumper/Cloner/AbstractCloner.php opt/app/vendor/symfony/var-dumper/Cloner/ClonerInterface.php @@ -970,14 +1096,21 @@ opt/app/vendor/twig/twig/lib/Twig/LexerInterface.php opt/app/vendor/twig/twig/lib/Twig/Loader/Array.php opt/app/vendor/twig/twig/lib/Twig/Loader/Chain.php opt/app/vendor/twig/twig/lib/Twig/LoaderInterface.php +opt/app/vendor/twig/twig/lib/Twig/Markup.php opt/app/vendor/twig/twig/lib/Twig/Node.php opt/app/vendor/twig/twig/lib/Twig/Node/Block.php opt/app/vendor/twig/twig/lib/Twig/Node/BlockReference.php opt/app/vendor/twig/twig/lib/Twig/Node/Body.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Array.php +opt/app/vendor/twig/twig/lib/Twig/Node/Expression/AssignName.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Binary.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Binary/And.php +opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Concat.php +opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Equal.php +opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Greater.php +opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Mod.php +opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Binary/Mul.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Binary/NotEqual.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Call.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Constant.php @@ -985,13 +1118,19 @@ opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Filter.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Function.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/GetAttr.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Name.php +opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Test.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Unary.php +opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Unary/Neg.php opt/app/vendor/twig/twig/lib/Twig/Node/Expression/Unary/Not.php +opt/app/vendor/twig/twig/lib/Twig/Node/For.php +opt/app/vendor/twig/twig/lib/Twig/Node/ForLoop.php opt/app/vendor/twig/twig/lib/Twig/Node/If.php opt/app/vendor/twig/twig/lib/Twig/Node/Include.php opt/app/vendor/twig/twig/lib/Twig/Node/Module.php opt/app/vendor/twig/twig/lib/Twig/Node/Print.php +opt/app/vendor/twig/twig/lib/Twig/Node/Set.php opt/app/vendor/twig/twig/lib/Twig/Node/Text.php +opt/app/vendor/twig/twig/lib/Twig/NodeCaptureInterface.php opt/app/vendor/twig/twig/lib/Twig/NodeInterface.php opt/app/vendor/twig/twig/lib/Twig/NodeOutputInterface.php opt/app/vendor/twig/twig/lib/Twig/NodeTraverser.php @@ -1046,6 +1185,7 @@ usr/bin/mysql_install_db usr/bin/php usr/bin/php7.0 usr/bin/sudo +usr/lib/locale/locale-archive usr/lib/php/20151012/bcmath.so usr/lib/php/20151012/calendar.so usr/lib/php/20151012/ctype.so @@ -1170,6 +1310,7 @@ usr/lib/x86_64-linux-gnu/libxslt.so.1.1.28 usr/sbin/mysqld usr/sbin/nginx usr/sbin/php-fpm7.0 +usr/share/locale/locale.alias usr/share/mysql/charsets/Index.xml usr/share/mysql/english/errmsg.sys usr/share/mysql/fill_help_tables.sql diff --git a/.sandstorm/sandstorm-pkgdef.capnp b/.sandstorm/sandstorm-pkgdef.capnp index 5bb401c185..175103b39f 100644 --- a/.sandstorm/sandstorm-pkgdef.capnp +++ b/.sandstorm/sandstorm-pkgdef.capnp @@ -15,7 +15,7 @@ const pkgdef :Spk.PackageDefinition = ( manifest = ( appTitle = (defaultText = "Firefly III"), - appVersion = 0, + appVersion = 1, appMarketingVersion = (defaultText = "3.4.3"), actions = [ # Define your "new document" handlers here. @@ -42,7 +42,8 @@ const pkgdef :Spk.PackageDefinition = ( website = "https://firefly-iii.github.io/", codeUrl = "https://github.com/firefly-iii/firefly-iii", - license = (openSource = mit), + #license = (openSource = mit), + license = (proprietary = (defaultText = embed "../LICENSE")), # The license this package is distributed under. See # https://docs.sandstorm.io/en/latest/developing/publishing-apps/#license @@ -54,40 +55,23 @@ const pkgdef :Spk.PackageDefinition = ( author = ( contactEmail = "thegrumpydictator@gmail.com", upstreamAuthor = "James Cole", + pgpSignature = embed "pgp-signature", ), - #pgpKeyring = embed "path/to/pgp-keyring", - # A keyring in GPG keyring format containing all public keys needed to verify PGP signatures in - # this manifest (as of this writing, there is only one: `author.pgpSignature`). - # - # To generate a keyring containing just your public key, do: - # - # gpg --export > keyring - # - # Where `` is a PGP key ID or email address associated with the key. - - #description = (defaultText = embed "path/to/description.md"), - # The app's description in Github-flavored Markdown format, to be displayed e.g. - # in an app store. Note that the Markdown is not permitted to contain HTML nor image tags (but - # you can include a list of screenshots separately). - + pgpKeyring = embed "pgp-keyring", + description = (defaultText = embed "description.md"), shortDescription = (defaultText = "Financial management"), - # A very short (one-to-three words) description of what the app does. For example, - # "Document editor", or "Notetaking", or "Email client". This will be displayed under the app - # title in the grid view in the app market. - screenshots = [ # Screenshots to use for marketing purposes. Examples below. # Sizes are given in device-independent pixels, so if you took these # screenshots on a Retina-style high DPI screen, divide each dimension by two. - #(width = 746, height = 795, jpeg = embed "path/to/screenshot-1.jpeg"), - #(width = 640, height = 480, png = embed "path/to/screenshot-2.png"), + (width = 1200, height = 1000, png = embed "screenshot-1.png"), + (width = 1200, height = 1000, png = embed "screenshot-2.png"), + (width = 1200, height = 1518, png = embed "screenshot-3.png"), + ], - #changeLog = (defaultText = embed "path/to/sandstorm-specific/changelog.md"), - # Documents the history of changes in Github-flavored markdown format (with the same restrictions - # as govern `description`). We recommend formatting this with an H1 heading for each version - # followed by a bullet list of changes. + changeLog = (defaultText = embed "changelog.md"), ), ), diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index e8dc229028..97320a2b3f 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -20,6 +20,7 @@ use FireflyIII\Http\Middleware\IsAdmin; use FireflyIII\Http\Middleware\Range; use FireflyIII\Http\Middleware\RedirectIfAuthenticated; use FireflyIII\Http\Middleware\RedirectIfTwoFactorAuthenticated; +use FireflyIII\Http\Middleware\Sandstorm; use FireflyIII\Http\Middleware\VerifyCsrfToken; use Illuminate\Auth\Middleware\AuthenticateWithBasicAuth; use Illuminate\Auth\Middleware\Authorize; @@ -80,6 +81,7 @@ class Kernel extends HttpKernel // does not check 2fa // does not check activation 'web' => [ + Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, @@ -87,8 +89,11 @@ class Kernel extends HttpKernel VerifyCsrfToken::class, SubstituteBindings::class, ], + + // MUST NOT be logged in. Does not care about 2FA or confirmation. 'user-not-logged-in' => [ + Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, @@ -101,6 +106,7 @@ class Kernel extends HttpKernel // MUST NOT have 2FA // don't care about confirmation: 'user-logged-in-no-2fa' => [ + Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, @@ -110,24 +116,12 @@ class Kernel extends HttpKernel Authenticate::class, RedirectIfTwoFactorAuthenticated::class, ], - // MUST be logged in - // MUST have 2FA - // MUST NOT have confirmation. - 'user-logged-in-2fa-no-activation' => [ - EncryptCookies::class, - AddQueuedCookiesToResponse::class, - StartSession::class, - ShareErrorsFromSession::class, - VerifyCsrfToken::class, - SubstituteBindings::class, - Authenticate::class, - AuthenticateTwoFactor::class, - ], // MUST be logged in // don't care about 2fa // don't care about confirmation. 'user-simple-auth' => [ + Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, @@ -142,6 +136,7 @@ class Kernel extends HttpKernel // MUST be confirmed. // (this group includes the other Firefly middleware) 'user-full-auth' => [ + Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, @@ -159,6 +154,7 @@ class Kernel extends HttpKernel // MUST have owner role // (this group includes the other Firefly middleware) 'admin' => [ + Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, diff --git a/app/Http/Middleware/Sandstorm.php b/app/Http/Middleware/Sandstorm.php new file mode 100644 index 0000000000..ff4093cede --- /dev/null +++ b/app/Http/Middleware/Sandstorm.php @@ -0,0 +1,72 @@ +guest()) { + $userId = strval($request->header('X-Sandstorm-User-Id')); + if (strlen($userId) > 0) { + // find user? + $email = $userId . '@firefly'; + $user = User::whereEmail($email)->first(); + if (is_null($user)) { + $user = User::create( + [ + 'email' => $email, + 'password' => str_random(16), + ] + ); + } + + + // login user: + Auth::guard($guard)->login($user); + } else { + echo 'user id no length, guest?'; + exit; + } + + } + + return $next($request); + } +}