├── .bowerrc
├── .editorconfig
├── .ember-cli
├── .gitignore
├── .gitlab-ci.yml
├── .jshintrc
├── .travis.yml
├── .watchmanconfig
├── CHANGELOG
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── app
├── adapters
│ ├── address-book.js
│ ├── application.js
│ ├── calendar.js
│ ├── device.js
│ ├── domain.js
│ ├── filesystem.js
│ ├── folder.js
│ ├── group.js
│ ├── jail.js
│ ├── netiface.js
│ ├── network.js
│ ├── package.js
│ ├── policy.js
│ ├── service.js
│ ├── ssh-key.js
│ └── user.js
├── app.js
├── components
│ ├── .gitkeep
│ ├── g-fm-item.js
│ ├── g-message.js
│ ├── g-messages.js
│ ├── ui-dropdown-menu.js
│ └── ui-form.js
├── controllers
│ ├── .gitkeep
│ ├── app
│ │ ├── radicale.js
│ │ ├── radicale
│ │ │ ├── new-book.js
│ │ │ └── new-cldr.js
│ │ ├── syncthing
│ │ │ ├── devices.js
│ │ │ ├── devices
│ │ │ │ ├── add.js
│ │ │ │ └── edit.js
│ │ │ ├── folders.js
│ │ │ ├── folders
│ │ │ │ ├── add.js
│ │ │ │ └── edit.js
│ │ │ └── settings.js
│ │ └── xmpp.js
│ ├── application.js
│ ├── apps.js
│ ├── apps
│ │ └── info.js
│ ├── error.js
│ ├── firstrun.js
│ ├── firstrun
│ │ ├── apps.js
│ │ ├── confirm.js
│ │ ├── finish.js
│ │ ├── settings.js
│ │ ├── start.js
│ │ └── user.js
│ ├── index.js
│ ├── login.js
│ ├── system.js
│ ├── system
│ │ ├── backups.js
│ │ ├── backups
│ │ │ └── info.js
│ │ ├── config.js
│ │ ├── networks.js
│ │ ├── networks
│ │ │ ├── add.js
│ │ │ └── info.js
│ │ ├── packages.js
│ │ ├── roles.js
│ │ ├── roles
│ │ │ ├── domains.js
│ │ │ ├── domains
│ │ │ │ └── add.js
│ │ │ ├── groups.js
│ │ │ ├── groups
│ │ │ │ ├── add.js
│ │ │ │ └── edit.js
│ │ │ ├── users.js
│ │ │ └── users
│ │ │ │ ├── add.js
│ │ │ │ └── edit.js
│ │ ├── security.js
│ │ ├── security
│ │ │ ├── firewall.js
│ │ │ └── firewall
│ │ │ │ └── add.js
│ │ ├── services.js
│ │ └── updates.js
│ ├── tools.js
│ ├── tools
│ │ ├── certificates.js
│ │ ├── certificates
│ │ │ ├── add.js
│ │ │ └── info.js
│ │ ├── databases.js
│ │ ├── databases
│ │ │ ├── add-user.js
│ │ │ ├── add.js
│ │ │ ├── info.js
│ │ │ └── user-edit.js
│ │ ├── files.js
│ │ ├── filesystems.js
│ │ ├── filesystems
│ │ │ ├── add.js
│ │ │ └── info.js
│ │ ├── shares.js
│ │ ├── shares
│ │ │ ├── mounts.js
│ │ │ ├── mounts
│ │ │ │ └── add.js
│ │ │ ├── shares.js
│ │ │ └── shares
│ │ │ │ ├── add.js
│ │ │ │ └── info.js
│ │ └── stats.js
│ ├── websites.js
│ └── websites
│ │ ├── add.js
│ │ └── edit.js
├── helpers
│ ├── .gitkeep
│ ├── format-date-time.js
│ ├── format-date.js
│ ├── format-time.js
│ ├── from-now.js
│ ├── generate-card-color.js
│ └── size-to-string.js
├── index.html
├── initializers
│ ├── initial-config.js
│ └── notifications.js
├── models
│ ├── .gitkeep
│ ├── address-book.js
│ ├── app.js
│ ├── authority.js
│ ├── backup.js
│ ├── calendar.js
│ ├── certificate.js
│ ├── database-type.js
│ ├── database-user.js
│ ├── database.js
│ ├── device.js
│ ├── domain.js
│ ├── filesystem.js
│ ├── folder.js
│ ├── group.js
│ ├── jail.js
│ ├── mount.js
│ ├── netiface.js
│ ├── network.js
│ ├── package.js
│ ├── point.js
│ ├── policy.js
│ ├── service.js
│ ├── share-type.js
│ ├── share.js
│ ├── shared-file.js
│ ├── ssh-key.js
│ ├── update.js
│ ├── user.js
│ └── website.js
├── objects
│ └── pollster.js
├── resolver.js
├── router.js
├── routes
│ ├── .gitkeep
│ ├── app
│ │ ├── radicale.js
│ │ ├── radicale
│ │ │ ├── new-book.js
│ │ │ └── new-cldr.js
│ │ ├── syncthing.js
│ │ ├── syncthing
│ │ │ ├── devices.js
│ │ │ ├── devices
│ │ │ │ ├── add.js
│ │ │ │ └── edit.js
│ │ │ ├── folders.js
│ │ │ ├── folders
│ │ │ │ ├── add.js
│ │ │ │ └── edit.js
│ │ │ └── settings.js
│ │ └── xmpp.js
│ ├── application.js
│ ├── apps.js
│ ├── apps
│ │ └── info.js
│ ├── firstrun.js
│ ├── firstrun
│ │ ├── apps.js
│ │ ├── confirm.js
│ │ ├── finish.js
│ │ ├── settings.js
│ │ ├── start.js
│ │ └── user.js
│ ├── index.js
│ ├── login.js
│ ├── system
│ │ ├── backups.js
│ │ ├── backups
│ │ │ └── info.js
│ │ ├── config.js
│ │ ├── networks.js
│ │ ├── networks
│ │ │ ├── add.js
│ │ │ └── info.js
│ │ ├── packages.js
│ │ ├── roles.js
│ │ ├── roles
│ │ │ ├── domains.js
│ │ │ ├── domains
│ │ │ │ └── add.js
│ │ │ ├── groups.js
│ │ │ ├── groups
│ │ │ │ ├── add.js
│ │ │ │ └── edit.js
│ │ │ ├── users.js
│ │ │ └── users
│ │ │ │ ├── add.js
│ │ │ │ └── edit.js
│ │ ├── security.js
│ │ ├── security
│ │ │ ├── fail2ban.js
│ │ │ ├── firewall.js
│ │ │ └── firewall
│ │ │ │ └── add.js
│ │ ├── services.js
│ │ └── updates.js
│ ├── tools.js
│ ├── tools
│ │ ├── certificates.js
│ │ ├── certificates
│ │ │ ├── add.js
│ │ │ └── info.js
│ │ ├── databases.js
│ │ ├── databases
│ │ │ ├── add-user.js
│ │ │ ├── add.js
│ │ │ ├── info.js
│ │ │ └── user-edit.js
│ │ ├── files.js
│ │ ├── filesystems.js
│ │ ├── filesystems
│ │ │ ├── add.js
│ │ │ └── info.js
│ │ ├── shares.js
│ │ ├── shares
│ │ │ ├── mounts.js
│ │ │ ├── mounts
│ │ │ │ └── add.js
│ │ │ ├── shares.js
│ │ │ └── shares
│ │ │ │ ├── add.js
│ │ │ │ └── info.js
│ │ └── stats.js
│ ├── websites.js
│ └── websites
│ │ ├── add.js
│ │ └── edit.js
├── serializers
│ ├── application.js
│ └── database-user.js
├── services
│ └── notifications.js
├── styles
│ └── app.css
├── templates
│ ├── app
│ │ ├── radicale.hbs
│ │ ├── radicale
│ │ │ ├── new-book.hbs
│ │ │ └── new-cldr.hbs
│ │ ├── syncthing.hbs
│ │ ├── syncthing
│ │ │ ├── devices.hbs
│ │ │ ├── devices
│ │ │ │ ├── add.hbs
│ │ │ │ └── edit.hbs
│ │ │ ├── folders.hbs
│ │ │ ├── folders
│ │ │ │ ├── add.hbs
│ │ │ │ └── edit.hbs
│ │ │ └── settings.hbs
│ │ └── xmpp.hbs
│ ├── application.hbs
│ ├── apps.hbs
│ ├── apps
│ │ └── info.hbs
│ ├── components
│ │ ├── bread-crumbs.hbs
│ │ ├── g-fm-item.hbs
│ │ ├── g-message.hbs
│ │ ├── g-messages.hbs
│ │ ├── ui-dropdown-menu.hbs
│ │ └── ui-form.hbs
│ ├── error.hbs
│ ├── firstrun.hbs
│ ├── firstrun
│ │ ├── apps.hbs
│ │ ├── confirm.hbs
│ │ ├── finish.hbs
│ │ ├── settings.hbs
│ │ ├── start.hbs
│ │ └── user.hbs
│ ├── index.hbs
│ ├── loading.hbs
│ ├── login.hbs
│ ├── system
│ │ ├── backups.hbs
│ │ ├── backups
│ │ │ └── info.hbs
│ │ ├── config.hbs
│ │ ├── networks.hbs
│ │ ├── networks
│ │ │ ├── add.hbs
│ │ │ └── info.hbs
│ │ ├── packages.hbs
│ │ ├── roles.hbs
│ │ ├── roles
│ │ │ ├── domains.hbs
│ │ │ ├── domains
│ │ │ │ └── add.hbs
│ │ │ ├── groups.hbs
│ │ │ ├── groups
│ │ │ │ ├── add.hbs
│ │ │ │ └── edit.hbs
│ │ │ ├── users.hbs
│ │ │ └── users
│ │ │ │ ├── add.hbs
│ │ │ │ └── edit.hbs
│ │ ├── security.hbs
│ │ ├── security
│ │ │ ├── fail2ban.hbs
│ │ │ ├── firewall.hbs
│ │ │ └── firewall
│ │ │ │ └── add.hbs
│ │ ├── services.hbs
│ │ └── updates.hbs
│ ├── tools.hbs
│ ├── tools
│ │ ├── certificates.hbs
│ │ ├── certificates
│ │ │ ├── add.hbs
│ │ │ └── info.hbs
│ │ ├── databases.hbs
│ │ ├── databases
│ │ │ ├── add-user.hbs
│ │ │ ├── add.hbs
│ │ │ ├── info.hbs
│ │ │ └── user-edit.hbs
│ │ ├── files.hbs
│ │ ├── filesystems.hbs
│ │ ├── filesystems
│ │ │ ├── add.hbs
│ │ │ └── info.hbs
│ │ ├── shares.hbs
│ │ ├── shares
│ │ │ ├── mounts.hbs
│ │ │ ├── mounts
│ │ │ │ └── add.hbs
│ │ │ ├── shares.hbs
│ │ │ └── shares
│ │ │ │ ├── add.hbs
│ │ │ │ └── info.hbs
│ │ └── stats.hbs
│ ├── websites.hbs
│ └── websites
│ │ ├── add.hbs
│ │ └── edit.hbs
├── utils
│ ├── card-color.js
│ ├── handle-model-error.js
│ ├── size-to-string.js
│ ├── timezones.js
│ └── to-b64.js
└── views
│ └── application.js
├── bower.json
├── config
└── environment.js
├── ember-cli-build.js
├── lib
├── .gitkeep
└── .jshintrc
├── package.json
├── public
├── crossdomain.xml
├── img
│ ├── appstore-card.png
│ ├── arkos-pattern.png
│ ├── logo-round.png
│ └── logo-white-round.png
└── robots.txt
├── testem.json
├── tests
├── acceptance
│ └── login-test.js
├── helpers
│ ├── destroy-app.js
│ ├── module-for-acceptance.js
│ ├── resolver.js
│ └── start-app.js
├── index.html
├── integration
│ └── components
│ │ ├── ui-dropdown-menu-test.js
│ │ └── ui-form-test.js
├── test-helper.js
└── unit
│ ├── controllers
│ ├── app
│ │ ├── syncthing
│ │ │ ├── devices-test.js
│ │ │ ├── devices
│ │ │ │ ├── add-test.js
│ │ │ │ └── edit-test.js
│ │ │ ├── folders-test.js
│ │ │ └── folders
│ │ │ │ ├── add-test.js
│ │ │ │ └── edit-test.js
│ │ └── xmpp-test.js
│ ├── apps
│ │ └── info-test.js
│ ├── certs-test.js
│ ├── certs
│ │ └── info-test.js
│ ├── firstrun
│ │ ├── apps-test.js
│ │ ├── confirm-test.js
│ │ ├── finish-test.js
│ │ ├── settings-test.js
│ │ ├── start-test.js
│ │ └── user-test.js
│ ├── roles-test.js
│ ├── roles
│ │ ├── domains-test.js
│ │ ├── domains
│ │ │ └── add-test.js
│ │ ├── groups-test.js
│ │ ├── groups
│ │ │ ├── add-test.js
│ │ │ └── edit-test.js
│ │ ├── users-test.js
│ │ └── users
│ │ │ ├── add-test.js
│ │ │ └── edit-test.js
│ ├── security
│ │ └── firewall-test.js
│ ├── settings
│ │ ├── backups
│ │ │ └── info-test.js
│ │ └── networks
│ │ │ ├── add-test.js
│ │ │ └── info-test.js
│ ├── stats-test.js
│ ├── system-test.js
│ ├── system
│ │ ├── networks-test.js
│ │ └── security
│ │ │ └── firewall
│ │ │ └── add-test.js
│ ├── tools-test.js
│ ├── tools
│ │ ├── certificates
│ │ │ └── add-test.js
│ │ ├── databases-test.js
│ │ ├── databases
│ │ │ ├── add-test.js
│ │ │ ├── add-user-test.js
│ │ │ ├── info-test.js
│ │ │ └── user-edit-test.js
│ │ ├── filesystems
│ │ │ ├── add-test.js
│ │ │ └── info-test.js
│ │ ├── shares-test.js
│ │ └── shares
│ │ │ ├── mounts-test.js
│ │ │ ├── mounts
│ │ │ └── add-test.js
│ │ │ ├── shares-test.js
│ │ │ └── shares
│ │ │ ├── add-test.js
│ │ │ └── info-test.js
│ └── websites
│ │ ├── add-test.js
│ │ └── edit-test.js
│ ├── helpers
│ └── generate-card-color-test.js
│ ├── initializers
│ └── notifications-test.js
│ ├── models
│ ├── mount-test.js
│ ├── share-type-test.js
│ └── shared-file-test.js
│ ├── routes
│ ├── app-test.js
│ ├── app
│ │ ├── radicale
│ │ │ ├── new-book-test.js
│ │ │ └── new-cldr-test.js
│ │ ├── syncthing
│ │ │ ├── devices-test.js
│ │ │ ├── devices
│ │ │ │ ├── add-test.js
│ │ │ │ └── edit-test.js
│ │ │ ├── folders-test.js
│ │ │ ├── folders
│ │ │ │ ├── add-test.js
│ │ │ │ └── edit-test.js
│ │ │ └── settings-test.js
│ │ └── xmpp-test.js
│ ├── apps
│ │ └── info-test.js
│ ├── certs
│ │ ├── add-test.js
│ │ └── info-test.js
│ ├── firstrun
│ │ ├── apps-test.js
│ │ ├── confirm-test.js
│ │ ├── finish-test.js
│ │ ├── settings-test.js
│ │ ├── start-test.js
│ │ └── user-test.js
│ ├── roles-test.js
│ ├── roles
│ │ ├── domains-test.js
│ │ ├── domains
│ │ │ └── add-test.js
│ │ ├── groups-test.js
│ │ ├── groups
│ │ │ ├── add-test.js
│ │ │ └── edit-test.js
│ │ ├── users-test.js
│ │ └── users
│ │ │ ├── add-test.js
│ │ │ └── edit-test.js
│ ├── security
│ │ ├── fail2ban-test.js
│ │ ├── firewall-test.js
│ │ └── firewall
│ │ │ └── add-test.js
│ ├── settings
│ │ └── backups
│ │ │ └── info-test.js
│ ├── system
│ │ ├── networks-test.js
│ │ └── networks
│ │ │ ├── add-test.js
│ │ │ └── info-test.js
│ ├── tools-test.js
│ ├── tools
│ │ ├── databases
│ │ │ ├── add-test.js
│ │ │ ├── add-user-test.js
│ │ │ ├── info-test.js
│ │ │ └── user-edit-test.js
│ │ ├── filesystems
│ │ │ ├── add-test.js
│ │ │ └── info-test.js
│ │ ├── shares-test.js
│ │ └── shares
│ │ │ ├── mounts-test.js
│ │ │ ├── mounts
│ │ │ └── add-test.js
│ │ │ ├── shares-test.js
│ │ │ └── shares
│ │ │ ├── add-test.js
│ │ │ └── info-test.js
│ └── websites
│ │ ├── add-test.js
│ │ └── edit-test.js
│ ├── serializers
│ └── database-user-test.js
│ ├── services
│ └── notifications-test.js
│ ├── utils
│ ├── card-color-test.js
│ └── handle-model-error-test.js
│ └── views
│ └── application-test.js
└── vendor
└── .gitkeep
/.bowerrc:
--------------------------------------------------------------------------------
1 | {
2 | "directory": "bower_components",
3 | "analytics": false
4 | }
5 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # editorconfig.org
4 |
5 | root = true
6 |
7 |
8 | [*]
9 | end_of_line = lf
10 | charset = utf-8
11 | trim_trailing_whitespace = true
12 | insert_final_newline = true
13 | indent_style = space
14 | indent_size = 2
15 |
16 | [*.js]
17 | indent_style = space
18 | indent_size = 2
19 |
20 | [*.hbs]
21 | indent_style = space
22 | indent_size = 2
23 |
24 | [*.css]
25 | indent_style = space
26 | indent_size = 2
27 |
28 | [*.html]
29 | indent_style = space
30 | indent_size = 2
31 |
32 | [*.{diff,md}]
33 | trim_trailing_whitespace = false
34 |
--------------------------------------------------------------------------------
/.ember-cli:
--------------------------------------------------------------------------------
1 | {
2 | /**
3 | Ember CLI sends analytics information by default. The data is completely
4 | anonymous, but there are times when you might want to disable this behavior.
5 |
6 | Setting `disableAnalytics` to true will prevent any data from being sent.
7 | */
8 | "disableAnalytics": false
9 | }
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # Compiled output
4 | /dist
5 | /lib
6 | /tmp
7 | *.tgz
8 |
9 | # Dependencies
10 | /node_modules
11 | /bower_components
12 |
13 | # Eclipse project files
14 | .project
15 |
16 | # Logs
17 | /libpeerconnection.log
18 | npm-debug.log
19 | testem.log
20 |
21 | # Misc
22 | /.sass-cache
23 | /connect.lock
24 | /coverage
25 | /.settings
26 |
27 |
--------------------------------------------------------------------------------
/.gitlab-ci.yml:
--------------------------------------------------------------------------------
1 | image: node:5.10
2 |
3 | before_script:
4 | - npm config set spin false
5 | - npm install -g bower
6 | - npm install -g ember-cli
7 | - npm install -g phantomjs-prebuilt
8 | - npm install
9 | - bower install --allow-root
10 | test:
11 | script:
12 | - ember build --prod
13 |
--------------------------------------------------------------------------------
/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "predef": [
3 | "document",
4 | "window",
5 | "-Promise"
6 | ],
7 | "browser": true,
8 | "boss": true,
9 | "curly": true,
10 | "debug": false,
11 | "devel": true,
12 | "eqeqeq": true,
13 | "evil": true,
14 | "forin": false,
15 | "immed": false,
16 | "laxbreak": false,
17 | "newcap": true,
18 | "noarg": true,
19 | "noempty": false,
20 | "nonew": false,
21 | "nomen": false,
22 | "onevar": false,
23 | "plusplus": false,
24 | "regexp": false,
25 | "undef": true,
26 | "sub": true,
27 | "strict": false,
28 | "white": false,
29 | "eqnull": true,
30 | "esnext": true,
31 | "unused": true
32 | }
33 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | ---
2 | language: node_js
3 | node_js:
4 | - "4"
5 |
6 | sudo: false
7 |
8 | cache:
9 | directories:
10 | - node_modules
11 |
12 | before_install:
13 | - npm config set spin false
14 | - npm install -g bower
15 | - npm install phantomjs-prebuilt
16 |
17 | install:
18 | - npm install
19 | - bower install
20 |
21 | script:
22 | - npm test
23 |
--------------------------------------------------------------------------------
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {
2 | "ignore_dirs": ["tmp"]
3 | }
4 |
--------------------------------------------------------------------------------
/CHANGELOG:
--------------------------------------------------------------------------------
1 | v 0.8
2 |
3 | - No changes for genesis.
4 |
5 | v 0.7 "Noah"
6 |
7 | - It turned green.
8 | - Computer language support is no longer a package.
9 | - The terminal is no longer runs at a snail's pace.
10 |
11 | v 0.6 "Panoply"
12 |
13 | - It got a whole lot faster.
14 |
15 | v 0.5
16 |
17 | - ??
18 |
--------------------------------------------------------------------------------
/app/adapters/address-book.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/apps/radicale'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/application.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import DS from "ember-data";
3 | import ENV from "../config/environment";
4 |
5 |
6 | export default DS.RESTAdapter.extend({
7 | host: ENV.APP.krakenHost || "",
8 | namespace: "api",
9 | pathForType: function(type) {
10 | var stype = this._super(type);
11 | return Ember.String.decamelize(stype);
12 | }
13 | });
14 |
--------------------------------------------------------------------------------
/app/adapters/calendar.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/apps/radicale'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/device.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/apps/syncthing'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/domain.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/filesystem.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/folder.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/apps/syncthing'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/group.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/jail.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/netiface.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/network.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/package.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/policy.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/service.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/ssh-key.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/adapters/user.js:
--------------------------------------------------------------------------------
1 | import ApplicationAdapter from "./application";
2 |
3 |
4 | export default ApplicationAdapter.extend({
5 | namespace: 'api/system'
6 | });
7 |
--------------------------------------------------------------------------------
/app/app.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import Resolver from 'ember-resolver';
3 | import loadInitializers from 'ember/load-initializers';
4 | import config from './config/environment';
5 |
6 | let App;
7 |
8 | Ember.MODEL_FACTORY_INJECTIONS = true;
9 |
10 | App = Ember.Application.extend({
11 | modulePrefix: config.modulePrefix,
12 | podModulePrefix: config.podModulePrefix,
13 | Resolver
14 | });
15 |
16 | loadInitializers(App, config.modulePrefix);
17 |
18 | window.addEventListener("keydown", function(e){
19 | window.CTRL = (e.ctrlKey || e.metaKey);
20 | }, false);
21 |
22 | window.addEventListener('keyup', function(e){
23 | window.CTRL = (e.metaKey || e.ctrlKey);
24 | }, false);
25 |
26 | export default App;
27 |
--------------------------------------------------------------------------------
/app/components/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/app/components/.gitkeep
--------------------------------------------------------------------------------
/app/components/g-fm-item.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../config/environment";
3 |
4 |
5 | export default Ember.Component.extend({
6 | classNameBindings: [':ui-fm-item', 'item.selected:ui-fm-selected:'],
7 | open: 'open',
8 | menu: 'menu',
9 | href: function(){
10 | return `${ENV.APP.krakenHost}/api/files/${this.get('item.id')}?download=true`;
11 | }.property('item'),
12 | initContextMenu: function() {
13 | var self = this;
14 | Ember.$('#'+this.get('elementId')).bind('contextmenu', function() {
15 | if (self.get('files.selectedItems.length') && self.get('files.selectedItems').indexOf(self.get("item")) === -1) {
16 | self.get('files.currentFolder').setEach('selected', false);
17 | }
18 | self.set('item.selected', true);
19 | Ember.$('#context-sidebar').sidebar('toggle');
20 | return false;
21 | });
22 | }.on('didInsertElement'),
23 | click: function() {
24 | if (window.CTRL) {
25 | this.set('item.selected', !this.get('item.selected'));
26 | } else {
27 | this.sendAction('open', this.get('item'));
28 | }
29 | }
30 | });
31 |
--------------------------------------------------------------------------------
/app/components/g-message.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 |
3 |
4 | export default Ember.Component.extend({
5 | actions: {
6 | dismiss: function() {
7 | var self = this;
8 | Ember.$(`#notification-box-${self.get('msg').id}`).transition('fade', function() {
9 | self.notifications.remove(self.get('msg'));
10 | });
11 | }
12 | }
13 | });
14 |
--------------------------------------------------------------------------------
/app/components/g-messages.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 |
3 |
4 | export default Ember.Component.extend({
5 | classNames: 'message-box-wr',
6 | messages: Ember.computed.filter('notifications.items', function(item) {
7 | return !item.noFlash;
8 | })
9 | });
10 |
--------------------------------------------------------------------------------
/app/components/ui-dropdown-menu.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Component.extend({
4 | classNames: ["ui", "dropdown", "item"],
5 | initializeElement: function() {
6 | Ember.$('#'+this.get('elementId')).dropdown();
7 | }.on('didInsertElement')
8 | });
9 |
--------------------------------------------------------------------------------
/app/components/ui-form.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 |
4 | export default Ember.Component.extend({
5 | tagName: 'form',
6 | classNames: ['ui', 'form'],
7 | setupForm: function() {
8 | var self = this;
9 | Ember.$('#' + this.get('elementId') + ' .input').keypress(function(e) {
10 | if (e.which === 13) {
11 | self.send('save');
12 | return false;
13 | }
14 | });
15 | }.on('didInsertElement'),
16 | actions: {
17 | save: function() {
18 | var self = this;
19 | if (this.get('fields')) {
20 | Ember.$('#' + this.get('elementId')).form({
21 | fields: this.get('fields'),
22 | inline: true,
23 | keyboardShortcuts: false,
24 | onSuccess: function() {
25 | self.set('isSubmitting', true);
26 | self.sendAction('onSubmit');
27 | }
28 | });
29 | Ember.$('#' + this.get('elementId')).form('validate form');
30 | } else {
31 | this.sendAction('onSubmit');
32 | }
33 | },
34 | cancel: function() {
35 | this.sendAction('onCancel');
36 | }
37 | }
38 | });
39 |
--------------------------------------------------------------------------------
/app/controllers/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/app/controllers/.gitkeep
--------------------------------------------------------------------------------
/app/controllers/app/radicale.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../../config/environment";
3 | import handleModelError from '../../utils/handle-model-error';
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: {name: 'Calendar/Contacts', icon: 'calendar'},
8 | setupPort: 80,
9 | fields: {
10 | port: ['integer', 'empty']
11 | },
12 | actions: {
13 | setup: function() {
14 | var self = this;
15 | Ember.$.ajax(`${ENV.APP.krakenHost}/api/apps/radicale/setup`, {
16 | type: "POST",
17 | data: JSON.stringify(
18 | {
19 | config: {
20 | addr: this.get('setupDomain.id') || this.get('model.domains.firstObject.id'),
21 | port: this.get('setupPort')
22 | }
23 | }
24 | ),
25 | contentType: 'application/json'
26 | })
27 | .done(function() {
28 | self.set('model.status.installed', true);
29 | self.set('model.status.running', true);
30 | })
31 | .fail(function(e) {
32 | handleModelError(self, e);
33 | });
34 | },
35 | openModal: function(name, item) {
36 | this.set('selectedItem', item);
37 | Ember.$('.ui.' + name + '.modal').modal('show');
38 | },
39 | deleteItem: function() {
40 | this.get('selectedItem').destroyRecord();
41 | this.set('selectedItem', null);
42 | }
43 | }
44 | });
45 |
--------------------------------------------------------------------------------
/app/controllers/app/radicale/new-book.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import handleModelError from '../../../utils/handle-model-error';
3 | import cardColor from '../../../utils/card-color';
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: {name: 'New address book', icon: 'book'},
8 | fields: {
9 | name: ['empty']
10 | },
11 | cardColor: function() {
12 | return cardColor();
13 | }.property(),
14 | actions: {
15 | save: function() {
16 | var self = this,
17 | user = this.get('user.name') || self.get('model.firstObject.name');
18 | var book = self.store.createRecord('addressBook', {
19 | id: user+"_"+self.get('name'),
20 | name: self.get('name'),
21 | user: user
22 | });
23 | var promise = book.save();
24 | promise.then(function() {
25 | self.transitionToRoute('app.radicale');
26 | }, function(e){
27 | handleModelError(self, e);
28 | book.deleteRecord();
29 | });
30 | }
31 | },
32 | redirect: function() {
33 | this.transitionToRoute('app.radicale');
34 | }
35 | });
36 |
--------------------------------------------------------------------------------
/app/controllers/app/radicale/new-cldr.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import handleModelError from '../../../utils/handle-model-error';
3 | import cardColor from '../../../utils/card-color';
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: {name: 'New calendar', icon: 'calendar'},
8 | fields: {
9 | name: ['empty']
10 | },
11 | cardColor: function() {
12 | return cardColor();
13 | }.property(),
14 | actions: {
15 | save: function() {
16 | var self = this,
17 | user = this.get('user.name') || self.get('model.firstObject.name');
18 | var cldr = self.store.createRecord('calendar', {
19 | id: user+"_"+self.get('name'),
20 | name: self.get('name'),
21 | user: user
22 | });
23 | var promise = cldr.save();
24 | promise.then(function() {
25 | self.transitionToRoute('app.radicale');
26 | }, function(e){
27 | handleModelError(self, e);
28 | cldr.deleteRecord();
29 | });
30 | }
31 | },
32 | redirect: function() {
33 | this.transitionToRoute('app.radicale');
34 | }
35 | });
36 |
--------------------------------------------------------------------------------
/app/controllers/app/syncthing/devices.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'File Sync', icon: 'refresh'},
5 | actions: {
6 | openModal: function(name, device) {
7 | this.set('selectedDevice', device);
8 | Ember.$('.ui.' + name + '.modal').modal('show');
9 | },
10 | deleteDevice: function() {
11 | var self = this;
12 | Ember.$('.ui.delete-device.modal').modal('hide', function() {
13 | self.get('selectedDevice').destroyRecord();
14 | self.transitionToRoute('app.syncthing.devices');
15 | });
16 | }
17 | }
18 | });
19 |
--------------------------------------------------------------------------------
/app/controllers/app/syncthing/devices/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../../utils/handle-model-error';
3 | import cardColor from '../../../../utils/card-color';
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: {name: 'New device', icon: 'disk outline'},
8 | fields: {
9 | name: ['empty'],
10 | deviceID: ['empty'],
11 | addresses: ['empty']
12 | },
13 | cardColor: function() {
14 | return cardColor();
15 | }.property(),
16 | actions: {
17 | save: function() {
18 | var self = this;
19 | var device = self.store.createRecord('device', {
20 | id: this.get('id'),
21 | name: this.get('id'),
22 | deviceID: this.get('deviceID'),
23 | addressing: this.get('addressing')
24 | });
25 | var promise = device.save();
26 | promise.then(function() {
27 | self.transitionToRoute('app.syncthing.devices');
28 | }, function(e){
29 | handleModelError(self, e);
30 | device.deleteRecord();
31 | });
32 | },
33 | redirect: function() {
34 | this.transitionToRoute('app.syncthing.devices');
35 | }
36 | }
37 | });
38 |
--------------------------------------------------------------------------------
/app/controllers/app/syncthing/devices/edit.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../../utils/handle-model-error';
3 |
4 |
5 | export default Ember.Controller.extend({
6 | breadCrumb: Ember.computed("model.name", {
7 | get() {
8 | return {name: this.get("model.name"), icon: 'disk outline'};
9 | }
10 | }),
11 | fields: {
12 | name: ['empty'],
13 | addresses: ['empty']
14 | },
15 | actions: {
16 | save: function() {
17 | var self = this,
18 | device = this.get("model");
19 | var promise = device.save();
20 | promise.then(function(){
21 | self.transitionToRoute("app.syncthing.devices");
22 | }, function(e){
23 | handleModelError(self, e);
24 | });
25 | },
26 | redirect: function() {
27 | this.get('model').rollback();
28 | this.transitionToRoute('app.syncthing.devices');
29 | },
30 | openModal: function(name) {
31 | Ember.$('.ui.' + name + '.modal').modal('show');
32 | },
33 | deleteDevice: function() {
34 | var self = this;
35 | Ember.$('.ui.delete-device.modal').modal('hide', function() {
36 | self.get('model').destroyRecord();
37 | self.transitionToRoute('app.syncthing.devices');
38 | });
39 | }
40 | }
41 | });
42 |
--------------------------------------------------------------------------------
/app/controllers/app/syncthing/folders.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'File Sync', icon: 'refresh'},
5 | actions: {
6 | openModal: function(name, folder) {
7 | this.set('selectedFolder', folder);
8 | Ember.$('.ui.' + name + '.modal').modal('show');
9 | },
10 | deleteFolder: function() {
11 | var self = this;
12 | Ember.$('.ui.delete-folder.modal').modal('hide', function() {
13 | self.get('selectedFolder').destroyRecord();
14 | self.transitionToRoute('app.syncthing.folders');
15 | });
16 | }
17 | }
18 | });
19 |
--------------------------------------------------------------------------------
/app/controllers/app/syncthing/folders/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../../utils/handle-model-error';
3 | import cardColor from '../../../../utils/card-color';
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: {name: 'New folder', icon: 'folder'},
8 | fields: {
9 | label: ['empty'],
10 | path: ['regExp[/^(/[^/ ]*)+/?$/]', 'empty'],
11 | keepVersions: ['integer', 'empty'],
12 | rescanIntervalS: ['integer', 'empty']
13 | },
14 | rescanIntervalS: 60,
15 | keepVersions: 3,
16 | cardColor: function() {
17 | return cardColor();
18 | }.property(),
19 | actions: {
20 | save: function() {
21 | var self = this,
22 | devices = this.get('devicesSelected').map(function(i) { return i.get('deviceID'); });
23 | var folder = self.store.createRecord('folder', {
24 | label: this.get('label'),
25 | path: this.get('path'),
26 | type: this.get('readOnly') ? "readonly" : "readwrite",
27 | ignorePerms: this.get('ignorePerms') || false,
28 | versioning: this.get('versioning') ? {type: "simple", params: {keep: this.get("keepVersions")}} : {type: "", params: {}},
29 | rescanIntervalS: this.get('rescanIntervalS'),
30 | devices: devices
31 | });
32 | var promise = folder.save();
33 | promise.then(function() {
34 | self.transitionToRoute('app.syncthing.folders');
35 | }, function(e){
36 | handleModelError(self, e);
37 | folder.deleteRecord();
38 | });
39 | },
40 | redirect: function() {
41 | this.transitionToRoute('app.syncthing.folders');
42 | }
43 | }
44 | });
45 |
--------------------------------------------------------------------------------
/app/controllers/app/syncthing/settings.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../../../config/environment";
3 | import handleModelError from '../../../utils/handle-model-error';
4 |
5 |
6 | export default Ember.ObjectController.extend({
7 | breadCrumb: {name: 'File Sync', icon: 'refresh'},
8 | actions: {
9 | saveSettings: function() {
10 | var self = this,
11 | config = this.get('model.config');
12 | Ember.$.ajax(`${ENV.APP.krakenHost}/api/apps/syncthing/config`, {
13 | type: 'POST',
14 | data: JSON.stringify({config: config}),
15 | contentType: 'application/json'
16 | })
17 | .done(function() {
18 | self.notifications.new("success", "Configuration saved successfully");
19 | })
20 | .fail(function(e) {
21 | handleModelError(self, e);
22 | });
23 | }
24 | }
25 | });
26 |
--------------------------------------------------------------------------------
/app/controllers/app/xmpp.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'Chat Server (XMPP)', icon: 'comments'}
5 | });
6 |
--------------------------------------------------------------------------------
/app/controllers/apps/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../utils/handle-model-error';
3 |
4 |
5 | export default Ember.Controller.extend({
6 | breadCrumb: Ember.computed("model.name", "model.icon", {
7 | get() {
8 | return {name: this.get("model.name"), icon: this.get("model.icon")};
9 | }
10 | }),
11 | actions: {
12 | openModal: function(name) {
13 | Ember.$('.ui.' + name + '.modal').modal('show');
14 | },
15 | install: function() {
16 | var app = this.get('model'),
17 | self = this;
18 | app.set('operation', 'install');
19 | app.set('isReady', false);
20 | var promise = app.save();
21 | promise.then(function(){}, function(e){
22 | handleModelError(self, e);
23 | });
24 | },
25 | uninstallApp: function() {
26 | var app = this.get('model'),
27 | self = this;
28 | app.set('operation', 'uninstall');
29 | app.set('isReady', false);
30 | app.save();
31 | Ember.$('.ui.uninstall-app.modal').modal('hide', function() {
32 | self.transitionToRoute('apps');
33 | });
34 | }
35 | }
36 | });
37 |
--------------------------------------------------------------------------------
/app/controllers/firstrun.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 |
3 | export default Ember.ObjectController.extend({
4 | });
5 |
--------------------------------------------------------------------------------
/app/controllers/firstrun/apps.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | selectedApps: Ember.computed.filterBy('model', 'firstrunSelected', true),
5 | actions: {
6 | selectApp: function(app) {
7 | app.toggleProperty('firstrunSelected');
8 | },
9 | selectAll: function() {
10 | this.get("model").filterBy('installed', false).setEach('firstrunSelected', true);
11 | },
12 | deselectAll: function() {
13 | this.get("model").setEach('firstrunSelected', false);
14 | }
15 | }
16 | });
17 |
--------------------------------------------------------------------------------
/app/controllers/firstrun/confirm.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | user: Ember.inject.controller('firstrun.user'),
5 | settings: Ember.inject.controller('firstrun.settings'),
6 | apps: Ember.inject.controller('firstrun.apps')
7 | });
8 |
--------------------------------------------------------------------------------
/app/controllers/firstrun/finish.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | user: Ember.inject.controller('firstrun.user'),
5 | settings: Ember.inject.controller('firstrun.settings'),
6 | apps: Ember.inject.controller('firstrun.apps'),
7 | operations: {},
8 | rootPwd: "Please wait..."
9 | });
10 |
--------------------------------------------------------------------------------
/app/controllers/firstrun/settings.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import timezones from "../../utils/timezones";
3 |
4 |
5 | export default Ember.Controller.extend({
6 | timezones: timezones,
7 | protectRoot: true,
8 | tzRegion: "GMT",
9 | tzZone: "GMT",
10 | tzZones: function() {
11 | var self = this;
12 | var tzo = timezones.find(function(i) {
13 | return i.region.replace(" ", "_") === self.get('tzRegion');
14 | });
15 | if (tzo.region === "GMT" || tzo.region === "UTC") {
16 | return [tzo.region];
17 | } else {
18 | return tzo.zones;
19 | }
20 | }.property('tzRegion'),
21 | usesSDCard: function() {
22 | return ["Unknown", "General"].indexOf(this.get("model.config.enviro.board")) === -1;
23 | }.property("model"),
24 | isRPi: function() {
25 | return ["Raspberry Pi", "Raspberry Pi 2", "Raspberry Pi 3"].indexOf(this.get("model.config.enviro.board")) >= 0;
26 | }.property("model"),
27 | isCubie: function() {
28 | return ["Cubieboard", "Cubietruck"].indexOf(this.get("model.config.enviro.board")) >= 0;
29 | }.property("model")
30 | });
31 |
--------------------------------------------------------------------------------
/app/controllers/firstrun/start.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | welcome: "Welcome to arkOS",
5 | welcomes: ["Welcome to arkOS", "Wilkommen bei arkOS", "Bienvenue à arkOS",
6 | "arkOS へようこそ", "Bienvenido a arkOS", "Benvenuti a arkOS", "欢迎 arkOS",
7 | "Welkom bij arkOS", "arkOS ਸੁਆਗਤ ਹੈ", "arkOS مرحبا بكم في", "Välkommen till arkOS",
8 | "Καλώς ήρθατε στο arkOS"]
9 | });
10 |
--------------------------------------------------------------------------------
/app/controllers/firstrun/user.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | newUser: {},
5 | newDomain: "arkos.local",
6 | fields: {
7 | username: {
8 | rules: [
9 | {
10 | type: 'empty'
11 | },
12 | {
13 | type: 'regExp[/^[a-z0-9]{2,30}$/]',
14 | prompt: '{name} must be lowercase letters or numbers, and less than 30 characters'
15 | }
16 | ]
17 | },
18 | firstName: {
19 | rules: [
20 | {
21 | type: 'regExp[/^[a-zA-Z][a-zA-Z0-9_-]*$/]'
22 | },
23 | {
24 | type: 'empty'
25 | }
26 | ]
27 | },
28 | password: {
29 | rules: [
30 | {
31 | type: 'minLength[6]'
32 | },
33 | {
34 | type: 'empty'
35 | }
36 | ]
37 | },
38 | passwordConf: {
39 | rules: [
40 | {
41 | type: 'match[password]'
42 | }
43 | ]
44 | },
45 | domain: {
46 | rules: [
47 | {
48 | type: 'regExp[/^[a-zA-Z0-9-_\.]+$/]'
49 | }
50 | ]
51 | }
52 | },
53 | actions: {
54 | nextStep: function() {
55 | var self = this;
56 | Ember.$('#user-form').form({
57 | fields: this.get('fields'),
58 | keyboardShortcuts: false,
59 | onSuccess: function() {
60 | self.transitionToRoute("firstrun.settings");
61 | }
62 | });
63 | Ember.$('#user-form').form('validate form');
64 | }
65 | }
66 | });
67 |
--------------------------------------------------------------------------------
/app/controllers/index.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 |
3 |
4 | export default Ember.Controller.extend({
5 | sortBy: ['name'],
6 | sortedApps: Ember.computed.sort('model', 'sortBy'),
7 | filteredApps: Ember.computed.filterBy('sortedApps', 'displayInMenu', true),
8 | actions: {
9 | openApplication: function(app) {
10 | if (app.get('type') === 'website') {
11 | this.transitionToRoute('websites', {
12 | queryParams: {filter: app.get('name')}
13 | });
14 | } else if (app.get('type') === 'fileshare') {
15 | this.transitionToRoute('tools.shares.shares');
16 | } else {
17 | this.transitionToRoute('app.' + app.get('id'));
18 | }
19 | }
20 | }
21 | });
22 |
--------------------------------------------------------------------------------
/app/controllers/login.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 |
4 | export default Ember.Controller.extend({
5 | loginMessage: "",
6 | actions: {
7 | authenticate: function() {
8 | var credentials = this.getProperties('identification', 'password'),
9 | authenticator = 'simple-auth-authenticator:jwt';
10 | this.controllerFor("login").set("isLoading", true);
11 | this.set("loginMessage", "");
12 | this.get('session').authenticate(authenticator, credentials);
13 | }
14 | }
15 | });
16 |
--------------------------------------------------------------------------------
/app/controllers/system.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'System', icon: 'settings'},
5 | breadCrumbPath: false
6 | });
7 |
--------------------------------------------------------------------------------
/app/controllers/system/backups/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: Ember.computed("model.id", "model.icon", {
5 | get() {
6 | return {name: this.get("model.id"), icon: this.get("model.icon")};
7 | }
8 | }),
9 | actions: {
10 | openModal: function(name) {
11 | Ember.$('.ui.' + name + '.modal').modal('show');
12 | },
13 | deleteBackup: function() {
14 | var self = this;
15 | Ember.$('.ui.delete-backup.modal').modal('hide', function() {
16 | self.get('model').destroyRecord();
17 | self.transitionToRoute('system.backups');
18 | });
19 | },
20 | restoreBackup: function() {
21 | var self = this;
22 | this.set('model.isReady', false);
23 | this.get('model').save();
24 | Ember.$('.ui.delete-backup.modal').modal('hide', function() {
25 | self.transitionToRoute('system.backups');
26 | });
27 | }
28 | }
29 | });
30 |
--------------------------------------------------------------------------------
/app/controllers/system/networks/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: Ember.computed("model.id", {
5 | get() {
6 | return {name: this.get("model.id"), icon: 'sitemap'};
7 | }
8 | }),
9 | iface: function() {
10 | return this.get('netifaces').findBy('id', this.get('model.config').interface);
11 | }.property('netifaces'),
12 | address: function() {
13 | var addr = this.get('iface.up')?this.get('iface.ip')[0]:{addr: "None", netmask: "None"};
14 | return addr.addr+"/"+addr.netmask;
15 | }.property('iface'),
16 | actions: {
17 | openModal: function(name) {
18 | Ember.$('.ui.' + name + '.modal').modal('show');
19 | },
20 | deleteNet: function() {
21 | var self = this;
22 | Ember.$('.ui.delete-net.modal').modal('hide', function() {
23 | self.get('model').destroyRecord();
24 | self.transitionToRoute('system.networks');
25 | });
26 | this.transitionToRoute('system.networks');
27 | }
28 | }
29 | });
30 |
--------------------------------------------------------------------------------
/app/controllers/system/roles.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | applicationController: Ember.inject.controller('application'),
5 | currentRouteName: Ember.computed.alias('applicationController.currentRouteName'),
6 |
7 | navName: function() {
8 | switch(this.get('currentRouteName')) {
9 | case 'system.roles.users.index':
10 | return 'User';
11 | case 'system.roles.groups.index':
12 | return 'Group';
13 | case 'system.roles.domains.index':
14 | return 'Domain';
15 | default:
16 | return '';
17 | }
18 | }.property('currentRouteName'),
19 | navIcon: function() {
20 | switch(this.get('currentRouteName')) {
21 | case 'system.roles.users.index':
22 | return 'user';
23 | case 'system.roles.groups.index':
24 | return 'group';
25 | case 'system.roles.domains.index':
26 | return 'code';
27 | default:
28 | return '';
29 | }
30 | }.property('currentRouteName'),
31 | navLink: function() {
32 | switch(this.get('currentRouteName')) {
33 | case 'system.roles.users.index':
34 | return 'system.roles.users.add';
35 | case 'system.roles.groups.index':
36 | return 'system.roles.groups.add';
37 | case 'system.roles.domains.index':
38 | return 'system.roles.domains.add';
39 | default:
40 | return '';
41 | }
42 | }.property('currentRouteName')
43 | });
44 |
--------------------------------------------------------------------------------
/app/controllers/system/roles/domains.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'Users, Groups and Domains', icon: 'group'},
5 | selectedDomain: null,
6 | actions: {
7 | openModal: function(name, domain) {
8 | this.set('selectedDomain', domain);
9 | Ember.$('.ui.' + name + '.modal').modal('show');
10 | },
11 | deleteDomain: function() {
12 | this.get('selectedDomain').destroyRecord();
13 | this.set('selectedDomain', null);
14 | },
15 | clearModal: function() {
16 | this.set('selectedDomain', null);
17 | }
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/controllers/system/roles/domains/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../../utils/handle-model-error';
3 | import cardColor from '../../../../utils/card-color';
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: {name: 'New domain', icon: 'code'},
8 | cardColor: cardColor(),
9 | fields: {
10 | domain: ['regExp[/^[a-zA-Z0-9-_\.]+$/]']
11 | },
12 | actions: {
13 | save: function(){
14 | var self = this;
15 | var domain = this.store.createRecord('domain', {
16 | id: this.get('name'),
17 | cardColor: this.get('cardColor')
18 | });
19 | var promise = domain.save();
20 | promise.then(function() {
21 | self.transitionToRoute("system.roles.domains");
22 | }, function(e) {
23 | handleModelError(self, e);
24 | domain.deleteRecord();
25 | });
26 | },
27 | redirect: function() {
28 | this.set('name', '');
29 | this.transitionToRoute('system.roles.domains');
30 | }
31 | }
32 | });
33 |
--------------------------------------------------------------------------------
/app/controllers/system/roles/groups.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'Users, Groups and Domains', icon: 'group'},
5 | selectedGroup: null,
6 | actions: {
7 | openModal: function(name, group) {
8 | this.set('selectedGroup', group);
9 | Ember.$('.ui.' + name + '.modal').modal('show');
10 | },
11 | deleteGroup: function() {
12 | this.get('selectedGroup').destroyRecord();
13 | this.set('selectedGroup', null);
14 | },
15 | clearModal: function() {
16 | this.set('selectedGroup', null);
17 | }
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/controllers/system/roles/groups/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../../utils/handle-model-error';
3 | import cardColor from '../../../../utils/card-color';
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: {name: 'New group', icon: 'group'},
8 | newGroup: {cardColor: cardColor()},
9 | fields: {
10 | name: ['minLength[4]', 'empty']
11 | },
12 | actions: {
13 | save: function() {
14 | var self = this;
15 | var group = self.store.createRecord('group', {
16 | name: self.get('newGroup').name,
17 | users: self.get('newGroup').users,
18 | cardColor: self.get('newGroup').cardColor
19 | });
20 | var promise = group.save();
21 | promise.then(function() {
22 | self.set('newGroup', {cardColor: cardColor()});
23 | self.transitionToRoute("system.roles.groups");
24 | }, function(e){
25 | handleModelError(self, e);
26 | group.deleteRecord();
27 | });
28 | },
29 | redirect: function() {
30 | this.set('newGroup', {cardColor: cardColor()});
31 | this.transitionToRoute('system.roles.groups');
32 | }
33 | }
34 | });
35 |
--------------------------------------------------------------------------------
/app/controllers/system/roles/groups/edit.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../../utils/handle-model-error';
3 |
4 |
5 | export default Ember.Controller.extend({
6 | breadCrumb: Ember.computed("model.name", {
7 | get() {
8 | return {name: this.get("model.name"), icon: 'group'};
9 | }
10 | }),
11 | actions: {
12 | save: function(){
13 | var self = this;
14 | var group = this.get('model');
15 | group.set('isReady', false);
16 | var promise = group.save();
17 | promise.then(function(){
18 | self.transitionToRoute("system.roles.groups");
19 | }, function(e){
20 | handleModelError(self, e);
21 | });
22 | },
23 | redirect: function() {
24 | this.get('model').rollback();
25 | this.transitionToRoute('system.roles.groups');
26 | },
27 | openModal: function(name) {
28 | Ember.$('.ui.' + name + '.modal').modal('show');
29 | },
30 | deleteGroup: function() {
31 | var self = this;
32 | this.get('model').destroyRecord();
33 | Ember.$('.ui.delete-group.modal').modal('hide', function() {
34 | self.transitionToRoute('system.roles.groups');
35 | });
36 | }
37 | }
38 | });
39 |
--------------------------------------------------------------------------------
/app/controllers/system/roles/users.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'Users, Groups and Domains', icon: 'group'},
5 | selectedUser: null,
6 | actions: {
7 | openModal: function(name, user) {
8 | this.set('selectedUser', user);
9 | Ember.$('.ui.' + name + '.modal').modal('show');
10 | },
11 | deleteUser: function() {
12 | this.get('selectedUser').destroyRecord();
13 | this.set('selectedUser', null);
14 | },
15 | clearModal: function() {
16 | this.set('selectedUser', null);
17 | }
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/controllers/system/security.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 |
3 |
4 | export default Ember.ObjectController.extend({
5 | applicationController: Ember.inject.controller('application'),
6 | breadCrumb: {name: 'Security', icon: 'shield'},
7 | isFirewallPage: function() {
8 | return this.get('applicationController.currentRouteName') === 'system.security.firewall.index';
9 | }.property('applicationController.currentRouteName')
10 | });
11 |
--------------------------------------------------------------------------------
/app/controllers/system/security/firewall.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../utils/handle-model-error';
3 |
4 |
5 | export default Ember.Controller.extend({
6 | actions: {
7 | allow: function(policy) {
8 | var self = this;
9 | policy.set('policy', 2);
10 | policy.set('isReady', false);
11 | var promise = policy.save();
12 | promise.then(function(){}, function(e){
13 | handleModelError(self, e);
14 | });
15 | },
16 | local: function(policy) {
17 | var self = this;
18 | policy.set('policy', 1);
19 | policy.set('isReady', false);
20 | var promise = policy.save();
21 | promise.then(function(){}, function(e){
22 | handleModelError(self, e);
23 | });
24 | },
25 | deny: function(policy) {
26 | var self = this;
27 | policy.set('policy', 0);
28 | policy.set('isReady', false);
29 | var promise = policy.save();
30 | promise.then(function(){}, function(e){
31 | handleModelError(self, e);
32 | });
33 | },
34 | openModal: function(name, policy) {
35 | this.set('selectedPolicy', policy);
36 | Ember.$('.ui.' + name + '.modal').modal('show');
37 | },
38 | deletePolicy: function() {
39 | this.get('selectedPolicy').destroyRecord();
40 | }
41 | }
42 | });
43 |
--------------------------------------------------------------------------------
/app/controllers/system/services.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import handleModelError from '../../utils/handle-model-error';
3 |
4 |
5 | export default Ember.ObjectController.extend({
6 | breadCrumb: {name: 'Services', icon: 'tasks'},
7 | queryParams: ['filter'],
8 | filter: null,
9 | filteredServices: Ember.computed.filter('model', function(i) {
10 | return this.get('filter') ? i.get('id').toLowerCase().indexOf(this.get('filter').toLowerCase()) >= 0 : true;
11 | }).property('model', 'filter'),
12 | actions: {
13 | clearFilter: function() {
14 | this.set('filter', null);
15 | },
16 | toggleState: function(svc) {
17 | var self = this;
18 | var op = svc.get('running')?'stop':'start';
19 | svc.set('isReady', false);
20 | svc.set('operation', op);
21 | var promise = svc.save();
22 | promise.then(function(){}, function(e){
23 | handleModelError(self, e);
24 | svc.rollback();
25 | });
26 | },
27 | toggleFileState: function(svc) {
28 | var self = this;
29 | var op = svc.get('enabled')?'disable':'enable';
30 | svc.set('isReady', false);
31 | svc.set('operation', op);
32 | var promise = svc.save();
33 | promise.then(function(){}, function(e){
34 | handleModelError(self, e);
35 | svc.rollback();
36 | });
37 | }
38 | }
39 | });
40 |
--------------------------------------------------------------------------------
/app/controllers/system/updates.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 |
3 |
4 | export default Ember.ObjectController.extend({
5 | breadCrumb: {name: 'Updates', icon: 'star'},
6 | sortBy: ['id:desc'],
7 | updates: Ember.computed.sort('model', 'sortBy')
8 | });
9 |
--------------------------------------------------------------------------------
/app/controllers/tools.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'Tools', icon: 'configure'},
5 | breadCrumbPath: false
6 | });
7 |
--------------------------------------------------------------------------------
/app/controllers/tools/certificates/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../utils/handle-model-error';
3 |
4 |
5 | export default Ember.Controller.extend({
6 | breadCrumb: Ember.computed("model.id", {
7 | get() {
8 | return {name: this.get("model.id"), icon: 'certificate'};
9 | }
10 | }),
11 | actions: {
12 | save: function(){
13 | var self = this,
14 | cert = this.get('model');
15 | cert.set('isReady', false);
16 | var promise = cert.save();
17 | promise.then(function(){
18 | this.transitionToRoute('tools.certificates');
19 | }, function(e){
20 | handleModelError(self, e);
21 | });
22 | },
23 | redirect: function() {
24 | this.get('model').rollback();
25 | this.transitionToRoute('tools.certificates');
26 | },
27 | openModal: function(name) {
28 | Ember.$('.ui.' + name + '.modal').modal('show');
29 | },
30 | deleteCert: function() {
31 | var self = this;
32 | this.get('model').destroyRecord();
33 | Ember.$('.ui.delete-cert.modal').modal('hide', function() {
34 | self.transitionToRoute('tools.certificates');
35 | });
36 | }
37 | }
38 | });
39 |
--------------------------------------------------------------------------------
/app/controllers/tools/databases.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'Databases', icon: 'database'},
5 | queryParams: ['filter'],
6 | filter: null,
7 |
8 | databasesFilter: function() {
9 | return this.get('filter') === null;
10 | }.property('filter'),
11 | usersFilter: function() {
12 | return this.get('filter') === 'users';
13 | }.property('filter'),
14 |
15 | actions: {
16 | setFilter: function(filter) {
17 | if (filter === 'users') {
18 | this.set('filter', 'users');
19 | } else {
20 | this.set('filter', null);
21 | }
22 | },
23 | openModal: function(name, db) {
24 | this.set('selectedDb', db);
25 | this.set('selectedUser', db);
26 | Ember.$('.ui.' + name + '.modal').modal('show');
27 | },
28 | deleteDb: function() {
29 | this.get('selectedDb').destroyRecord();
30 | this.set('selectedDb', null);
31 | this.set('selectedUser', null);
32 | },
33 | deleteUser: function() {
34 | this.get('selectedUser').destroyRecord();
35 | this.set('selectedDb', null);
36 | this.set('selectedUser', null);
37 | },
38 | clearModal: function() {
39 | this.set('selectedDb', null);
40 | this.set('selectedUser', null);
41 | }
42 | }
43 | });
44 |
--------------------------------------------------------------------------------
/app/controllers/tools/databases/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../utils/handle-model-error';
3 | import cardColor from '../../../utils/card-color';
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: {name: 'New database', icon: 'database'},
8 | cardColor: function() {
9 | return cardColor();
10 | }.property(),
11 | fields: {
12 | name: ['empty']
13 | },
14 | actions: {
15 | save: function(){
16 | var self = this;
17 | var db = this.store.createRecord('database', {
18 | id: this.get('id'),
19 | databaseType: this.get('dbType') || this.get('dbTypes.firstObject')
20 | });
21 | var promise = db.save();
22 | promise.then(function(){
23 | self.setProperties({id: '', dbType: self.get('dbTypes.firstObject')});
24 | self.transitionToRoute("tools.databases");
25 | }, function(e){
26 | handleModelError(self, e);
27 | db.deleteRecord();
28 | });
29 | },
30 | redirect: function() {
31 | this.setProperties({id: '', dbType: this.get('dbTypes.firstObject')});
32 | this.transitionToRoute('tools.databases');
33 | }
34 | }
35 | });
36 |
--------------------------------------------------------------------------------
/app/controllers/tools/databases/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../utils/handle-model-error';
3 | import ENV from "../../../config/environment";
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: Ember.computed("model.id", {
8 | get() {
9 | return {name: this.get("model.id"), icon: 'database'};
10 | }
11 | }),
12 | actions: {
13 | execute: function(){
14 | var self = this;
15 | if (!this.get('execInput')) {
16 | return false;
17 | }
18 | Ember.$.ajax(`${ENV.APP.krakenHost}/api/databases/${this.get('model.id')}`, {
19 | data: JSON.stringify({"database": {"execute": this.get('execInput')}}),
20 | type: 'PUT',
21 | contentType: 'application/json',
22 | success: function(j){
23 | self.set('execOutput', j.database.result);
24 | },
25 | error: function(e){
26 | handleModelError(self, e);
27 | }
28 | });
29 | },
30 | openModal: function(name) {
31 | Ember.$('.ui.' + name + '.modal').modal('show');
32 | },
33 | deleteDb: function() {
34 | var self = this;
35 | Ember.$('.ui.delete-db.modal').modal('hide', function() {
36 | self.get('model').destroyRecord();
37 | self.transitionToRoute('tools.databases');
38 | });
39 | }
40 | }
41 | });
42 |
--------------------------------------------------------------------------------
/app/controllers/tools/shares.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | applicationController: Ember.inject.controller('application'),
5 | currentRouteName: Ember.computed.alias('applicationController.currentRouteName'),
6 |
7 | navName: function() {
8 | switch(this.get('currentRouteName')) {
9 | case 'tools.shares.shares.index':
10 | return 'Share';
11 | case 'tools.shares.mounts.index':
12 | return 'Mount';
13 | default:
14 | return '';
15 | }
16 | }.property('currentRouteName'),
17 | navIcon: function() {
18 | switch(this.get('currentRouteName')) {
19 | case 'tools.shares.shares.index':
20 | return 'external share';
21 | case 'tools.shares.mounts.index':
22 | return 'folder';
23 | default:
24 | return '';
25 | }
26 | }.property('currentRouteName'),
27 | navLink: function() {
28 | switch(this.get('currentRouteName')) {
29 | case 'tools.shares.shares.index':
30 | return 'tools.shares.shares.add';
31 | case 'tools.shares.mounts.index':
32 | return 'tools.shares.mounts.add';
33 | default:
34 | return '';
35 | }
36 | }.property('currentRouteName')
37 | });
38 |
--------------------------------------------------------------------------------
/app/controllers/tools/shares/mounts.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'File Shares', icon: 'external share'},
5 | actions: {
6 | openModal: function(name, mount) {
7 | this.set('selectedMount', mount);
8 | Ember.$('.ui.' + name + '.modal').modal('show');
9 | },
10 | deleteMount: function() {
11 | this.get('selectedMount').destroyRecord();
12 | this.set('selectedMount', null);
13 | }
14 | }
15 | });
16 |
--------------------------------------------------------------------------------
/app/controllers/tools/shares/mounts/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../../utils/handle-model-error';
3 | import cardColor from '../../../../utils/card-color';
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: {name: 'New mount', icon: 'folder'},
8 | cardColor: function() {
9 | return cardColor();
10 | }.property(),
11 | fields: {
12 | name: ['empty'],
13 | path: ['regExp[/^(/[^/ ]*)+/?$/]', 'empty'],
14 | networkPath: ['empty']
15 | },
16 | validShareTypes: Ember.computed.filterBy('model', 'supportsMounts', true),
17 | actions: {
18 | save: function(){
19 | var self = this;
20 | var mount = this.store.createRecord('mount', {
21 | shareType: this.get('shareType') || this.get('validShareTypes.firstObject'),
22 | path: this.get('path'),
23 | networkPath: this.get('networkPath'),
24 | readOnly: this.get('readOnly') || false,
25 | username: this.get('username'),
26 | password: this.get('password'),
27 | isReady: false
28 | });
29 | var promise = mount.save();
30 | promise.then(function(){
31 | self.transitionToRoute("tools.shares.mounts");
32 | }, function(e){
33 | handleModelError(self, e);
34 | mount.deleteRecord();
35 | });
36 | },
37 | redirect: function() {
38 | this.transitionToRoute('tools.shares.mounts');
39 | }
40 | }
41 | });
42 |
--------------------------------------------------------------------------------
/app/controllers/tools/shares/shares.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'File Shares', icon: 'external share'},
5 | actions: {
6 | openModal: function(name, share) {
7 | this.set('selectedShare', share);
8 | Ember.$('.ui.' + name + '.modal').modal('show');
9 | },
10 | deleteShare: function() {
11 | this.get('selectedShare').destroyRecord();
12 | this.set('selectedShare', null);
13 | }
14 | }
15 | });
16 |
--------------------------------------------------------------------------------
/app/controllers/tools/shares/shares/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import handleModelError from '../../../../utils/handle-model-error';
3 | import cardColor from '../../../../utils/card-color';
4 |
5 |
6 | export default Ember.Controller.extend({
7 | breadCrumb: {name: 'New share', icon: 'external share'},
8 | validUsers: Ember.A(),
9 | cardColor: function() {
10 | return cardColor();
11 | }.property(),
12 | fields: {
13 | name: ['empty'],
14 | path: ['regExp[/^(/[^/ ]*)+/?$/]', 'empty']
15 | },
16 | actions: {
17 | save: function(){
18 | var self = this;
19 | var share = this.store.createRecord('share', {
20 | id: this.get('name'),
21 | shareType: this.get('shareType') || this.get('model.shareTypes.firstObject'),
22 | path: this.get('path'),
23 | comment: this.get('comment') || "",
24 | validUsers: this.get('validUsers'),
25 | readOnly: this.get('readOnly') || false,
26 | isReady: false
27 | });
28 | var promise = share.save();
29 | promise.then(function(){
30 | self.transitionToRoute("tools.shares.shares");
31 | }, function(e){
32 | handleModelError(self, e);
33 | share.deleteRecord();
34 | });
35 | },
36 | redirect: function() {
37 | this.transitionToRoute('tools.shares.shares');
38 | }
39 | }
40 | });
41 |
--------------------------------------------------------------------------------
/app/controllers/tools/shares/shares/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: Ember.computed("model.id", {
5 | get() {
6 | return {name: this.get("model.id"), icon: 'external share'};
7 | }
8 | }),
9 | actions: {
10 | openModal: function(name) {
11 | Ember.$('.ui.' + name + '.modal').modal('show');
12 | },
13 | deleteShare: function() {
14 | var self = this;
15 | Ember.$('.ui.delete-share.modal').modal('hide', function() {
16 | self.get('model').destroyRecord();
17 | self.transitionToRoute('tools.shares.shares');
18 | });
19 | }
20 | }
21 | });
22 |
--------------------------------------------------------------------------------
/app/controllers/tools/stats.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | breadCrumb: {name: 'Statistics', icon: 'line chart'},
5 | cpuPct: 0,
6 | memory: 0,
7 | memoryPct: 0,
8 | memoryTotal: 0,
9 | swap: 0,
10 | swapPct: 0,
11 | swapTotal: 0,
12 | load1min: 0,
13 | load5min: 0,
14 | load10min: 0,
15 | temp: 0,
16 | uptimeDays: 0,
17 | uptimeHours: 0,
18 | uptimeMinutes:0,
19 | uptimeSeconds: 0,
20 | disks: Ember.A()
21 | });
22 |
--------------------------------------------------------------------------------
/app/helpers/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/app/helpers/.gitkeep
--------------------------------------------------------------------------------
/app/helpers/format-date-time.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../config/environment";
3 | /* global moment */
4 |
5 |
6 | export default Ember.Helper.helper(function(params){
7 | return new Ember.String.htmlSafe(moment(params[0]).format(`${ENV.APP.dateFormat}, ${ENV.APP.timeFormat}`));
8 | });
9 |
--------------------------------------------------------------------------------
/app/helpers/format-date.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../config/environment";
3 | /* global moment */
4 |
5 |
6 | export default Ember.Helper.helper(function(params){
7 | return new Ember.String.htmlSafe(moment(params[0]).format(ENV.APP.dateFormat));
8 | });
9 |
--------------------------------------------------------------------------------
/app/helpers/format-time.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../config/environment";
3 | /* global moment */
4 |
5 |
6 | export default Ember.Helper.helper(function(params){
7 | return new Ember.String.htmlSafe(moment(params[0]).format(ENV.APP.timeFormat));
8 | });
9 |
--------------------------------------------------------------------------------
/app/helpers/from-now.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | /* global moment */
3 |
4 |
5 | export default Ember.Helper.helper(function(params){
6 | return new Ember.String.htmlSafe(moment(params[0]).fromNow());
7 | });
8 |
--------------------------------------------------------------------------------
/app/helpers/generate-card-color.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import cardColor from '../utils/card-color';
3 |
4 |
5 | export function generateCardColor() {
6 | return new Ember.Handlebars.SafeString(cardColor());
7 | }
8 |
9 | export default Ember.Helper.helper(generateCardColor);
10 |
--------------------------------------------------------------------------------
/app/helpers/size-to-string.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import sizeToString from "../utils/size-to-string";
3 |
4 |
5 | export default Ember.Helper.helper(function(params){
6 | return new Ember.String.htmlSafe(sizeToString(params[0]));
7 | });
8 |
--------------------------------------------------------------------------------
/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | arkOS Genesis
7 |
8 |
9 |
10 | {{content-for 'head'}}
11 |
12 |
13 |
14 |
15 | {{content-for 'head-footer'}}
16 |
17 |
18 | {{content-for 'body'}}
19 |
20 |
21 |
22 |
23 | {{content-for 'body-footer'}}
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/initializers/initial-config.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../config/environment";
3 |
4 |
5 | export default {
6 | name: "initialConfig",
7 | initialize: function() {
8 | Ember.$.getJSON(`${ENV.APP.krakenHost}/api/config`)
9 | .done(function(j) {
10 | ENV.APP.dateFormat = j.config.general.date_format;
11 | ENV.APP.timeFormat = j.config.general.time_format;
12 | ENV.APP.needsFirstRun = !j.config.genesis.firstrun;
13 | })
14 | .fail(function() {
15 | ENV.APP.needsFirstRun = false;
16 | });
17 | }
18 | };
19 |
--------------------------------------------------------------------------------
/app/initializers/notifications.js:
--------------------------------------------------------------------------------
1 | export function initialize(container, application) {
2 | application.inject('component', 'notifications', 'service:notifications');
3 | application.inject('controller', 'notifications', 'service:notifications');
4 | application.inject('route', 'notifications', 'service:notifications');
5 | }
6 |
7 | export default {
8 | name: 'notifications',
9 | initialize
10 | };
11 |
--------------------------------------------------------------------------------
/app/models/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/app/models/.gitkeep
--------------------------------------------------------------------------------
/app/models/address-book.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | name: DS.attr('string'),
7 | filename: DS.attr('string'),
8 | user: DS.attr('string'),
9 | url: DS.attr('string'),
10 | isReady: DS.attr('boolean'),
11 | cardColor: function() {
12 | return cardColor();
13 | }.property()
14 | });
15 |
--------------------------------------------------------------------------------
/app/models/authority.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import ENV from "../config/environment";
3 | import cardColor from "../utils/card-color";
4 |
5 |
6 | export default DS.Model.extend({
7 | expiry: DS.attr('date'),
8 | keylength: DS.attr('number'),
9 | keytype: DS.attr('string'),
10 | md5: DS.attr('string'),
11 | sha1: DS.attr('string'),
12 | certType: function() {
13 | return 'authority';
14 | }.property(),
15 | isAuthority: function() {
16 | return this.get('certType') === 'authority';
17 | }.property('certType'),
18 | typeString: function() {
19 | return `${this.get('keylength')}-bit ${this.get('keytype')} Authority`;
20 | }.property('keylength', 'keytype'),
21 | downloadHref: function() {
22 | return `${ENV.APP.krakenHost}/api/authorities/${this.get('id')}?download=true`;
23 | }.property('id'),
24 | cardColor: function() {
25 | return cardColor();
26 | }.property(),
27 | isReady: function() {
28 | return true;
29 | }.property()
30 | });
31 |
--------------------------------------------------------------------------------
/app/models/backup.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | pid: DS.attr('string'),
7 | type: DS.attr('string'),
8 | siteType: DS.attr('string'),
9 | icon: DS.attr('string'),
10 | version: DS.attr('string'),
11 | path: DS.attr('string'),
12 | time: DS.attr('date'),
13 | size: DS.attr('number'),
14 | isReady: DS.attr('boolean', {defaultValue: false}),
15 | cardColor: function() {
16 | return cardColor();
17 | }.property()
18 | });
19 |
--------------------------------------------------------------------------------
/app/models/calendar.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | name: DS.attr('string'),
7 | filename: DS.attr('string'),
8 | user: DS.attr('string'),
9 | url: DS.attr('string'),
10 | isReady: DS.attr('boolean'),
11 | cardColor: function() {
12 | return cardColor();
13 | }.property()
14 | });
15 |
--------------------------------------------------------------------------------
/app/models/certificate.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | domain: DS.belongsTo('domain', {async: true}),
7 | expiry: DS.attr('date'),
8 | keylength: DS.attr('number'),
9 | keytype: DS.attr('string'),
10 | md5: DS.attr('string'),
11 | sha1: DS.attr('string'),
12 | country: DS.attr('string'),
13 | state: DS.attr('string'),
14 | locale: DS.attr('string'),
15 | email: DS.attr('string'),
16 | isAcme: DS.attr('boolean'),
17 | assigns: DS.attr(),
18 | isReady: DS.attr('boolean', {defaultValue: false}),
19 | certType: function() {
20 | return 'certificate';
21 | }.property(),
22 | isAuthority: function() {
23 | return this.get('certType') === 'authority';
24 | }.property('certType'),
25 | typeString: function() {
26 | return `${this.get('keylength')}-bit ${this.get('keytype')}`;
27 | }.property('keylength', 'keytype'),
28 | cardColor: function() {
29 | return cardColor();
30 | }.property()
31 | });
32 |
--------------------------------------------------------------------------------
/app/models/database-type.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 |
3 |
4 | export default DS.Model.extend({
5 | name: DS.attr('string'),
6 | state: DS.attr('boolean'),
7 | supportsUsers: DS.attr('boolean', {defaultValue: false})
8 | });
9 |
--------------------------------------------------------------------------------
/app/models/database-user.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | databaseType: DS.belongsTo('database-type'),
7 | permissions: DS.attr('string'),
8 | isReady: DS.attr('boolean', {defaultValue: false}),
9 | cardColor: function() {
10 | return cardColor();
11 | }.property()
12 | });
13 |
--------------------------------------------------------------------------------
/app/models/database.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import ENV from "../config/environment";
3 | import cardColor from "../utils/card-color";
4 |
5 |
6 | export default DS.Model.extend({
7 | size: DS.attr('number'),
8 | databaseType: DS.belongsTo('database-type'),
9 | downloadHref: function() {
10 | return `${ENV.APP.krakenHost}/api/databases/${this.get('id')}?download=true`;
11 | }.property('id'),
12 | isReady: DS.attr('boolean', {defaultValue: false}),
13 | cardColor: function() {
14 | return cardColor();
15 | }.property()
16 | });
17 |
--------------------------------------------------------------------------------
/app/models/device.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | name: DS.attr('string'),
7 | deviceID: DS.attr('string'),
8 | certName: DS.attr('string'),
9 | compression: DS.attr('string'),
10 | introducer: DS.attr('boolean'),
11 | addresses: DS.attr(),
12 | isMainDevice: DS.attr('boolean'),
13 | selectId: function() {
14 | return this.get('deviceID');
15 | }.property('deviceID'),
16 | selectText: function() {
17 | return this.get('name');
18 | }.property('name'),
19 | cardColor: function() {
20 | return cardColor();
21 | }.property(),
22 | isReady: DS.attr('boolean')
23 | });
24 |
--------------------------------------------------------------------------------
/app/models/domain.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | isReady: DS.attr('boolean', {defaultValue: false}),
7 | cardColor: function() {
8 | return cardColor();
9 | }.property()
10 | });
11 |
--------------------------------------------------------------------------------
/app/models/filesystem.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | type: DS.attr('string'),
7 | isVirtual: function() {
8 | return this.get('type') === "virtual";
9 | }.property('type'),
10 | size: DS.attr('number'),
11 | path: DS.attr('string'),
12 | mountpoint: DS.attr('string'),
13 | mounted: function() {
14 | return !!this.get('mountpoint');
15 | }.property('mountpoint'),
16 | isTooImportant: function() {
17 | return ["/", "/boot"].indexOf(this.get('mountpoint'))>=0;
18 | }.property('mountpoint'),
19 | fstype: DS.attr('string'),
20 | crypt: DS.attr('boolean'),
21 | enabled: DS.attr('boolean'),
22 | passwd: DS.attr('string'),
23 | operation: DS.attr('string'),
24 | isReady: DS.attr('boolean', {defaultValue: false}),
25 | cardColor: function() {
26 | return cardColor();
27 | }.property()
28 | });
29 |
--------------------------------------------------------------------------------
/app/models/folder.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | label: DS.attr('string'),
7 | type: DS.attr('string'),
8 | path: DS.attr('string'),
9 | order: DS.attr('string'),
10 | hashers: DS.attr('number'),
11 | invalid: DS.attr('string'),
12 | ignorePerms: DS.attr('boolean', {defaultValue: false}),
13 | devices: DS.attr(),
14 | isReadOnly: function() {
15 | return this.get('type') === 'readonly';
16 | }.property('type'),
17 | lenientMTimes: DS.attr('boolean', {defaultValue: false}),
18 | rescanIntervalS: DS.attr('number'),
19 | copiers: DS.attr('number'),
20 | autoNormalize: DS.attr('boolean', {defaultValue: false}),
21 | versioning: DS.attr(),
22 | hasVersioning: function() {
23 | return !!this.get('versioning.type');
24 | }.property('versioning'),
25 | pullers: DS.attr('number'),
26 | cardColor: function() {
27 | return cardColor();
28 | }.property(),
29 | isReady: DS.attr('boolean')
30 | });
31 |
--------------------------------------------------------------------------------
/app/models/group.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | name: DS.attr('string'),
7 | users: DS.attr(),
8 | isReady: DS.attr('boolean', {defaultValue: false}),
9 | cardColor: function() {
10 | return cardColor();
11 | }.property()
12 | });
13 |
--------------------------------------------------------------------------------
/app/models/jail.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 |
3 |
4 | export default DS.Model.extend({
5 | isReady: DS.attr('boolean', {defaultValue: false})
6 | });
7 |
--------------------------------------------------------------------------------
/app/models/mount.js:
--------------------------------------------------------------------------------
1 | import DS from 'ember-data';
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | shareType: DS.belongsTo('share-type', {async: true}),
7 | path: DS.attr('string'),
8 | networkPath: DS.attr('string'),
9 | isMounted: DS.attr('boolean'),
10 | readOnly: DS.attr('boolean'),
11 | username: DS.attr('string'),
12 | password: DS.attr('string'),
13 | isReady: DS.attr('boolean'),
14 | cardColor: function() {
15 | return cardColor();
16 | }.property()
17 | });
18 |
--------------------------------------------------------------------------------
/app/models/netiface.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 |
3 |
4 | export default DS.Model.extend({
5 | ip: DS.attr(),
6 | rx: DS.attr('number'),
7 | tx: DS.attr('number'),
8 | up: DS.attr('boolean'),
9 | type: DS.attr('string'),
10 | prettyType: function() {
11 | return `${this.get('type').capitalize()} (${this.get('id')})`;
12 | }.property('id', 'type')
13 | });
14 |
--------------------------------------------------------------------------------
/app/models/network.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | connected: DS.attr('boolean'),
7 | enabled: DS.attr('boolean'),
8 | config: DS.attr(),
9 | type: function() {
10 | return this.get('config').connection === "wireless" ? "Wireless" : "Ethernet";
11 | }.property('config'),
12 | typeIcon: function() {
13 | return this.get('config').connection === "wireless" ? "wifi icon" : "sitemap icon";
14 | }.property('config'),
15 | cardColor: function() {
16 | return cardColor();
17 | }.property(),
18 | operation: DS.attr('string'),
19 | isReady: DS.attr('boolean', {defaultValue: false})
20 | });
21 |
--------------------------------------------------------------------------------
/app/models/package.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 |
3 |
4 | export default DS.Model.extend({
5 | version: DS.attr('string'),
6 | upgradable: DS.attr('string'),
7 | isUpgradable: function() {
8 | return this.get('upgradable') !== "false";
9 | }.property('upgradable'),
10 | architecture: DS.attr('string'),
11 | buildDate: DS.attr('string'),
12 | conflictsWith: DS.attr('string'),
13 | dependsOn: DS.attr('string'),
14 | description: DS.attr('string'),
15 | groups: DS.attr('string'),
16 | installDate: DS.attr('string'),
17 | installReason: DS.attr('string'),
18 | installScript: DS.attr('string'),
19 | installedSize: DS.attr('string'),
20 | licenses: DS.attr('string'),
21 | optionalDeps: DS.attr('string'),
22 | optionalFor: DS.attr('string'),
23 | packager: DS.attr('string'),
24 | provides: DS.attr('string'),
25 | replaces: DS.attr('string'),
26 | requiredBy: DS.attr('string'),
27 | url: DS.attr('string'),
28 | validatedBy: DS.attr('string'),
29 | repo: DS.attr('string'),
30 | installed: DS.attr('boolean', {defaultValue: false}),
31 | operation: DS.attr('string', {defaultValue: ""}),
32 | toInstall: function() {
33 | return this.get('operation') === "install";
34 | }.property('operation'),
35 | toRemove: function() {
36 | return this.get('operation') === "remove";
37 | }.property('operation')
38 | });
39 |
--------------------------------------------------------------------------------
/app/models/point.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 |
3 |
4 | export default DS.Model.extend({
5 | icon: DS.attr('string'),
6 | type: DS.attr('string'),
7 | path: DS.attr('string')
8 | });
9 |
--------------------------------------------------------------------------------
/app/models/service.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 |
3 |
4 | export default DS.Model.extend({
5 | running: DS.attr('boolean'),
6 | enabled: DS.attr('boolean'),
7 | state: DS.attr('string'),
8 | type: DS.attr('string'),
9 | displayType: function() {
10 | return this.get('type').capitalize();
11 | }.property('type'),
12 | canManage: function() {
13 | return ["arkos-redis", "kraken", "slapd"].indexOf(this.get('id')) === -1;
14 | }.property('id'),
15 | operation: DS.attr('string'),
16 | cfg: DS.attr(),
17 | isReady: DS.attr('boolean', {defaultValue: false})
18 | });
19 |
--------------------------------------------------------------------------------
/app/models/share-type.js:
--------------------------------------------------------------------------------
1 | import DS from 'ember-data';
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | name: DS.attr('string'),
7 | icon: DS.attr('string'),
8 | supportsValidUsers: function() {
9 | return this.get('id') !== 'fs-nfs';
10 | }.property('id'),
11 | supportsComments: function() {
12 | return this.get('id') === 'fs-samba';
13 | }.property('id'),
14 | supportsMounts: function() {
15 | return this.get('id') !== 'fs-afp';
16 | }.property('id'),
17 | cardColor: function() {
18 | return cardColor();
19 | }.property()
20 | });
21 |
--------------------------------------------------------------------------------
/app/models/share.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | shareType: DS.belongsTo('share-type', {async: true}),
7 | comment: DS.attr('string'),
8 | path: DS.attr('string'),
9 | validUsers: DS.attr(),
10 | public: DS.attr('boolean'),
11 | readOnly: DS.attr('boolean'),
12 | isReady: DS.attr('boolean'),
13 | cardColor: function() {
14 | return cardColor();
15 | }.property()
16 | });
17 |
--------------------------------------------------------------------------------
/app/models/shared-file.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import ENV from "../config/environment";
3 | import cardColor from "../utils/card-color";
4 |
5 |
6 | export default DS.Model.extend({
7 | name: DS.attr('string'),
8 | path: DS.attr('string'),
9 | fetchCount: DS.attr('number'),
10 | expires: DS.attr('boolean'),
11 | expiresAt: DS.attr('date'),
12 | isReady: DS.attr('boolean'),
13 | url: function() {
14 | return `${ENV.APP.krakenHost}/shared/${this.get('id')}`;
15 | }.property('id'),
16 | cardColor: function() {
17 | return cardColor();
18 | }.property()
19 | });
20 |
--------------------------------------------------------------------------------
/app/models/ssh-key.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 |
3 |
4 | export default DS.Model.extend({
5 | user: DS.attr('string'),
6 | key: DS.attr('string'),
7 | keyId: function() {
8 | return this.get("key").split(" ")[2];
9 | }.property("key")
10 | });
11 |
--------------------------------------------------------------------------------
/app/models/update.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 |
3 |
4 | export default DS.Model.extend({
5 | name: DS.attr('string'),
6 | info: DS.attr('string'),
7 | date: DS.attr('date')
8 | });
9 |
--------------------------------------------------------------------------------
/app/models/user.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | name: DS.attr('string'),
7 | firstName: DS.attr('string'),
8 | lastName: DS.attr('string'),
9 | fullName: DS.attr('string'),
10 | admin: DS.attr('boolean', {defaultValue: false}),
11 | sudo: DS.attr('boolean', {defaultValue: false}),
12 | domain: DS.belongsTo('domain', {async: true}),
13 | passwd: DS.attr('string'),
14 | isReady: DS.attr('boolean', {defaultValue: false}),
15 | mailAddresses: DS.attr(),
16 | selectId: function() {
17 | return this.get('name');
18 | }.property('name'),
19 | selectText: function() {
20 | return this.get('name');
21 | }.property('name'),
22 | cardColor: function() {
23 | return cardColor();
24 | }.property()
25 | });
26 |
--------------------------------------------------------------------------------
/app/models/website.js:
--------------------------------------------------------------------------------
1 | import DS from "ember-data";
2 | import cardColor from "../utils/card-color";
3 |
4 |
5 | export default DS.Model.extend({
6 | icon: DS.attr('string'),
7 | app: DS.belongsTo('app', {async: true}),
8 | appName: DS.attr('string'),
9 | properName: function() {
10 | if (!!this.get('app') && this.get('app.type') !== 'website') {
11 | return this.get("appName");
12 | }
13 | return this.get("id");
14 | }.property('id', 'app'),
15 | path: DS.attr('string'),
16 | domain: DS.belongsTo('domain', {async: true}),
17 | port: DS.attr('number'),
18 | version: DS.attr('string'),
19 | certificate: DS.attr('string'),
20 | database: DS.attr('string'),
21 | php: DS.attr('boolean'),
22 | enabled: DS.attr('boolean'),
23 | extraData: DS.attr(),
24 | operation: DS.attr('string'),
25 | newName: DS.attr('string'),
26 | hasUpdate: DS.attr('boolean'),
27 | isReady: DS.attr('boolean', {defaultValue: false}),
28 | address: function() {
29 | var isHTTPS = !!this.get('certificate'),
30 | port = [80, 443].indexOf(this.get('port'))>=0?"":`:${this.get('port')}`;
31 | return `http${isHTTPS ? 's' : ''}://${this.get('domain.id')}${port}`;
32 | }.property('certificate', 'domain', 'port'),
33 | cardColor: function() {
34 | return cardColor();
35 | }.property()
36 | });
37 |
--------------------------------------------------------------------------------
/app/objects/pollster.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 |
4 | var Pollster = Ember.Object.extend({
5 | interval: function() {
6 | return 2000; // Time between polls (in ms)
7 | }.property().readOnly(),
8 | schedule: function(f, args) {
9 | return Ember.run.later(this, function() {
10 | f.apply(this, [args]);
11 | this.set('timer', this.schedule(f, args));
12 | }, this.get('interval'));
13 | },
14 | stop: function() {
15 | Ember.run.cancel(this.get('timer'));
16 | },
17 | start: function() {
18 | this.set('timer', this.schedule(this.get('onPoll'), this.get('args')));
19 | },
20 | onPoll: function(){
21 | // Do some work
22 | }
23 | });
24 |
25 | export default Pollster;
26 |
--------------------------------------------------------------------------------
/app/resolver.js:
--------------------------------------------------------------------------------
1 | import Resolver from 'ember-resolver';
2 |
3 | export default Resolver;
4 |
--------------------------------------------------------------------------------
/app/routes/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/app/routes/.gitkeep
--------------------------------------------------------------------------------
/app/routes/app/radicale.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../../config/environment";
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | renderTemplate: function() {
8 | this.render('app.radicale', { into: 'application' });
9 | },
10 | model: function() {
11 | return Ember.RSVP.hash({
12 | calendars: this.get('store').find('calendar'),
13 | addressBooks: this.get('store').find('addressBook'),
14 | domains: this.get('store').find('domain'),
15 | status: Ember.$.getJSON(ENV.APP.krakenHost+'/api/apps/radicale/setup')
16 | });
17 | }
18 | });
19 |
--------------------------------------------------------------------------------
/app/routes/app/radicale/new-book.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.store.findAll('user');
8 | },
9 | renderTemplate: function() {
10 | this.render('app.radicale.new-book', { into: 'application' });
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/app/routes/app/radicale/new-cldr.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.store.findAll('user');
8 | },
9 | renderTemplate: function() {
10 | this.render('app.radicale.new-cldr', { into: 'application' });
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/app/routes/app/syncthing.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../../config/environment";
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | model: function() {
8 | return Ember.$.getJSON(`${ENV.APP.krakenHost}/api/apps/syncthing/config`);
9 | },
10 | beforeModel() {
11 | this.transitionTo('app.syncthing.folders');
12 | }
13 | });
14 |
--------------------------------------------------------------------------------
/app/routes/app/syncthing/devices.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get('store').findAll('device');
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/app/syncthing/devices/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('app.syncthing.devices.add', { into: 'application' });
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/app/syncthing/devices/edit.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('app.syncthing.devices.edit', { into: 'application' });
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/app/syncthing/folders.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get('store').findAll('folder');
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/app/syncthing/folders/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('app.syncthing.folders.add', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var devicesPromise = this.store.findAll('device');
12 |
13 | devicesPromise.then(function(devices) {
14 | me.controllerFor('app.syncthing.folders.add').set('devices', devices);
15 | });
16 |
17 | return devicesPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/app/syncthing/folders/edit.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('app.syncthing.folders.edit', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var devicesPromise = this.store.findAll('device');
12 |
13 | devicesPromise.then(function(devices) {
14 | me.controllerFor('app.syncthing.folders.edit').set('devices', devices);
15 | });
16 |
17 | return devicesPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/app/syncthing/settings.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import ENV from "../../../config/environment";
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | model: function() {
8 | return Ember.$.getJSON(`${ENV.APP.krakenHost}/api/apps/syncthing/config`);
9 | }
10 | });
11 |
--------------------------------------------------------------------------------
/app/routes/app/xmpp.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return Ember.RSVP.hash({
8 | domains: this.get('store').findAll('domain'),
9 | service: this.get('store').find('service', 'prosody')
10 | });
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/app/routes/apps.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../config/environment";
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | model: function() {
8 | return this.get('store').findAll('app');
9 | },
10 | actions: {
11 | refresh: function() {
12 | var self = this;
13 | Ember.$.getJSON(ENV.APP.krakenHost+"/api/apps?rescan=true", function(){
14 | self.refresh();
15 | });
16 | },
17 | uninstall: function(app) {
18 | app.set('operation', 'uninstall');
19 | app.set('isReady', false);
20 | app.save();
21 | }
22 | }
23 | });
24 |
--------------------------------------------------------------------------------
/app/routes/apps/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('apps.info', { into: 'application' });
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/firstrun/apps.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get("store").findAll("app");
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/firstrun/confirm.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | });
7 |
--------------------------------------------------------------------------------
/app/routes/firstrun/finish.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | });
7 |
--------------------------------------------------------------------------------
/app/routes/firstrun/settings.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import ENV from "../../config/environment";
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | model: function() {
8 | return Ember.$.getJSON(`${ENV.APP.krakenHost}/api/config`);
9 | }
10 | });
11 |
--------------------------------------------------------------------------------
/app/routes/firstrun/start.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | setupController: function(controller, model) {
7 | this._super(controller, model);
8 | var self = this;
9 | if (!this.get('isScheduled')) {
10 | Ember.run.later(this, function() {
11 | self.send('nextWelcome');
12 | }, 2000);
13 | }
14 | },
15 | actions: {
16 | nextWelcome: function() {
17 | var self = this,
18 | ctrl = this.controllerFor('firstrun.start');
19 | Ember.$('#welcome-text').transition('fade', function() {
20 | var currentIdx = ctrl.get('welcomes').indexOf(ctrl.get('welcome'));
21 | var nextIdx = (currentIdx === (ctrl.get('welcomes.length') - 1)) ? 0 : currentIdx + 1;
22 | ctrl.set('welcome', ctrl.get('welcomes').objectAt(nextIdx));
23 | Ember.$('#welcome-text').transition('fade');
24 | self.set('isScheduled', true);
25 | Ember.run.later(this, function() {
26 | self.send('nextWelcome');
27 | }, 3000);
28 | });
29 | }
30 | }
31 | });
32 |
--------------------------------------------------------------------------------
/app/routes/firstrun/user.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | });
7 |
--------------------------------------------------------------------------------
/app/routes/index.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get('store').findAll('app');
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/login.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 |
3 |
4 | export default Ember.Route.extend({});
5 |
--------------------------------------------------------------------------------
/app/routes/system/backups.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../../config/environment";
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | model: function() {
8 | return Ember.RSVP.hash({
9 | backups: this.get('store').findAll('backup'),
10 | types: Ember.$.getJSON(ENV.APP.krakenHost+'/api/backups/types').then(function(j){return j.types;})
11 | });
12 | }
13 | });
14 |
--------------------------------------------------------------------------------
/app/routes/system/backups/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('system.backups.info', { into: 'application' });
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/system/config.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../../config/environment";
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | model: function() {
8 | return Ember.RSVP.hash({
9 | config: Ember.$.getJSON(ENV.APP.krakenHost+'/api/config'),
10 | datetime: Ember.$.getJSON(ENV.APP.krakenHost+'/api/config/datetime'),
11 | users: this.get("store").findAll("user"),
12 | ssh: this.get("store").findAll("sshKey")
13 | });
14 | },
15 | setupController: function(controller, model) {
16 | controller.set('model', model);
17 | controller.set('config', model.config.config);
18 | controller.set('hostname', model.config.hostname);
19 | controller.set('tzRegion', model.config.timezone.region);
20 | controller.set('tzZone', model.config.timezone.zone);
21 | },
22 | actions: {
23 | updateTime: function() {
24 | var self = this;
25 | Ember.$.ajax({
26 | url: ENV.APP.krakenHost+'/api/config/datetime',
27 | type: 'PUT',
28 | success: function() {
29 | self.refresh();
30 | self.notifications.new("success", "Time updated successfully");
31 | },
32 | error: function(e) {
33 | if (e.status === 500) {
34 | self.transitionTo("error", e);
35 | }
36 | }
37 | });
38 | },
39 | delete: function(model) {
40 | model.destroyRecord();
41 | }
42 | }
43 | });
44 |
--------------------------------------------------------------------------------
/app/routes/system/networks.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return Ember.RSVP.hash({
8 | networks: this.get('store').findAll('network'),
9 | netifaces: this.get('store').findAll('netiface')
10 | });
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/app/routes/system/networks/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('system.networks.add', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var ifacesPromise = this.store.findAll('netiface');
12 |
13 | ifacesPromise.then(function(ifaces) {
14 | me.controllerFor('system.networks.add').set('netifaces', ifaces);
15 | });
16 |
17 | return ifacesPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/system/networks/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('system.networks.info', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var ifacesPromise = this.store.findAll('netiface');
12 |
13 | ifacesPromise.then(function(ifaces) {
14 | me.controllerFor('system.networks.info').set('netifaces', ifaces);
15 | });
16 |
17 | return ifacesPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/system/packages.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../../config/environment";
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | model: function() {
8 | return this.get('store').findAll('package');
9 | },
10 | actions: {
11 | refresh: function() {
12 | var self = this;
13 | Ember.$.getJSON(ENV.APP.krakenHost+"/api/system/packages?refresh=true", function(){
14 | self.refresh();
15 | });
16 | }
17 | }
18 | });
19 |
--------------------------------------------------------------------------------
/app/routes/system/roles.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | });
7 |
--------------------------------------------------------------------------------
/app/routes/system/roles/domains.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get('store').findAll('domain');
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/system/roles/domains/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('system.roles.domains.add', { into: 'application' });
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/system/roles/groups.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get('store').findAll('group');
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/system/roles/groups/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('system.roles.groups.add', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var usersPromise = this.store.findAll('user');
12 |
13 | usersPromise.then(function(users) {
14 | me.controllerFor('system.roles.groups.add').set('users', users);
15 | });
16 |
17 | return usersPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/system/roles/groups/edit.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('system.roles.groups.edit', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var usersPromise = this.store.findAll('user');
12 |
13 | usersPromise.then(function(users) {
14 | me.controllerFor('system.roles.groups.edit').set('users', users);
15 | });
16 |
17 | return usersPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/system/roles/users.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get('store').findAll('user');
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/system/roles/users/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('system.roles.users.add', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var domainsPromise = this.store.findAll('domain');
12 |
13 | domainsPromise.then(function(domains) {
14 | me.controllerFor('system.roles.users.add').set('domains', domains);
15 | });
16 |
17 | return domainsPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/system/roles/users/edit.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('system.roles.users.edit', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var domainsPromise = this.store.findAll('domain');
12 |
13 | domainsPromise.then(function(domains) {
14 | me.controllerFor('system.roles.users.edit').set('domains', domains);
15 | });
16 |
17 | return domainsPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/system/security.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | });
7 |
--------------------------------------------------------------------------------
/app/routes/system/security/fail2ban.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get('store').findAll('jail');
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/system/security/firewall.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
5 | model: function() {
6 | return this.get('store').findAll('policy');
7 | }
8 | });
9 |
--------------------------------------------------------------------------------
/app/routes/system/security/firewall/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('system.security.firewall.add', { into: 'application' });
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/system/services.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get('store').findAll('service');
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/system/updates.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../../config/environment";
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | model: function() {
8 | return this.get('store').findAll('update');
9 | },
10 | actions: {
11 | check: function() {
12 | var self = this;
13 | Ember.$.getJSON(ENV.APP.krakenHost+"/api/updates?rescan=true", function(){
14 | self.refresh();
15 | });
16 | },
17 | install: function() {
18 | Ember.$.ajax({
19 | url: ENV.APP.krakenHost+"/api/updates",
20 | method: "POST"
21 | });
22 | }
23 | }
24 | });
25 |
--------------------------------------------------------------------------------
/app/routes/tools.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | });
7 |
--------------------------------------------------------------------------------
/app/routes/tools/certificates.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return Ember.RSVP.hash({
8 | certs: this.get('store').findAll('certificate'),
9 | auths: this.get('store').findAll('authority')
10 | });
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/app/routes/tools/certificates/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('tools.certificates.add', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var domainsPromise = this.store.findAll('domain');
12 |
13 | domainsPromise.then(function(domains) {
14 | me.controllerFor('tools.certificates.add').set('domains', domains);
15 | });
16 |
17 | return domainsPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/tools/certificates/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import ENV from '../../../config/environment';
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | renderTemplate: function() {
8 | this.render('tools.certificates.info', { into: 'application' });
9 | },
10 | afterModel: function() {
11 | var me = this;
12 | var assignsPromise = Ember.$.getJSON(ENV.APP.krakenHost+'/api/assignments');
13 |
14 | assignsPromise.then(function(assigns) {
15 | me.controllerFor('tools.certificates.info').set('certAssigns', assigns.assignments);
16 | });
17 |
18 | return assignsPromise;
19 | }
20 | });
21 |
--------------------------------------------------------------------------------
/app/routes/tools/databases.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | beforeModel: function() {
7 | this.get('store').unloadAll('database');
8 | this.get('store').unloadAll('databaseUser');
9 | },
10 | afterModel: function(model) {
11 | var self = this;
12 | model.types.forEach(function(i) {
13 | if (!i.get('state')) {
14 | self.notifications.new("warning", i.get('name')+' is not running. Start it via the Services pane to see its databases and perform tasks.');
15 | }
16 | });
17 | },
18 | model: function() {
19 | return Ember.RSVP.hash({
20 | dbs: this.get('store').findAll('database'),
21 | users: this.get('store').findAll('databaseUser'),
22 | types: this.get('store').findAll('databaseType')
23 | });
24 | }
25 | });
26 |
--------------------------------------------------------------------------------
/app/routes/tools/databases/add-user.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('tools.databases.add-user', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var dbPromise = this.store.findAll('database-type');
12 |
13 | dbPromise.then(function(types) {
14 | me.controllerFor('tools.databases.add-user').set('types', types);
15 | });
16 |
17 | return dbPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/tools/databases/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('tools.databases.add', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var dbPromise = this.store.findAll('database-type');
12 |
13 | dbPromise.then(function(dbTypes) {
14 | me.controllerFor('tools.databases.add').set('dbTypes', dbTypes);
15 | });
16 |
17 | return dbPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/tools/databases/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('tools.databases.info', { into: 'application' });
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/tools/databases/user-edit.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('tools.databases.user-edit', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var dbPromise = this.store.findAll('database');
12 |
13 | dbPromise.then(function(dbs) {
14 | me.controllerFor('tools.databases.user-edit').set('dbs', dbs);
15 | });
16 |
17 | return dbPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/routes/tools/files.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import ENV from "../../config/environment";
3 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
4 |
5 |
6 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
7 | model: function() {
8 | return Ember.RSVP.hash({
9 | shares: this.get('store').findAll('shared-file'),
10 | POIs: this.get('store').findAll('point')
11 | });
12 | },
13 | setupController: function(controller, model) {
14 | this._super();
15 | controller.set('model', model);
16 | if (!this.get("currentPath")) {
17 | this.set('currentPath', "/");
18 | Ember.$.getJSON(`${ENV.APP.krakenHost}/api/files/Lw**`)
19 | .done(function(j) {
20 | controller.set('currentFolder', j.files);
21 | });
22 | }
23 | }
24 | });
25 |
--------------------------------------------------------------------------------
/app/routes/tools/filesystems.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | beforeModel: function() {
7 | this.get('store').unloadAll('filesystem');
8 | },
9 | model: function() {
10 | return this.get('store').findAll('filesystem');
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/app/routes/tools/filesystems/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('tools.filesystems.add', { into: 'application' });
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/tools/filesystems/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('tools.filesystems.info', { into: 'application' });
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/tools/shares.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 |
7 | });
8 |
--------------------------------------------------------------------------------
/app/routes/tools/shares/mounts.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return Ember.RSVP.hash({
8 | mounts: this.get('store').findAll('mount'),
9 | types: this.get('store').findAll('share-type')
10 | });
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/app/routes/tools/shares/mounts/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get('store').findAll('shareType');
8 | },
9 | renderTemplate: function() {
10 | this.render('tools.shares.mounts.add', { into: 'application' });
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/app/routes/tools/shares/shares.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return Ember.RSVP.hash({
8 | shares: this.get('store').findAll('share'),
9 | types: this.get('store').findAll('share-type')
10 | });
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/app/routes/tools/shares/shares/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return Ember.RSVP.hash({
8 | users: this.get('store').findAll('user'),
9 | shareTypes: this.get('store').findAll('shareType')
10 | });
11 | },
12 | renderTemplate: function() {
13 | this.render('tools.shares.shares.add', { into: 'application' });
14 | }
15 | });
16 |
--------------------------------------------------------------------------------
/app/routes/tools/shares/shares/info.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('tools.shares.shares.info', { into: 'application' });
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/websites.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | model: function() {
7 | return this.get('store').findAll('website');
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/app/routes/websites/add.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('websites.add', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var usersPromise = this.store.findAll('user');
12 | var typesPromise = this.store.query('app', {installed: true, type: 'website'});
13 | var dbmanPromise = this.store.findAll('database-type');
14 | var domainsPromise = this.store.findAll('domain');
15 |
16 | usersPromise.then(function(users) {
17 | me.controllerFor('websites.add').set('users', users);
18 | });
19 |
20 | typesPromise.then(function(types) {
21 | me.controllerFor('websites.add').set('siteTypes', types);
22 | });
23 |
24 | dbmanPromise.then(function(dbtypes) {
25 | me.controllerFor('websites.add').set('dbtypes', dbtypes);
26 | });
27 |
28 | domainsPromise.then(function(domains) {
29 | me.controllerFor('websites.add').set('domains', domains);
30 | });
31 |
32 | return domainsPromise;
33 | }
34 | });
35 |
--------------------------------------------------------------------------------
/app/routes/websites/edit.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
3 |
4 |
5 | export default Ember.Route.extend(AuthenticatedRouteMixin, {
6 | renderTemplate: function() {
7 | this.render('websites.edit', { into: 'application' });
8 | },
9 | afterModel: function() {
10 | var me = this;
11 | var domainsPromise = this.store.findAll('domain');
12 |
13 | domainsPromise.then(function(domains) {
14 | me.controllerFor('websites.edit').set('domains', domains);
15 | });
16 |
17 | return domainsPromise;
18 | }
19 | });
20 |
--------------------------------------------------------------------------------
/app/serializers/application.js:
--------------------------------------------------------------------------------
1 | import Ember from "ember";
2 | import DS from "ember-data";
3 |
4 |
5 | export default DS.RESTSerializer.extend({
6 | serializeIntoHash: function(data, type, record, options) {
7 | var root = Ember.String.decamelize(type.typeKey);
8 | data[root] = this.serialize(record, options);
9 | },
10 | keyForAttribute: function(attr) {
11 | return Ember.String.decamelize(attr);
12 | },
13 | keyForRelationship: function(name) {
14 | return Ember.String.decamelize(name);
15 | }
16 | });
17 |
--------------------------------------------------------------------------------
/app/serializers/database-user.js:
--------------------------------------------------------------------------------
1 | import ApplicationSerializer from "./application";
2 |
3 |
4 | export default ApplicationSerializer.extend({
5 | serialize: function(record, options) {
6 | var json = this._super(record, options);
7 | if (json) {
8 | json.passwd = record.get("passwd") || "";
9 | }
10 | return json;
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/app/templates/app/syncthing.hbs:
--------------------------------------------------------------------------------
1 |
11 |
12 | {{outlet}}
13 |
--------------------------------------------------------------------------------
/app/templates/app/syncthing/devices.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{#each model as |device|}}
3 |
4 | {{#link-to 'app.syncthing.devices.edit' device class="image {{if device.isReady '' 'disabled'}}"}}
5 |
6 |
7 |
8 | {{/link-to}}
9 |
10 | {{#link-to 'app.syncthing.devices.edit' device class="header"}}
11 |
{{device.name}}
12 | {{/link-to}}
13 |
14 | Sync Device
15 |
16 |
17 |
18 | Delete
19 |
20 |
21 | {{/each}}
22 |
23 |
24 | {{#ui-modal name="delete-device" class="basic delete-device" onApprove=(action 'deleteDevice')}}
25 |
26 |
30 |
31 |
32 |
Are you sure you want to delete {{selectedDevice.id}} ?
33 |
34 |
35 |
36 |
37 | No
38 |
39 |
40 | Yes
41 |
42 |
43 |
44 | {{/ui-modal}}
45 |
--------------------------------------------------------------------------------
/app/templates/app/syncthing/folders.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{#each model as |folder|}}
3 |
4 | {{#link-to 'app.syncthing.folders.edit' folder class="image {{if folder.isReady '' 'disabled'}}"}}
5 |
6 |
7 |
8 | {{/link-to}}
9 |
10 | {{#link-to 'app.syncthing.folders.edit' folder class="header"}}
11 |
{{folder.label}}
12 | {{/link-to}}
13 |
14 | Sync Folder
15 |
16 |
17 |
18 | Delete
19 |
20 |
21 | {{/each}}
22 |
23 |
24 | {{#ui-modal name="delete-folder" class="basic delete-folder" onApprove=(action 'deleteFolder')}}
25 |
26 |
30 |
31 |
32 |
Are you sure you want to delete {{selectedFolder.label}} ?
33 |
34 |
35 |
36 |
37 | No
38 |
39 |
40 | Yes
41 |
42 |
43 |
44 | {{/ui-modal}}
45 |
--------------------------------------------------------------------------------
/app/templates/app/xmpp.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{#if model.service.running}}
4 | Your XMPP chat server is running and available.
5 | {{else}}
6 | Your XMPP chat server is installed but not running. Please start it via {{#link-to 'system.services' (query-params filter="prosody")}}the Services pane{{/link-to}}.
7 | {{/if}}
8 |
9 |
10 |
11 |
The following domains are enabled for use with your XMPP chat server. All users belonging to these domains can use the server. To add new domains to your server, {{#link-to 'system.roles.domains'}}go to Domains{{/link-to}}.
12 |
13 | {{#each model.domains as |domain|}}
14 |
15 |
20 |
21 |
24 |
25 | XMPP Domain
26 |
27 |
28 |
29 | {{/each}}
30 |
31 |
32 |
--------------------------------------------------------------------------------
/app/templates/components/bread-crumbs.hbs:
--------------------------------------------------------------------------------
1 |
42 |
--------------------------------------------------------------------------------
/app/templates/components/g-fm-item.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{item.name}}
3 |
--------------------------------------------------------------------------------
/app/templates/components/g-message.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{#if msg.complete}}
4 |
5 | {{/if}}
6 |
7 | {{#if msg.title}}
8 |
11 | {{/if}}
12 |
{{msg.message}}
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/templates/components/g-messages.hbs:
--------------------------------------------------------------------------------
1 | {{#each messages as |msg|}}
2 | {{g-message msg=msg}}
3 | {{/each}}
4 |
--------------------------------------------------------------------------------
/app/templates/components/ui-dropdown-menu.hbs:
--------------------------------------------------------------------------------
1 | {{yield}}
2 |
--------------------------------------------------------------------------------
/app/templates/components/ui-form.hbs:
--------------------------------------------------------------------------------
1 | {{yield}}
2 |
3 | Save
4 | {{#if onCancel}}
5 | Cancel
6 | {{/if}}
7 |
--------------------------------------------------------------------------------
/app/templates/firstrun.hbs:
--------------------------------------------------------------------------------
1 | {{outlet}}
2 |
--------------------------------------------------------------------------------
/app/templates/firstrun/start.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
{{welcome}}
6 |
This wizard will walk you through the steps needed to set up your new arkOS server.
7 |
This process may take a few minutes as the different settings are modified by the system. Please do not turn off or restart your arkOS server until you have successfully completed this wizard.
8 |
When you are ready, click Start to begin.
9 | {{#link-to "firstrun.user" class="ui huge primary labeled icon button"}}
Start{{/link-to}}
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/templates/index.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{#each filteredApps as |app|}}
3 |
4 |
9 |
10 |
11 |
12 |
13 | {{/each}}
14 | {{#link-to 'apps' class='ui card'}}
15 |
20 |
21 |
22 |
23 | {{/link-to}}
24 |
25 |
--------------------------------------------------------------------------------
/app/templates/loading.hbs:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/app/templates/login.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
23 | {{#if loginMessage}}
24 |
25 |
{{loginMessage}}
26 |
27 | {{/if}}
28 |
29 |
30 |
31 | {{#if currentlyLoading}}
32 |
37 | {{/if}}
38 |
--------------------------------------------------------------------------------
/app/templates/system/roles.hbs:
--------------------------------------------------------------------------------
1 |
10 |
11 | {{outlet}}
12 |
--------------------------------------------------------------------------------
/app/templates/system/roles/domains.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{#each model as |domain|}}
3 |
4 |
9 |
10 |
13 |
14 | Domain
15 |
16 |
17 |
18 | Delete
19 |
20 |
21 | {{/each}}
22 |
23 |
24 | {{#ui-modal name="delete-domain" class="basic delete-domain" onApprove=(action 'deleteDomain') onDeny=(action 'clearModal')}}
25 |
26 |
30 |
31 |
32 |
Are you sure you want to delete domain {{selectedDomain.id}} ?
33 |
34 |
35 |
36 |
37 | No
38 |
39 |
40 | Yes
41 |
42 |
43 |
44 | {{/ui-modal}}
45 |
--------------------------------------------------------------------------------
/app/templates/system/roles/domains/add.hbs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 | {{#if name}}
11 |
15 | {{/if}}
16 |
17 |
18 |
19 |
20 | {{#ui-form fields=fields onSubmit='save' onCancel='redirect'}}
21 |
22 | Domain name
23 | {{input type="text" name="domain" value=name}}
24 |
25 | {{/ui-form}}
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/app/templates/system/roles/groups.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{#each model as |group|}}
3 |
4 | {{#link-to 'system.roles.groups.edit' group class="image {{if user.isReady '' 'disabled'}}"}}
5 |
6 |
7 |
8 | {{/link-to}}
9 |
10 | {{#link-to 'system.roles.groups.edit' group class="header"}}
11 |
{{group.name}}
12 | {{/link-to}}
13 |
14 | {{if group.users group.users.length 'No'}} member(s)
15 |
16 |
17 |
18 | Delete
19 |
20 |
21 | {{/each}}
22 |
23 |
24 | {{#ui-modal name="delete-group" class="basic delete-group" onApprove=(action 'deleteGroup') onDeny=(action 'clearModal')}}
25 |
26 |
30 |
31 |
32 |
Are you sure you want to delete group {{selectedGroup.name}} ?
33 |
34 |
35 |
36 |
37 | No
38 |
39 |
40 | Yes
41 |
42 |
43 |
44 | {{/ui-modal}}
45 |
--------------------------------------------------------------------------------
/app/templates/system/roles/users.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{#each model as |user|}}
3 |
4 | {{#link-to 'system.roles.users.edit' user class="image {{if user.isReady '' 'disabled'}}"}}
5 |
6 |
7 |
8 | {{/link-to}}
9 |
10 | {{#link-to 'system.roles.users.edit' user class="header"}}
11 |
{{user.fullName}}
12 | {{/link-to}}
13 |
14 | {{user.name}}
15 |
16 |
17 |
18 | Delete
19 |
20 |
21 | {{/each}}
22 |
23 |
24 | {{#ui-modal name="delete-user" class="basic delete-user" onApprove=(action 'deleteUser') onDeny=(action 'clearModal')}}
25 |
26 |
30 |
31 |
32 |
Are you sure you want to delete user {{selectedUser.name}} ?
33 |
34 |
35 |
36 |
37 | No
38 |
39 |
40 | Yes
41 |
42 |
43 |
44 | {{/ui-modal}}
45 |
--------------------------------------------------------------------------------
/app/templates/system/security.hbs:
--------------------------------------------------------------------------------
1 |
10 |
11 | {{outlet}}
12 |
--------------------------------------------------------------------------------
/app/templates/system/security/fail2ban.hbs:
--------------------------------------------------------------------------------
1 | {{outlet}}
2 |
--------------------------------------------------------------------------------
/app/templates/system/updates.hbs:
--------------------------------------------------------------------------------
1 |
9 |
10 | {{#each updates as |update|}}
11 | #{{update.id}} — {{update.name}} released {{format-date update.date}}
12 | {{update.info}}
13 | {{else}}
14 |
15 |
16 |
Your system is up-to-date.
17 |
18 | {{/each}}
19 |
--------------------------------------------------------------------------------
/app/templates/tools.hbs:
--------------------------------------------------------------------------------
1 | {{outlet}}
2 |
--------------------------------------------------------------------------------
/app/templates/tools/shares.hbs:
--------------------------------------------------------------------------------
1 |
8 |
9 | {{outlet}}
10 |
--------------------------------------------------------------------------------
/app/utils/card-color.js:
--------------------------------------------------------------------------------
1 | /* global moment */
2 |
3 | var cardColors = ["card-image red", "card-image green", "card-image blue",
4 | "card-image orange", "card-image teal", "card-image olive", "card-image violet"];
5 |
6 | export default function cardColor() {
7 | var len = cardColors.length;
8 | if (moment().month() === 11) {
9 | len = 2;
10 | }
11 | var index = Math.floor(Math.random() * len);
12 | return cardColors[index];
13 | }
14 |
--------------------------------------------------------------------------------
/app/utils/handle-model-error.js:
--------------------------------------------------------------------------------
1 | export default function handleModelError(self, e) {
2 | if (e.responseJSON) {
3 | e = e.responseJSON;
4 | }
5 | if (e.errors && e.errors.report) {
6 | self.transitionToRoute("error", e.errors);
7 | return;
8 | } else if (e.errors) {
9 | self.notifications.new('error', e.errors[0].detail);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/app/utils/size-to-string.js:
--------------------------------------------------------------------------------
1 | export default function sizeToString(sz) {
2 | if (sz < 1024) {
3 | return sz+' bytes';
4 | }
5 | sz = sz / 1024.0;
6 | if (sz < 1024) {
7 | return sz.toFixed(2)+' Kb';
8 | }
9 | sz = sz / 1024.0;
10 | if (sz < 1024) {
11 | return sz.toFixed(2)+' Mb';
12 | }
13 | sz = sz / 1024.0;
14 | if (sz < 1024) {
15 | return sz.toFixed(2)+' Gb';
16 | }
17 | sz = sz / 1024.0;
18 | return sz.toFixed(2)+' Tb';
19 | }
20 |
--------------------------------------------------------------------------------
/app/utils/to-b64.js:
--------------------------------------------------------------------------------
1 | export default function toB64(data) {
2 | return window.btoa(data).replace(/\=/g, '*').replace(/\//g, '-');
3 | }
4 |
--------------------------------------------------------------------------------
/app/views/application.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.View.extend({
4 | classNames: ["ember-app"]
5 | });
6 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "genesis",
3 | "dependencies": {
4 | "codemirror": "~5.6.0",
5 | "ember": "1.13.11",
6 | "ember-cli-shims": "0.0.6",
7 | "ember-cli-test-loader": "0.2.1",
8 | "ember-data": "1.13.15",
9 | "ember-load-initializers": "0.1.7",
10 | "ember-qunit": "0.4.16",
11 | "ember-qunit-notifications": "0.1.0",
12 | "ember-resolver": "~0.1.20",
13 | "ember-simple-auth": "0.8.0",
14 | "ember-uploader": "0.3.2",
15 | "fira": "~0.1.0",
16 | "font-awesome": "~4.4.0",
17 | "jquery": "1.11.3",
18 | "lightbox2": "~2.8.1",
19 | "loader.js": "ember-cli/loader.js#3.4.0",
20 | "moment": "~2.10.6",
21 | "qunit": "~1.20.0",
22 | "lato": "^0.3.0",
23 | "semantic-ui": "^2.2.4",
24 | "urijs": "^1.18.4",
25 | "socket.io-client": "^1.4.8"
26 | },
27 | "resolutions": {
28 | "jquery": "1.11.3"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/lib/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/lib/.gitkeep
--------------------------------------------------------------------------------
/lib/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "node": true,
3 | "browser": false
4 | }
5 |
--------------------------------------------------------------------------------
/public/crossdomain.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
15 |
16 |
--------------------------------------------------------------------------------
/public/img/appstore-card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/public/img/appstore-card.png
--------------------------------------------------------------------------------
/public/img/arkos-pattern.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/public/img/arkos-pattern.png
--------------------------------------------------------------------------------
/public/img/logo-round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/public/img/logo-round.png
--------------------------------------------------------------------------------
/public/img/logo-white-round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/public/img/logo-white-round.png
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # http://www.robotstxt.org
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/testem.json:
--------------------------------------------------------------------------------
1 | {
2 | "framework": "qunit",
3 | "test_page": "tests/index.html",
4 | "launch_in_ci": [
5 | "PhantomJS"
6 | ],
7 | "launch_in_dev": [
8 | "PhantomJS"
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/tests/acceptance/login-test.js:
--------------------------------------------------------------------------------
1 | //login-test.js
2 | import Ember from 'ember';
3 | import startApp from '../helpers/start-app';
4 |
5 | import {
6 | module,
7 | test,
8 | visit,
9 | andThen,
10 | currentURL
11 | } from 'qunit';
12 |
13 | var App;
14 | module("Acceptance: Login", {
15 | setup: function(){
16 | App = startApp();
17 | },
18 | teardown: function(){
19 | Ember.run(App, 'destroy');
20 | }
21 | });
22 |
23 | test('visiting /login', function(assert) {
24 | visit('/login');
25 |
26 | andThen(function() {
27 | assert.equal(currentURL(), '/login');
28 | });
29 | });
30 |
--------------------------------------------------------------------------------
/tests/helpers/destroy-app.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default function destroyApp(application) {
4 | Ember.run(application, 'destroy');
5 | }
6 |
--------------------------------------------------------------------------------
/tests/helpers/module-for-acceptance.js:
--------------------------------------------------------------------------------
1 | import { module } from 'qunit';
2 | import Ember from 'ember';
3 | import startApp from '../helpers/start-app';
4 | import destroyApp from '../helpers/destroy-app';
5 |
6 | const { RSVP: { Promise } } = Ember;
7 |
8 | export default function(name, options = {}) {
9 | module(name, {
10 | beforeEach() {
11 | this.application = startApp();
12 |
13 | if (options.beforeEach) {
14 | return options.beforeEach.apply(this, arguments);
15 | }
16 | },
17 |
18 | afterEach() {
19 | let afterEach = options.afterEach && options.afterEach.apply(this, arguments);
20 | return Promise.resolve(afterEach).then(() => destroyApp(this.application));
21 | }
22 | });
23 | }
24 |
--------------------------------------------------------------------------------
/tests/helpers/resolver.js:
--------------------------------------------------------------------------------
1 | import Resolver from 'ember-resolver';
2 | import config from '../../config/environment';
3 |
4 | const resolver = Resolver.create();
5 |
6 | resolver.namespace = {
7 | modulePrefix: config.modulePrefix,
8 | podModulePrefix: config.podModulePrefix
9 | };
10 |
11 | export default resolver;
12 |
--------------------------------------------------------------------------------
/tests/helpers/start-app.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import Application from '../../app';
3 | import config from '../../config/environment';
4 |
5 | export default function startApp(attrs) {
6 | let application;
7 |
8 | let attributes = Ember.merge({}, config.APP);
9 | attributes = Ember.merge(attributes, attrs); // use defaults, but you can override;
10 |
11 | Ember.run(() => {
12 | application = Application.create(attributes);
13 | application.setupForTesting();
14 | application.injectTestHelpers();
15 | });
16 |
17 | return application;
18 | }
19 |
--------------------------------------------------------------------------------
/tests/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Genesis Tests
7 |
8 |
9 |
10 | {{content-for "head"}}
11 | {{content-for "test-head"}}
12 |
13 |
14 |
15 |
16 |
17 | {{content-for "head-footer"}}
18 | {{content-for "test-head-footer"}}
19 |
20 |
21 | {{content-for "body"}}
22 | {{content-for "test-body"}}
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | {{content-for "body-footer"}}
32 | {{content-for "test-body-footer"}}
33 |
34 |
35 |
--------------------------------------------------------------------------------
/tests/integration/components/ui-dropdown-menu-test.js:
--------------------------------------------------------------------------------
1 | import { moduleForComponent, test } from 'ember-qunit';
2 | import hbs from 'htmlbars-inline-precompile';
3 |
4 | moduleForComponent('ui-dropdown-menu', 'Integration | Component | ui dropdown menu', {
5 | integration: true
6 | });
7 |
8 | test('it renders', function(assert) {
9 |
10 | // Set any properties with this.set('myProperty', 'value');
11 | // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL +
12 |
13 | this.render(hbs`{{ui-dropdown-menu}}`);
14 |
15 | assert.equal(this.$().text().trim(), '');
16 |
17 | // Template block usage:" + EOL +
18 | this.render(hbs`
19 | {{#ui-dropdown-menu}}
20 | template block text
21 | {{/ui-dropdown-menu}}
22 | `);
23 |
24 | assert.equal(this.$().text().trim(), 'template block text');
25 | });
26 |
--------------------------------------------------------------------------------
/tests/integration/components/ui-form-test.js:
--------------------------------------------------------------------------------
1 | import { moduleForComponent, test } from 'ember-qunit';
2 | import hbs from 'htmlbars-inline-precompile';
3 |
4 | moduleForComponent('ui-form', 'Integration | Component | ui form', {
5 | integration: true
6 | });
7 |
8 | test('it renders', function(assert) {
9 |
10 | // Set any properties with this.set('myProperty', 'value');
11 | // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL +
12 |
13 | this.render(hbs`{{ui-form}}`);
14 |
15 | assert.equal(this.$().text().trim(), '');
16 |
17 | // Template block usage:" + EOL +
18 | this.render(hbs`
19 | {{#ui-form}}
20 | template block text
21 | {{/ui-form}}
22 | `);
23 |
24 | assert.equal(this.$().text().trim(), 'template block text');
25 | });
26 |
--------------------------------------------------------------------------------
/tests/test-helper.js:
--------------------------------------------------------------------------------
1 | import resolver from './helpers/resolver';
2 | import {
3 | setResolver
4 | } from 'ember-qunit';
5 |
6 | setResolver(resolver);
7 |
--------------------------------------------------------------------------------
/tests/unit/controllers/app/syncthing/devices-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:app/syncthing/devices', 'Unit | Controller | app/syncthing/devices', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/app/syncthing/devices/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:app/syncthing/devices/add', 'Unit | Controller | app/syncthing/devices/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/app/syncthing/devices/edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:app/syncthing/devices/edit', 'Unit | Controller | app/syncthing/devices/edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/app/syncthing/folders-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:app/syncthing/folders', 'Unit | Controller | app/syncthing/folders', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/app/syncthing/folders/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:app/syncthing/folders/add', 'Unit | Controller | app/syncthing/folders/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/app/syncthing/folders/edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:app/syncthing/folders/edit', 'Unit | Controller | app/syncthing/folders/edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/app/xmpp-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:app/xmpp', 'Unit | Controller | app/xmpp', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/apps/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:apps/info', 'Unit | Controller | apps/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/certs-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:certs', 'Unit | Controller | certs', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/certs/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:certs/info', 'Unit | Controller | certs/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/firstrun/apps-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:firstrun/apps', 'Unit | Controller | firstrun/apps', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/firstrun/confirm-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:firstrun/confirm', 'Unit | Controller | firstrun/confirm', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/firstrun/finish-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:firstrun/finish', 'Unit | Controller | firstrun/finish', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/firstrun/settings-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:firstrun/settings', 'Unit | Controller | firstrun/settings', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/firstrun/start-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:firstrun/start', 'Unit | Controller | firstrun/start', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/firstrun/user-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:firstrun/user', 'Unit | Controller | firstrun/user', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/roles-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:roles', 'Unit | Controller | roles', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/roles/domains-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:roles/domains', 'Unit | Controller | roles/domains', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/roles/domains/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:roles/domains/add', 'Unit | Controller | roles/domains/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/roles/groups-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:roles/groups', 'Unit | Controller | roles/groups', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/roles/groups/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:roles/groups/add', 'Unit | Controller | roles/groups/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/roles/groups/edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:roles/groups/edit', 'Unit | Controller | roles/groups/edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/roles/users-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:roles/users', 'Unit | Controller | roles/users', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/roles/users/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:roles/users/add', 'Unit | Controller | roles/users/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/roles/users/edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:roles/users/edit', 'Unit | Controller | roles/users/edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/security/firewall-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:security/firewall', 'Unit | Controller | security/firewall', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/settings/backups/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:settings/backups/info', 'Unit | Controller | settings/backups/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/settings/networks/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:settings/networks/add', 'Unit | Controller | settings/networks/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/settings/networks/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:settings/networks/info', 'Unit | Controller | settings/networks/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/stats-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:stats', 'Unit | Controller | stats', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/system-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:system', 'Unit | Controller | system', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/system/networks-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:system/networks', 'Unit | Controller | system/networks', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/system/security/firewall/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:system/security/firewall/add', 'Unit | Controller | system/security/firewall/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools', 'Unit | Controller | tools', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/certificates/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/certificates/add', 'Unit | Controller | tools/certificates/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/databases-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/databases', 'Unit | Controller | tools/databases', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/databases/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/databases/add', 'Unit | Controller | tools/databases/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/databases/add-user-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/databases/add-user', 'Unit | Controller | tools/databases/add user', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/databases/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/databases/info', 'Unit | Controller | tools/databases/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/databases/user-edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/databases/user-edit', 'Unit | Controller | tools/databases/user edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/filesystems/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/filesystems/add', 'Unit | Controller | tools/filesystems/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/filesystems/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/filesystems/info', 'Unit | Controller | tools/filesystems/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/shares-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/shares', 'Unit | Controller | tools/shares', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/shares/mounts-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/shares/mounts', 'Unit | Controller | tools/shares/mounts', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/shares/mounts/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/shares/mounts/add', 'Unit | Controller | tools/shares/mounts/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/shares/shares-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/shares/shares', 'Unit | Controller | tools/shares/shares', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/shares/shares/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/shares/shares/add', 'Unit | Controller | tools/shares/shares/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/tools/shares/shares/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:tools/shares/shares/info', 'Unit | Controller | tools/shares/shares/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/websites/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:websites/add', 'Unit | Controller | websites/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/controllers/websites/edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('controller:websites/edit', 'Unit | Controller | websites/edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let controller = this.subject();
11 | assert.ok(controller);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/helpers/generate-card-color-test.js:
--------------------------------------------------------------------------------
1 | import { cardColor } from '../../../helpers/card-color';
2 | import { module, test } from 'qunit';
3 |
4 | module('Unit | Helper | card color');
5 |
6 | // Replace this with your real tests.
7 | test('it works', function(assert) {
8 | let result = cardColor(42);
9 | assert.ok(result);
10 | });
11 |
--------------------------------------------------------------------------------
/tests/unit/initializers/notifications-test.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 | import NotificationsInitializer from '../../../initializers/notifications';
3 | import { module, test } from 'qunit';
4 |
5 | let application;
6 |
7 | module('Unit | Initializer | notifications', {
8 | beforeEach() {
9 | Ember.run(function() {
10 | application = Ember.Application.create();
11 | application.deferReadiness();
12 | });
13 | }
14 | });
15 |
16 | // Replace this with your real tests.
17 | test('it works', function(assert) {
18 | NotificationsInitializer.initialize(application);
19 |
20 | // you would normally confirm the results of the initializer here
21 | assert.ok(true);
22 | });
23 |
--------------------------------------------------------------------------------
/tests/unit/models/mount-test.js:
--------------------------------------------------------------------------------
1 | import { moduleForModel, test } from 'ember-qunit';
2 |
3 | moduleForModel('mount', 'Unit | Model | mount', {
4 | // Specify the other units that are required for this test.
5 | needs: []
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let model = this.subject();
10 | // let store = this.store();
11 | assert.ok(!!model);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/models/share-type-test.js:
--------------------------------------------------------------------------------
1 | import { moduleForModel, test } from 'ember-qunit';
2 |
3 | moduleForModel('share-type', 'Unit | Model | share type', {
4 | // Specify the other units that are required for this test.
5 | needs: []
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let model = this.subject();
10 | // let store = this.store();
11 | assert.ok(!!model);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/models/shared-file-test.js:
--------------------------------------------------------------------------------
1 | import { moduleForModel, test } from 'ember-qunit';
2 |
3 | moduleForModel('shared-file', 'Unit | Model | shared file', {
4 | // Specify the other units that are required for this test.
5 | needs: []
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let model = this.subject();
10 | // let store = this.store();
11 | assert.ok(!!model);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/routes/app-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app', 'Unit | Route | app', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/app/radicale/new-book-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app/radicale/new-book', 'Unit | Route | app/radicale/new book', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/app/radicale/new-cldr-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app/radicale/new-cldr', 'Unit | Route | app/radicale/new cldr', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/app/syncthing/devices-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app/syncthing/devices', 'Unit | Route | app/syncthing/devices', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/app/syncthing/devices/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app/syncthing/devices/add', 'Unit | Route | app/syncthing/devices/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/app/syncthing/devices/edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app/syncthing/devices/edit', 'Unit | Route | app/syncthing/devices/edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/app/syncthing/folders-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app/syncthing/folders', 'Unit | Route | app/syncthing/folders', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/app/syncthing/folders/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app/syncthing/folders/add', 'Unit | Route | app/syncthing/folders/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/app/syncthing/folders/edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app/syncthing/folders/edit', 'Unit | Route | app/syncthing/folders/edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/app/syncthing/settings-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app/syncthing/settings', 'Unit | Route | app/syncthing/settings', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/app/xmpp-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:app/xmpp', 'Unit | Route | app/xmpp', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/apps/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:apps/info', 'Unit | Route | apps/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/certs/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:certs/add', 'Unit | Route | certs/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/certs/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:certs/info', 'Unit | Route | certs/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/firstrun/apps-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:firstrun/apps', 'Unit | Route | firstrun/apps', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/firstrun/confirm-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:firstrun/confirm', 'Unit | Route | firstrun/confirm', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/firstrun/finish-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:firstrun/finish', 'Unit | Route | firstrun/finish', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/firstrun/settings-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:firstrun/settings', 'Unit | Route | firstrun/settings', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/firstrun/start-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:firstrun/start', 'Unit | Route | firstrun/start', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/firstrun/user-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:firstrun/user', 'Unit | Route | firstrun/user', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/roles-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:roles', 'Unit | Route | roles', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/roles/domains-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:roles/domains', 'Unit | Route | roles/domains', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/roles/domains/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:roles/domains/add', 'Unit | Route | roles/domains/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/roles/groups-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:roles/groups', 'Unit | Route | roles/groups', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/roles/groups/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:roles/groups/add', 'Unit | Route | roles/groups/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/roles/groups/edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:roles/groups/edit', 'Unit | Route | roles/groups/edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/roles/users-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:roles/users', 'Unit | Route | roles/users', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/roles/users/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:roles/users/add', 'Unit | Route | roles/users/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/roles/users/edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:roles/users/edit', 'Unit | Route | roles/users/edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/security/fail2ban-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:security/fail2ban', 'Unit | Route | security/fail2ban', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/security/firewall-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:security/firewall', 'Unit | Route | security/firewall', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/security/firewall/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:security/firewall/add', 'Unit | Route | security/firewall/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/settings/backups/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:settings/backups/info', 'Unit | Route | settings/backups/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/system/networks-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:system/networks', 'Unit | Route | system/networks', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/system/networks/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:system/networks/add', 'Unit | Route | system/networks/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/system/networks/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:system/networks/info', 'Unit | Route | system/networks/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools', 'Unit | Route | tools', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/databases/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/databases/add', 'Unit | Route | tools/databases/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/databases/add-user-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/databases/add-user', 'Unit | Route | tools/databases/add user', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/databases/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/databases/info', 'Unit | Route | tools/databases/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/databases/user-edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/databases/user-edit', 'Unit | Route | tools/databases/user edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/filesystems/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/filesystems/add', 'Unit | Route | tools/filesystems/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/filesystems/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/filesystems/info', 'Unit | Route | tools/filesystems/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/shares-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/shares', 'Unit | Route | tools/shares', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/shares/mounts-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/shares/mounts', 'Unit | Route | tools/shares/mounts', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/shares/mounts/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/shares/mounts/add', 'Unit | Route | tools/shares/mounts/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/shares/shares-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/shares/shares', 'Unit | Route | tools/shares/shares', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/shares/shares/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/shares/shares/add', 'Unit | Route | tools/shares/shares/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/tools/shares/shares/info-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:tools/shares/shares/info', 'Unit | Route | tools/shares/shares/info', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/websites/add-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:websites/add', 'Unit | Route | websites/add', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/websites/edit-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('route:websites/edit', 'Unit | Route | websites/edit', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['controller:foo']
6 | });
7 |
8 | test('it exists', function(assert) {
9 | let route = this.subject();
10 | assert.ok(route);
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/serializers/database-user-test.js:
--------------------------------------------------------------------------------
1 | import { moduleForModel, test } from 'ember-qunit';
2 |
3 | moduleForModel('database-user', 'Unit | Serializer | database user', {
4 | // Specify the other units that are required for this test.
5 | needs: ['serializer:database-user']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it serializes records', function(assert) {
10 | let record = this.subject();
11 |
12 | let serializedRecord = record.serialize();
13 |
14 | assert.ok(serializedRecord);
15 | });
16 |
--------------------------------------------------------------------------------
/tests/unit/services/notifications-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('service:notifications', 'Unit | Service | notifications', {
4 | // Specify the other units that are required for this test.
5 | // needs: ['service:foo']
6 | });
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let service = this.subject();
11 | assert.ok(service);
12 | });
13 |
--------------------------------------------------------------------------------
/tests/unit/utils/card-color-test.js:
--------------------------------------------------------------------------------
1 | import cardColor from '../../../utils/card-color';
2 | import { module, test } from 'qunit';
3 |
4 | module('Unit | Utility | card color');
5 |
6 | // Replace this with your real tests.
7 | test('it works', function(assert) {
8 | let result = cardColor();
9 | assert.ok(result);
10 | });
11 |
--------------------------------------------------------------------------------
/tests/unit/utils/handle-model-error-test.js:
--------------------------------------------------------------------------------
1 | import handleModelError from '../../../utils/handle-model-error';
2 | import { module, test } from 'qunit';
3 |
4 | module('Unit | Utility | handle model error');
5 |
6 | // Replace this with your real tests.
7 | test('it works', function(assert) {
8 | let result = handleModelError();
9 | assert.ok(result);
10 | });
11 |
--------------------------------------------------------------------------------
/tests/unit/views/application-test.js:
--------------------------------------------------------------------------------
1 | import { moduleFor, test } from 'ember-qunit';
2 |
3 | moduleFor('view:application', 'Unit | View | application');
4 |
5 | // Replace this with your real tests.
6 | test('it exists', function(assert) {
7 | let view = this.subject();
8 | assert.ok(view);
9 | });
10 |
--------------------------------------------------------------------------------
/vendor/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arkOScloud/genesis/b2083e3df8235c66fef3924dedd143441aaea615/vendor/.gitkeep
--------------------------------------------------------------------------------