├── .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 |
27 | 28 | Delete device? 29 |
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 |
27 | 28 | Delete folder? 29 |
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 |
16 |
17 | 18 |
19 |
20 |
21 |
22 | {{domain.id}} 23 |
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 |
9 | {{msg.title}} 10 |
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 | 4 | {{#if onCancel}} 5 | 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 |
5 |
6 | 7 |
8 |
9 |
10 |
{{app.name}}
11 |
12 |
13 | {{/each}} 14 | {{#link-to 'apps' class='ui card'}} 15 |
16 |
17 | 18 |
19 |
20 |
21 |
App Store
22 |
23 | {{/link-to}} 24 |
25 | -------------------------------------------------------------------------------- /app/templates/loading.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
Loading
4 |
5 |
6 | -------------------------------------------------------------------------------- /app/templates/login.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |
7 |
8 |
9 | 10 | {{input id="username" value=identification placeholder="Username"}} 11 |
12 |
13 |
14 |
15 | 16 | {{input type="password" id="password" value=password placeholder="Password"}} 17 |
18 |
19 | 20 |
21 |
22 |
23 | {{#if loginMessage}} 24 |
25 |

{{loginMessage}}

26 |
27 | {{/if}} 28 |
29 |
30 | 31 | {{#if currentlyLoading}} 32 |
33 |
34 |
Loading
35 |
36 |
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 |
5 |
6 | 7 |
8 |
9 |
10 |
11 | {{domain.id}} 12 |
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 |
27 | 28 | Delete domain? 29 |
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 |
6 |
7 | 8 |
9 |
10 | {{#if name}} 11 |
12 |
{{name}}
13 |
Domain
14 |
15 | {{/if}} 16 |
17 |
18 |
19 |
20 | {{#ui-form fields=fields onSubmit='save' onCancel='redirect'}} 21 |
22 | 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 |
27 | 28 | Delete group? 29 |
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 |
27 | 28 | Delete user? 29 |
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 --------------------------------------------------------------------------------