Commit bb8049cb authored by Sascha Pfeiffer's avatar Sascha Pfeiffer

some more progress

Signed-off-by: default avatarSascha Pfeiffer <[email protected]>
parent cad9843a
......@@ -206,6 +206,7 @@ var build = function(build_path, type) {
"src/common/data/js/controller/modal/DeleteAccountCtrl.js",
"src/common/data/js/controller/EditEntryBigCtrl.js",
"src/common/data/js/controller/OpenSecretCtrl.js",
"src/common/data/js/controller/DownloadFileCtrl.js",
"src/common/data/js/controller/OtherCtrl.js",
"src/common/data/js/controller/SessionsCtrl.js",
"src/common/data/js/controller/KnownHostsCtrl.js",
......
......@@ -202,6 +202,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
......@@ -129,6 +129,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
......@@ -255,6 +255,21 @@ h1, h2 {
.nav, .pagination, .carousel, .panel-title a {
cursor: pointer; }
.progress-box {
width: 340px;
height: 170px;
padding: 20px;
position: absolute;
top: 50%;
left: 50%;
margin: -70px 0 0 -170px;
border-radius: 4px;
background-color: #151f2b;
color: #b1b6c1;
text-align: center; }
.progress-box .progress {
margin-top: 20px; }
.loading-lock {
width: 340px;
height: 260px;
......
......@@ -435,6 +435,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
......@@ -35,23 +35,26 @@
<!-- endbuild -->
</head>
<body>
<div ng-controller="OpenSecretCtrl" class="ng-cloak">
<div ng-controller="DownloadFileCtrl" class="ng-cloak">
<div class="loading-lock">
<div class="progress-box">
<img src="img/logo.png" alt="Psono Web Client" id="logo">
<div class="loading-lock-logo">
<div class="loading-lock-logo-unloaded">
<i class="fa fa-lock" ></i>
</div>
<div class="loading-lock-logo-loaded">
<i id="loading-lock-logo-loaded-fa" class="fa fa-lock" ></i>
</div>
</div>
<div class="loading-lock-text">
{{'DECRYPTING_FILE' | translate}}
<uib-progressbar max="state.open_requests" value="state.closed_request" style="margin-top:50px" ng-if="!errors">
<span style="color:white; white-space:nowrap;">{{ state.percentage_complete }} %</span>
</uib-progressbar>
<span translate="{{ state.next_step }}"></span>
<div class="form-group alert alert-danger" ng-repeat="e in errors">
<strong>{{'ERROR' | translate}}:</strong>
<span translate="{{ e }}" ng-if="e !== 'INSUFFICIENT_FUNDS' || !credit_buy_address"></span>
<span translate="{{ 'INSUFFICIENT_FUNDS_WITH_CREDIT_BUY_ADDRESS' }}" ng-if="e === 'INSUFFICIENT_FUNDS' && credit_buy_address"></span>
<a ng-href="{{ credit_buy_address }}" ng-if="e === 'INSUFFICIENT_FUNDS' && credit_buy_address" rel="nofollow noopener" target="_blank">
<span translate="{{ 'BUY' }}"></span>
</a>
</div>
</div>
</div>
<div ng-show="::false" style="position: fixed; height: 100%; width: 100%; background-color: #0f1118; top: 0; left: 0; z-index: 10000;">
......@@ -174,6 +177,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
......@@ -309,6 +309,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......@@ -326,6 +327,7 @@
<script src="js/controller/Enforce2FaCtrl.js" type="application/javascript"></script>
<script src="js/service/api-client.js" type="application/javascript"></script>
<script src="js/service/api-fileserver.js" type="application/javascript"></script>
<script src="js/service/api-pwnedpasswords.js" type="application/javascript"></script>
<script src="js/service/helper.js" type="application/javascript"></script>
<script src="js/service/device.js" type="application/javascript"></script>
......
......@@ -202,6 +202,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
......@@ -519,6 +519,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
(function(angular) {
'use strict';
/**
* @ngdoc controller
* @name psonocli.controller:DownloadFileCtrl
* @requires $scope
* @requires $routeParams
* @requires psonocli.itemBlueprint
*
* @description
* Controller for download-file.html
*/
angular.module('psonocli').controller('DownloadFileCtrl', ['$scope', '$routeParams', 'managerFileTransfer', 'itemBlueprint',
function ($scope, $routeParams, managerFileTransfer, itemBlueprint) {
$scope.state = {
open_requests: 0,
closed_request: 0,
percentage_complete: 0,
next_step: '',
processing: false
};
$scope.errors = [];
activate();
function activate(){
$scope.credit_buy_address = itemBlueprint.server_credit_buy_address();
managerFileTransfer.register('download_started', function(max){
$scope.state.processing = true;
$scope.state.open_requests = max;
});
managerFileTransfer.register('download_step_complete', function(next_step){
$scope.state.closed_request = $scope.state.closed_request + 1;
$scope.state.percentage_complete = Math.round($scope.state.closed_request / $scope.state.open_requests * 1000) / 10;
$scope.state.next_step = next_step;
});
managerFileTransfer.register('download_complete', reset);
$scope.$on('$routeChangeSuccess', function () {
var onSuccess = function(data) {
console.log(data);
};
var onError = function(data) {
if (data.hasOwnProperty('non_field_errors')) {
$scope.errors = data.non_field_errors;
} else {
console.log(data);
alert("Error, should not happen.");
}
};
managerFileTransfer.download_file($routeParams.id).then(onSuccess, onError);
});
}
/**
* @ngdoc
* @name psonocli.controller:DownloadFileCtrl#reset
* @methodOf psonocli.controller:DownloadFileCtrl
*
* @description
* Triggered once someone clicks the cancel button in the modal
*/
function reset() {
$scope.state.open_requests = 0;
$scope.state.closed_request = 0;
$scope.state.percentage_complete = 0;
$scope.state.next_step ='';
$scope.state.processing = false;
}
}]);
}(angular));
\ No newline at end of file
......@@ -64,7 +64,6 @@
$scope.state.closed_request = $scope.state.closed_request + 1;
$scope.state.percentage_complete = Math.round($scope.state.closed_request / $scope.state.open_requests * 1000) / 10;
$scope.state.next_step = next_step;
console.log("REGISTERED: " + next_step);
});
itemBlueprint.register('upload_complete', reset);
......@@ -98,6 +97,7 @@
*/
function save() {
$scope.errors = [];
$scope.credit_buy_address = itemBlueprint.server_credit_buy_address();
for (var i = 0; i < $scope.bp.selected.fields.length; i++) {
var field = $scope.bp.selected.fields[i];
......@@ -131,6 +131,7 @@
};
var onError = function(errors) {
for (var i = 0; i < errors.length; i++) {
$scope.errors.push(errors[i]);
reset();
......
......@@ -237,11 +237,6 @@
managerSecret.redirect_secret($routeParams.type, $routeParams.secret_id);
return;
}
redirect = '/file/download/';
if ($location.path().substring(0, redirect.length) === redirect && $routeParams.hasOwnProperty('id')) {
managerFileTransfer.download_file($routeParams.id);
return;
}
});
}]);
}(angular));
......
(function(angular) {
'use strict';
/**
* @ngdoc controller
* @name psonocli.controller:DownloadFileCtrl
* @requires $scope
* @requires $uibModalInstance
* @requires psonocli.itemBlueprint
* @requires psonocli.cryptoLibrary
* @requires psonocli.helper
*
* @description
* Controller for download-file.html
*/
angular.module('psonocli').controller('DownloadFileCtrl', ['$scope', '$uibModalInstance', 'itemBlueprint', 'cryptoLibrary', 'helper', 'parent', 'path',
function ($scope, $uibModalInstance, itemBlueprint, cryptoLibrary, helper, parent, path) {
$scope.reset = reset;
$scope.save = save;
$scope.cancel = cancel;
$scope.toggle_input_type = toggle_input_type;
$scope.parent = parent;
$scope.path = path;
$scope.state = {
open_requests: 0,
closed_request: 0,
percentage_complete: 0,
next_step: '',
processing: false
};
$scope.name = '';
$scope.content = '';
$scope.data = {
'callback_url': '',
'callback_user': '',
'callback_pass': ''
};
$scope.isCollapsed = true;
$scope.errors = [];
$scope.bp = {
all: itemBlueprint.get_blueprints(),
selected: itemBlueprint.get_default_blueprint()
};
activate();
function activate(){
$scope.$watch('bp.selected', function(newValue, oldValue) {
if (typeof $scope.bp.selected.onNewModalOpen !== 'undefined') {
$scope.bp.selected.onNewModalOpen($scope.bp.selected);
}
});
itemBlueprint.register('upload_started', function(max){
$scope.state.processing = true;
$scope.state.open_requests = max;
});
itemBlueprint.register('upload_step_complete', function(next_step){
$scope.state.closed_request = $scope.state.closed_request + 1;
$scope.state.percentage_complete = Math.round($scope.state.closed_request / $scope.state.open_requests * 1000) / 10;
$scope.state.next_step = next_step;
console.log("REGISTERED: " + next_step);
});
itemBlueprint.register('upload_complete', reset);
}
/**
* @ngdoc
* @name psonocli.controller:DownloadFileCtrl#reset
* @methodOf psonocli.controller:DownloadFileCtrl
*
* @description
* Triggered once someone clicks the cancel button in the modal
*/
function reset() {
$scope.submitted = false;
$scope.state.open_requests = 0;
$scope.state.closed_request = 0;
$scope.state.percentage_complete = 0;
$scope.state.next_step ='';
$scope.state.processing = false;
}
}]);
}(angular));
\ No newline at end of file
......@@ -1065,6 +1065,25 @@
return storage.find_key('config', 'server_info') && storage.find_key('config', 'server_info').value && storage.find_key('config', 'server_info').value.hasOwnProperty('files') && storage.find_key('config', 'server_info').value['files']
}
/**
* @ngdoc
* @name psonocli.itemBlueprint#server_credit_buy_address
* @methodOf psonocli.itemBlueprint
*
* @description
* returns the servers credit buy address if it has one or false
*
* @returns {boolean} returns whether the servers credit buy address
*/
function server_credit_buy_address() {
var has_buy_address = storage.find_key('config', 'server_info') && storage.find_key('config', 'server_info').value && storage.find_key('config', 'server_info').value.hasOwnProperty('credit_buy_address');
if(!has_buy_address) {
return false;
}
return storage.find_key('config', 'server_info').value['credit_buy_address'];
}
/**
* @ngdoc
* @name psonocli.itemBlueprint#get_additional_functions
......@@ -1248,7 +1267,8 @@
blueprint_has_on_click_new_tab: blueprint_has_on_click_new_tab,
blueprint_on_open_secret: blueprint_on_open_secret,
blueprint_msg_before_open_secret: blueprint_msg_before_open_secret,
register: register
register: register,
server_credit_buy_address: server_credit_buy_address
};
};
......
......@@ -19,6 +19,8 @@
var managerFileTransfer = function($q, helper, storage, managerBase, browserClient, cryptoLibrary , converter, apiClient, apiFileserver) {
var registrations = {};
/**
* @ngdoc
* @name psonocli.managerFileTransfer#read_file
......@@ -266,6 +268,9 @@
var download = function (file_transfer_id, chunk_position, shard, hash_checksum) {
registrations['download_step_complete']('DOWNLOADING_FILE_CHUNK');
var ticket = {
'file_transfer_id': file_transfer_id,
'hash_checksum': hash_checksum
......@@ -314,6 +319,7 @@
}
if (!file.hasOwnProperty('file_shard_id') || !file.hasOwnProperty('file_id') || !file['file_shard_id'] || !file['file_id']) {
registrations['download_complete']();
saveAs(new Blob([''], {type: 'text/plain;charset=utf-8'}), file['file_title']);
return
}
......@@ -341,20 +347,25 @@
var allblobs = [];
var chunk_count = Object.keys(file.file_chunks).length;
registrations['download_started'](chunk_count * 2 + 1);
function onError(data) {
console.log(data);
// pass
}
function on_chunk_download(data) {
registrations['download_step_complete']('DECRYPTING_FILE_CHUNK');
next_chunk_id = next_chunk_id + 1;
return cryptoLibrary.decrypt_file(new Uint8Array(data), file['file_secret_key']).then(function(data) {
allblobs.push(data);
if (next_chunk_id > chunk_count) {
var concat = new Blob(allblobs, {type: 'application/octet-string'});
registrations['download_complete']();
saveAs(concat, file['file_title']);
close();
} else {
return download(file_transfer_id, next_chunk_id, shard, file.file_chunks[next_chunk_id]).then(on_chunk_download, onError);
}
......@@ -365,11 +376,25 @@
}
function onError(data) {
console.log(data);
// pass
return $q.reject(data);
}
read_file(file['file_id']).then(onSuccess, onError);
return read_file(file['file_id']).then(onSuccess, onError);
};
/**
* @ngdoc
* @name psonocli.managerFileTransfer#register
* @methodOf psonocli.managerFileTransfer
*
* @description
* used to register functions for callbacks
*
* @param {string} key The key of the function (usually the function name)
* @param {function} func The call back function
*/
var register = function (key, func) {
registrations[key] = func;
};
return {
......@@ -379,7 +404,8 @@
read_shards: read_shards,
filter_shards: filter_shards,
on_item_click: on_item_click,
download_file: download_file
download_file: download_file,
register: register
};
};
......
......@@ -266,6 +266,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
......@@ -174,6 +174,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
......@@ -390,6 +390,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
......@@ -167,6 +167,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
......@@ -226,6 +226,7 @@
<script src="js/controller/modal/DeleteAccountCtrl.js" type="application/javascript"></script>
<script src="js/controller/EditEntryBigCtrl.js" type="application/javascript"></script>
<script src="js/controller/OpenSecretCtrl.js" type="application/javascript"></script>
<script src="js/controller/DownloadFileCtrl.js" type="application/javascript"></script>
<script src="js/controller/OtherCtrl.js" type="application/javascript"></script>
<script src="js/controller/SessionsCtrl.js" type="application/javascript"></script>
<script src="js/controller/KnownHostsCtrl.js" type="application/javascript"></script>
......
......@@ -353,6 +353,29 @@ h1, h2 {
/* CSS fix for angular-ui explained here: https://angular-ui.github.io/bootstrap/ */
.nav, .pagination, .carousel, .panel-title a { cursor: pointer; }
.progress-box {
width:340px;
height:170px;
padding:20px;
position: absolute;
top: 50%;
left: 50%;
margin: -70px 0 0 -170px;
border-radius: 4px;
background-color: $dark-color;
color: $dark-normal-color;
text-align: center;
.progress {
margin-top: 20px;
}
}
.loading-lock {
width:340px;
......
......@@ -202,6 +202,7 @@ self.addEventListener('install', function(event) {
'./js/controller/modal/DeleteAccountCtrl.js',
'./js/controller/EditEntryBigCtrl.js',
'./js/controller/OpenSecretCtrl.js',
'./js/controller/DownloadFileCtrl.js',
'./js/controller/OtherCtrl.js',
'./js/controller/SessionsCtrl.js',
'./js/controller/KnownHostsCtrl.js',
......
......@@ -7,6 +7,8 @@
"FILE_CHUNKS": "Datei Stück",
"NO_PERMISSION_OR_NOT_EXIST": "Es existiert nicht existent oder sie haben keine Berechtigung.",
"INSUFFICIENT_FUNDS": "Guthaben zu niedrig",
"INSUFFICIENT_FUNDS_WITH_CREDIT_BUY_ADDRESS": "Guthaben zu niedrig, sie können hier welches kaufen:",
"BUY": "Kaufen",
"NO_FILE_SELECTED": "Keine Datei ausgewählt",
"NO_FILESERVER_AVAILABLE": "Kein Fileserver verfügbar",
"FILE_SIZE": "Dateigröße",
......
......@@ -7,6 +7,8 @@
"FILE_CHUNKS": "File chunks",
"NO_PERMISSION_OR_NOT_EXIST": "You don't have permission to access or it does not exist.",
"INSUFFICIENT_FUNDS": "Insufficient funds",
"INSUFFICIENT_FUNDS_WITH_CREDIT_BUY_ADDRESS": "Insufficient funds, you can buy some here:",
"BUY": "Buy",
"NO_FILE_SELECTED": "No file selected",
"NO_FILESERVER_AVAILABLE": "No fileserver available",
"FILE_SIZE": "File Size",
......
......@@ -245,7 +245,11 @@
</div>
<div ng-repeat="e in errors" class="help-block">
<span translate="{{ e }}"></span>
<span translate="{{ e }}" ng-if="e !== 'INSUFFICIENT_FUNDS' || !credit_buy_address"></span>
<span translate="{{ 'INSUFFICIENT_FUNDS_WITH_CREDIT_BUY_ADDRESS' }}" ng-if="e === 'INSUFFICIENT_FUNDS' && credit_buy_address"></span>
<a ng-href="{{ credit_buy_address }}" ng-if="e === 'INSUFFICIENT_FUNDS' && credit_buy_address" rel="nofollow noopener" target="_blank">
<span translate="{{ 'BUY' }}"></span>
</a>
</div>
<div ng-repeat="e in msgs" class="help-block">
<span translate="{{ e }}"></span>
......
......@@ -102,6 +102,7 @@
"../src/common/data/js/controller/modal/DeleteAccountCtrl.js",
"../src/common/data/js/controller/EditEntryBigCtrl.js",
"../src/common/data/js/controller/OpenSecretCtrl.js",
"../src/common/data/js/controller/DownloadFileCtrl.js",
"../src/common/data/js/controller/OtherCtrl.js",
"../src/common/data/js/controller/SessionsCtrl.js",
"../src/common/data/js/controller/KnownHostsCtrl.js",
......
......@@ -106,6 +106,7 @@
"../src/common/data/js/controller/modal/DeleteAccountCtrl.js",
"../src/common/data/js/controller/EditEntryBigCtrl.js",
"../src/common/data/js/controller/OpenSecretCtrl.js",
"../src/common/data/js/controller/DownloadFileCtrl.js",
"../src/common/data/js/controller/OtherCtrl.js",
"../src/common/data/js/controller/SessionsCtrl.js",
"../src/common/data/js/controller/KnownHostsCtrl.js",
......
......@@ -102,6 +102,7 @@
"../src/common/data/js/controller/modal/DeleteAccountCtrl.js",
"../src/common/data/js/controller/EditEntryBigCtrl.js",
"../src/common/data/js/controller/OpenSecretCtrl.js",
"../src/common/data/js/controller/DownloadFileCtrl.js",
"../src/common/data/js/controller/OtherCtrl.js",
"../src/common/data/js/controller/SessionsCtrl.js",
"../src/common/data/js/controller/KnownHostsCtrl.js",
......
......@@ -102,6 +102,7 @@
"../src/common/data/js/controller/modal/DeleteAccountCtrl.js",
"../src/common/data/js/controller/EditEntryBigCtrl.js",
"../src/common/data/js/controller/OpenSecretCtrl.js",
"../src/common/data/js/controller/DownloadFileCtrl.js",
"../src/common/data/js/controller/OtherCtrl.js",
"../src/common/data/js/controller/SessionsCtrl.js",
"../src/common/data/js/controller/KnownHostsCtrl.js",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment