2018-01-22 13:01:38 -08:00
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" / >
< meta name = "viewport" content = "user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height" / >
< title > Cloudron Restore < / title >
2018-04-10 14:49:49 +02:00
< link id = "favicon" href = "/api/v1/cloudron/avatar" rel = "icon" type = "image/png" >
2018-01-22 13:01:38 -08:00
<!-- Theme CSS -->
2018-04-10 14:49:49 +02:00
< link type = "text/css" rel = "stylesheet" href = "/theme.css" >
2018-01-22 13:01:38 -08:00
2020-07-31 09:17:54 +02:00
<!-- Fontawesome -->
< link type = "text/css" rel = "stylesheet" href = "/3rdparty/fontawesome/css/all.css?<%= revision %>" / >
2018-01-22 13:01:38 -08:00
<!-- jQuery -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/jquery.min.js" > < / script >
2018-01-22 13:01:38 -08:00
2020-06-03 22:59:17 +02:00
<!-- async -->
< script type = "text/javascript" src = "/3rdparty/js/async-3.2.0.min.js" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Bootstrap Core JavaScript -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/bootstrap.min.js" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Angularjs scripts -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/angular.min.js" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-loader.min.js" > < / script >
2020-11-08 10:48:30 +01:00
< script type = "text/javascript" src = "/3rdparty/js/angular-cookies.min.js" > < / script >
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/angular-md5.min.js" > < / script >
2019-01-07 17:23:26 +01:00
< script type = "text/javascript" src = "/3rdparty/js/angular-ui-notification.js" > < / script >
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/autofill-event.js" > < / script >
2018-01-22 13:01:38 -08:00
<!-- Angular directives for tldjs -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/3rdparty/js/tld.js" > < / script >
2018-01-22 13:01:38 -08:00
2019-11-11 11:07:52 -08:00
<!-- Angular directives for bootstrap https://angular - ui.github.io/bootstrap/ -->
< script type = "text/javascript" src = "/3rdparty/js/ui-bootstrap-tpls-1.3.3.min.js" > < / script >
2020-11-08 10:48:30 +01:00
<!-- Angular translate https://angular - translate.github.io/ -->
< script type = "text/javascript" src = "/3rdparty/js/angular-translate.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-translate-loader-static-files.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-translate-storage-cookie.min.js?<%= revision %>" > < / script >
< script type = "text/javascript" src = "/3rdparty/js/angular-translate-storage-local.min.js?<%= revision %>" > < / script >
2020-07-10 15:20:53 +02:00
<!-- Showdown (markdown converter) -->
2020-08-08 21:58:12 -07:00
< script type = "text/javascript" src = "/3rdparty/js/showdown-1.9.1.min.js?<%= revision %>" > < / script >
2020-07-10 15:20:53 +02:00
2018-01-22 13:01:38 -08:00
<!-- Setup Application -->
2018-04-10 14:49:49 +02:00
< script type = "text/javascript" src = "/js/restore.js" > < / script >
2018-01-22 13:01:38 -08:00
< / head >
< body class = "setup" ng-app = "Application" ng-controller = "RestoreController" >
2020-09-09 10:08:13 -07:00
< a class = "offline-banner animateMe" ng-show = "client.offline" ng-cloak href = "https://docs.cloudron.io/troubleshooting/" target = "_blank" > < i class = "fa fa-circle-notch fa-spin" > < / i > Cloudron is offline. Reconnecting...< / a >
2019-09-05 22:22:42 +02:00
2018-01-22 13:01:38 -08:00
< div class = "main-container ng-cloak text-center" ng-show = "busy" >
< div class = "row" >
< div class = "col-md-6 col-md-offset-3" >
2018-11-16 17:03:21 +01:00
< i class = "fa fa-circle-notch fa-spin fa-5x" > < / i > < br / >
2018-12-15 16:08:44 -08:00
< h3 > {{ message }} ...< / h3 >
2018-01-22 13:01:38 -08:00
< / div >
< / div >
< / div >
< div class = "main-container ng-cloak" ng-show = "initialized && !busy" >
< div class = "row" >
< div class = "col-md-6 col-md-offset-3" >
< div class = "card" style = "max-width: none; padding: 20px;" >
< form name = "configureBackupForm" role = "form" novalidate ng-submit = "restore()" autocomplete = "off" >
< div class = "row" >
< div class = "col-md-10 col-md-offset-1 text-center" >
< h2 > Cloudron Restore< / h2 >
< p > Provide the backup to restore from< / p >
< / div >
< / div >
2020-05-16 11:19:47 -07:00
< div class = "row" style = "margin-bottom: 20px" >
2020-05-15 00:32:49 +02:00
< div class = "col-md-8 col-md-offset-2 text-center" >
< input type = "file" id = "backupConfigFileInput" style = "display:none" / >
< button type = "button" class = "btn btn-default" onclick = "getElementById('backupConfigFileInput').click();" > Upload Backup Config< / button >
< / div >
2020-05-16 10:32:33 -07:00
< br / >
2020-05-15 00:32:49 +02:00
< / div >
2018-01-22 13:01:38 -08:00
< div class = "row" >
2018-06-04 20:35:26 -07:00
< div class = "col-md-8 col-md-offset-2" >
2018-01-22 13:01:38 -08:00
< p class = "has-error text-center" ng-show = "error" > {{ error.generic }}< / p >
< div class = "form-group" >
2020-09-09 10:08:13 -07:00
< label class = "control-label" for = "storageProviderProvider" > Storage provider < sup > < a ng-href = "https://docs.cloudron.io/backups/#storage-providers" class = "help" target = "_blank" > < i class = "fa fa-question-circle" > < / i > < / a > < / sup > < / label >
2022-12-24 11:10:04 +01:00
< select class = "form-control" id = "storageProviderProvider" ng-model = "provider" ng-options = "a.value as a.name for a in storageProviders" ng-change = clearForm() > < / select >
2018-01-22 13:01:38 -08:00
< / div >
2021-06-22 14:29:51 -07:00
<!-- mountpoint -->
< div class = "form-group" ng-class = "{ 'has-error': error.mountPoint }" ng-show = "provider === 'mountpoint'" >
2021-05-27 15:01:44 -07:00
< label class = "control-label" for = "inputConfigureMountPoint" > Mountpoint< / label >
2021-06-22 14:29:51 -07:00
< input type = "text" class = "form-control" ng-model = "mountPoint" id = "inputConfigureMountPoint" name = "mountPoint" ng-disabled = "busy" placeholder = "Folder where filesystem is mounted" ng-required = "provider === 'mountpoint'" >
2021-05-27 15:01:44 -07:00
< / div >
2021-06-22 14:29:51 -07:00
<!-- CIFS/NFS/SSHFS -->
< div class = "form-group" ng-show = "provider === 'cifs' || provider === 'nfs' || provider === 'sshfs'" >
2021-05-27 15:01:44 -07:00
< label class = "control-label" for = "configureBackupHost" > Server IP or Hostname< / label >
< input type = "text" class = "form-control" ng-model = "mountOptions.host" id = "configureBackupHost" name = "host" ng-disabled = "busy" placeholder = "Server IP or hostname" ng-required = "provider === 'cifs' || provider === 'nfs'" >
< / div >
2022-01-10 16:30:12 +01:00
<!-- CIFS -->
< div class = "checkbox" ng-show = "provider === 'cifs'" >
< label >
< input type = "checkbox" ng-model = "mountOptions.seal" > Use seal encryption. Requires at least SMB v3< / input >
< / label >
< / div >
2021-06-22 14:29:51 -07:00
<!-- CIFS/NFS/SSHFS -->
< div class = "form-group" ng-show = "provider === 'cifs' || provider === 'nfs' || provider === 'sshfs'" >
2021-05-27 15:01:44 -07:00
< label class = "control-label" for = "configureBackupRemoteDir" > Remote Directory< / label >
< input type = "text" class = "form-control" ng-model = "mountOptions.remoteDir" id = "configureBackupRemoteDir" name = "remoteDir" ng-disabled = "busy" placeholder = "/share" ng-required = "provider === 'cifs' || provider === 'nfs'" >
< / div >
<!-- CIFS -->
< div class = "form-group" ng-show = "provider === 'cifs'" >
< label class = "control-label" for = "configureBackupUsername" > Username ({{ provider }})< / label >
2022-03-30 09:14:08 -07:00
< input type = "text" class = "form-control" ng-model = "mountOptions.username" id = "configureBackupUsername" name = "cifsUsername" ng-disabled = "busy" >
2021-05-27 15:01:44 -07:00
< / div >
<!-- CIFS -->
< div class = "form-group" ng-show = "provider === 'cifs'" >
< label class = "control-label" for = "configureBackupPassword" > Password ({{ provider }})< / label >
2022-03-30 09:14:08 -07:00
< input type = "password" class = "form-control" ng-model = "mountOptions.password" id = "configureBackupPassword" name = "cifsPassword" ng-disabled = "busy" password-reveal >
2021-05-27 15:01:44 -07:00
< / div >
2022-06-08 10:38:54 -07:00
<!-- EXT4/XFS -->
< div class = "form-group" ng-class = "{ 'has-error': error.diskPath }" ng-show = "provider === 'ext4' || provider === 'xfs'" >
2021-05-27 15:01:44 -07:00
< label class = "control-label" for = "inputConfigureDiskPath" > Disk Path< / label >
2022-06-08 10:38:54 -07:00
< input type = "text" class = "form-control" ng-model = "mountOptions.diskPath" id = "inputConfigureDiskPath" name = "diskPath" ng-disabled = "busy" placeholder = "Directory for backups" ng-required = "provider === 'ext4' || provider === 'xfs'" >
2021-01-07 19:41:39 +01:00
< / div >
2021-05-27 15:31:37 -07:00
<!-- SSHFS -->
< div class = "form-group" ng-show = "provider === 'sshfs'" >
< label class = "control-label" for = "configureBackupPort" > SSH Port< / label >
< input type = "number" class = "form-control" ng-model = "mountOptions.port" id = "configureBackupPort" name = "port" ng-disabled = "busy" >
< / div >
<!-- SSHFS -->
< div class = "form-group" ng-show = "provider === 'sshfs'" >
< label class = "control-label" for = "configureBackupUser" > SSH User< / label >
< input type = "text" class = "form-control" ng-model = "mountOptions.user" id = "configureBackupUser" name = "user" ng-disabled = "busy" >
< / div >
<!-- SSHFS -->
< div class = "form-group" ng-show = "provider === 'sshfs'" >
< label class = "control-label" for = "configureBackupPrivateKey" > SSH Private Key< / label >
< textarea class = "form-control" ng-model = "mountOptions.privateKey" id = "configureBackupPrivateKey" name = "privateKey" ng-disabled = "busy" > < / textarea >
< / div >
2018-01-22 13:01:38 -08:00
<!-- Filesystem -->
< div class = "form-group" ng-class = "{ 'has-error': error.backupFolder }" ng-show = "provider === 'filesystem'" >
< label class = "control-label" for = "inputConfigureBackupFolder" > Local backup directory< / label >
< input type = "text" class = "form-control" ng-model = "backupFolder" id = "inputConfigureBackupFolder" name = "backupFolder" ng-disabled = "busy" placeholder = "Directory for backups" ng-required = "provider === 'filesystem'" >
< / div >
<!-- S3/Minio/SOS -->
2023-01-10 11:16:09 +01:00
< div class = "form-group" ng-class = "{ 'has-error': error.endpoint }" ng-show = "provider === 'minio' || provider === 'upcloud-objectstorage' || provider === 'backblaze-b2' || provider === 'cloudflare-r2' || provider === 's3-v4-compat' || provider === 'idrive-e2'" >
2018-01-22 13:01:38 -08:00
< label class = "control-label" for = "inputConfigureBackupEndpoint" > Endpoint< / label >
2023-01-10 11:16:09 +01:00
< input type = "text" class = "form-control" ng-model = "endpoint" id = "inputConfigureBackupEndpoint" name = "endpoint" ng-disabled = "busy" placeholder = "URL" ng-required = "provider === 'minio' || provider === 'upcloud-objectstorage' || provider === 'backblaze-b2' || provider === 'cloudflare-r2' || provider === 's3-v4-compat' || provider === 'idrive-e2'" >
2018-01-22 13:01:38 -08:00
< / div >
< div class = "checkbox" ng-show = "provider === 'minio' || provider === 's3-v4-compat'" >
< label >
< input type = "checkbox" ng-model = "acceptSelfSignedCerts" id = "inputConfigureBackupSelfSigned" >
Accept Self-signed certificate
< / input >
< / label >
< / div >
< div class = "form-group" ng-class = "{ 'has-error': error.bucket }" ng-show = "s3like(provider) || provider === 'gcs'" >
< label class = "control-label" for = "inputConfigureBackupBucket" > Bucket name< / label >
< input type = "text" class = "form-control" ng-model = "bucket" id = "inputConfigureBackupBucket" name = "bucket" ng-disabled = "busy" ng-required = "s3like(provider)" >
< / div >
2021-06-22 14:29:51 -07:00
< div class = "form-group" ng-class = "{ 'has-error': error.prefix }" ng-show = "provider !== 'filesystem' && provider !== 'noop'" >
2018-01-22 13:01:38 -08:00
< label class = "control-label" for = "inputConfigureBackupPrefix" > Prefix< / label >
< input type = "text" class = "form-control" ng-model = "prefix" id = "inputConfigureBackupPrefix" name = "prefix" ng-disabled = "busy" placeholder = "Prefix for backup file names" >
< / div >
< div class = "form-group" ng-class = "{ 'has-error': error.region }" ng-show = "provider === 's3'" >
2018-04-10 18:05:35 +02:00
< label class = "control-label" for = "inputConfigureBackupS3Region" > Region< / label >
< select class = "form-control" name = "region" id = "inputConfigureBackupS3Region" ng-model = "region" ng-options = "a.value as a.name for a in s3Regions" ng-disabled = "busy" ng-required = "provider === 's3'" > < / select >
2018-01-22 13:01:38 -08:00
< / div >
2020-07-05 10:58:20 -07:00
< div class = "form-group" ng-class = "{ 'has-error': error.region }" ng-show = "provider === 's3-v4-compat'" >
< label class = "control-label" for = "inputConfigureBackupS3V4CompatRegion" > Region< / label >
< input class = "form-control" type = "text" name = "region" id = "inputConfigureBackupS3V4CompatRegion" ng-model = "region" ng-disabled = "busy" placeholder = "Leave empty to use us-east-1 as default" > < / input >
< / div >
2018-01-22 13:01:38 -08:00
< div class = "form-group" ng-class = "{ 'has-error': error.region }" ng-show = "provider === 'digitalocean-spaces'" >
2018-04-10 18:05:35 +02:00
< label class = "control-label" for = "inputConfigureBackupDORegion" > Region< / label >
< select class = "form-control" name = "region" id = "inputConfigureBackupDORegion" ng-model = "endpoint" ng-options = "a.value as a.name for a in doSpacesRegions" ng-disabled = "busy" ng-required = "provider === 'digitalocean-spaces'" > < / select >
2018-01-22 13:01:38 -08:00
< / div >
2019-01-23 18:04:43 -08:00
< div class = "form-group" ng-class = "{ 'has-error': error.region }" ng-show = "provider === 'exoscale-sos'" >
< label class = "control-label" for = "inputConfigureBackupExoscaleRegion" > Region< / label >
< select class = "form-control" name = "region" id = "inputConfigureBackupExoscaleRegion" ng-model = "endpoint" ng-options = "a.value as a.name for a in exoscaleSosRegions" ng-disabled = "busy" ng-required = "provider === 'exoscale-sos'" > < / select >
< / div >
2019-07-30 10:42:18 -07:00
< div class = "form-group" ng-class = "{ 'has-error': error.region }" ng-show = "provider === 'wasabi'" >
< label class = "control-label" for = "inputConfigureBackupWasabiRegion" > Region< / label >
< select class = "form-control" name = "region" id = "inputConfigureBackupWasabiRegion" ng-model = "endpoint" ng-options = "a.value as a.name for a in wasabiRegions" ng-disabled = "busy" ng-required = "provider === 'wasabi'" > < / select >
< / div >
2019-06-21 11:06:50 -07:00
< div class = "form-group" ng-class = "{ 'has-error': error.region }" ng-show = "provider === 'scaleway-objectstorage'" >
< label class = "control-label" for = "inputConfigureBackupScalewayRegion" > Region< / label >
< select class = "form-control" name = "region" id = "inputConfigureBackupScalewayRegion" ng-model = "endpoint" ng-options = "a.value as a.name for a in scalewayRegions" ng-disabled = "busy" ng-required = "provider === 'scaleway-objectstorage'" > < / select >
< / div >
2020-02-26 09:08:34 -08:00
< div class = "form-group" ng-class = "{ 'has-error': error.region }" ng-show = "provider === 'linode-objectstorage'" >
< label class = "control-label" for = "inputConfigureBackupLinodeRegion" > Region< / label >
< select class = "form-control" name = "region" id = "inputConfigureBackupLinodeRegion" ng-model = "endpoint" ng-options = "a.value as a.name for a in linodeRegions" ng-disabled = "busy" ng-required = "provider === 'linode-objectstorage'" > < / select >
< / div >
2020-04-29 12:54:19 -07:00
< div class = "form-group" ng-class = "{ 'has-error': error.region }" ng-show = "provider === 'ovh-objectstorage'" >
< label class = "control-label" for = "inputConfigureBackupOvhRegion" > Region< / label >
< select class = "form-control" name = "region" id = "inputConfigureBackupOvhRegion" ng-model = "endpoint" ng-options = "a.value as a.name for a in ovhRegions" ng-disabled = "busy" ng-required = "provider === 'ovh-objectstorage'" > < / select >
< / div >
2021-02-04 10:14:42 -08:00
< div class = "form-group" ng-class = "{ 'has-error': error.region }" ng-show = "provider === 'ionos-objectstorage'" >
< label class = "control-label" for = "inputConfigureBackupIonosRegion" > Region< / label >
< select class = "form-control" name = "region" id = "inputConfigureBackupIonosRegion" ng-model = "endpoint" ng-options = "a.value as a.name for a in ionosRegions" ng-disabled = "busy" ng-required = "provider === 'ionos-objectstorage'" > < / select >
< / div >
2021-06-16 22:35:46 -07:00
< div class = "form-group" ng-class = "{ 'has-error': error.region }" ng-show = "provider === 'vultr-objectstorage'" >
< label class = "control-label" for = "inputConfigureBackupVultrRegion" > Region< / label >
< select class = "form-control" name = "region" id = "inputConfigureBackupVultrRegion" ng-model = "endpoint" ng-options = "a.value as a.name for a in vultrRegions" ng-disabled = "busy" ng-required = "provider === 'vultr-objectstorage'" > < / select >
< / div >
2018-01-22 13:01:38 -08:00
< div class = "form-group" ng-class = "{ 'has-error': error.accessKeyId }" ng-show = "s3like(provider)" >
< label class = "control-label" for = "inputConfigureBackupAccessKeyId" > Access key id< / label >
< input type = "text" class = "form-control" ng-model = "accessKeyId" id = "inputConfigureBackupAccessKeyId" name = "accessKeyId" ng-disabled = "busy" ng-required = "s3like(provider)" >
< / div >
< div class = "form-group" ng-class = "{ 'has-error': error.secretAccessKey }" ng-show = "s3like(provider)" >
< label class = "control-label" for = "inputConfigureBackupSecretAccessKey" > Secret access key< / label >
< input type = "text" class = "form-control" ng-model = "secretAccessKey" id = "inputConfigureBackupSecretAccessKey" name = "secretAccessKey" ng-disabled = "busy" ng-required = "s3like(provider)" >
< / div >
< div class = "form-group" ng-class = "{ 'has-error': error.gcsKeyInput }" ng-show = "provider === 'gcs'" >
< label class = "control-label" for = "gcsKeyInput" > Service Account Key< / label >
< div class = "input-group" >
< input type = "file" id = "gcsKeyFileInput" style = "display:none" / >
< input type = "text" class = "form-control" placeholder = "Service Account Key" ng-model = "gcsKey.keyFileName" id = "gcsKeyInput" name = "cert" onclick = "getElementById('gcsKeyFileInput').click();" style = "cursor: pointer;" ng-disabled = "busy" ng-required = "provider === 'gcs'" >
< span class = "input-group-addon" >
< i class = "fa fa-upload" onclick = "getElementById('gcsKeyFileInput').click();" > < / i >
< / span >
< / div >
< / div >
2022-06-27 09:02:44 -07:00
< div class = "form-group" >
2018-01-22 13:01:38 -08:00
< label class = "control-label" for = "storageFormat" > Storage Format< / label >
< select class = "form-control" id = "storageFormat" ng-change = "key = ''" ng-model = "format" ng-options = "a.value as a.name for a in formats" > < / select >
< / div >
2022-04-05 09:41:09 -07:00
< div class = "form-group" ng-class = "{ 'has-error': error.remotePath }" >
2023-01-19 10:16:27 +01:00
< label class = "control-label" for = "inputConfigureRemotePath" > Backup Path< / label >
2018-01-22 13:01:38 -08:00
2023-01-19 10:16:27 +01:00
< input type = "text" class = "form-control" ng-model = "remotePath" name = "inputConfigureBackupId" placeholder = "Backup Path" required ng-disabled = "busy" >
2018-01-22 13:01:38 -08:00
< / div >
2019-09-05 11:38:55 -07:00
2022-06-27 09:02:44 -07:00
< div class = "form-group" ng-class = "{ 'has-error': error.key }" >
2020-05-15 00:32:49 +02:00
< label class = "control-label" for = "inputConfigureBackupPassword" > Encryption password < span ng-hide = "encrypted" > (optional)< / span > < / label >
< input type = "text" class = "form-control" ng-model = "password" id = "inputConfigureBackupPassword" name = "prefix" ng-disabled = "busy" placeholder = "Passphrase used to encrypt the backups" ng-required = "encrypted" >
2019-09-05 11:38:55 -07:00
< / div >
2018-01-22 13:01:38 -08:00
2023-01-23 10:18:31 +01:00
< div class = "checkbox" ng-show = "format === 'rsync' && password.length !== 0" >
2022-06-27 09:02:44 -07:00
< label >
< input type = "checkbox" ng-model = "encryptedFilenames" > Decrypt Filenames< / input >
< / label >
< / div >
2023-01-23 10:18:31 +01:00
< br / >
2021-02-24 15:16:29 -08:00
< div class = "checkbox" >
< label >
2021-02-25 10:53:32 -08:00
< input type = "checkbox" ng-model = "skipDnsSetup" > < b > Dry run< / b > < / sup >
2021-02-24 15:16:29 -08:00
< / label >
< br / >
2021-02-25 10:53:32 -08:00
< small > When enabled, apps are restored but the DNS records are not updated to point to this server. To access the dashboard, this browser's host must have an entry in < code > /etc/hosts< / code > for the dashboard domain to this server's IP.
2021-03-01 11:36:07 -08:00
See the < a href = "https://docs.cloudron.io/backups/#dry-run" target = "_blank" > docs< / a > for more information.< / small >
2021-02-24 15:16:29 -08:00
< / div >
2018-01-22 13:01:38 -08:00
< input class = "ng-hide" type = "submit" ng-disabled = "configureBackupForm.$invalid" / >
2019-11-11 11:07:52 -08:00
< div uib-collapse = "!advancedVisible" >
2021-02-24 15:16:29 -08:00
2019-11-11 11:07:52 -08:00
< div class = "form-group" >
2020-09-09 10:08:13 -07:00
< label class = "control-label" > IP Configuration < sup > < a ng-href = "https://docs.cloudron.io/networking/#ip-configuration" class = "help" target = "_blank" > < i class = "fa fa-question-circle" > < / i > < / a > < / sup > < / label >
2019-11-11 11:07:52 -08:00
< select class = "form-control" ng-model = "sysinfo.provider" ng-options = "a.value as a.name for a in sysinfoProvider" > < / select >
< / div >
<!-- Fixed -->
2022-05-02 12:02:52 +02:00
< div class = "form-group" ng-show = "sysinfo.provider === 'fixed'" ng-class = "{ 'has-error': error.ipv4 }" >
2019-11-11 11:07:52 -08:00
< label class = "control-label" > IP Address< / label >
2022-05-02 12:02:52 +02:00
< input type = "text" class = "form-control" ng-model = "sysinfo.ipv4" name = "ipv4" ng-disabled = "sysinfo.busy" ng-required = "sysinfo.provider === 'fixed'" >
< p class = "has-error" ng-show = "error.ipv4" > {{ error.ipv4 }}< / p >
2019-11-11 11:07:52 -08:00
< / div >
<!-- Network Interface -->
< div class = "form-group" ng-show = "sysinfo.provider === 'network-interface'" ng-class = "{ 'has-error': error.ifname }" >
< label class = "control-label" > Interface Name< / label >
< input type = "text" class = "form-control" ng-model = "sysinfo.ifname" name = "ifname" ng-disabled = "sysinfo.busy" ng-required = "sysinfo.provider === 'network-interface'" >
< p class = "has-error" ng-show = "error.ifname" > {{ error.ifname }}< / p >
< / div >
< / div >
< div class = "text-center" >
< a href = "" ng-click = "advancedVisible = true" ng-hide = "advancedVisible" > Advanced settings...< / a >
< a href = "" ng-click = "advancedVisible = false" ng-show = "advancedVisible" > Hide Advanced settings< / a >
< / div >
2018-01-22 13:01:38 -08:00
< / div >
< / div >
2018-06-04 20:35:26 -07:00
< br / >
2019-11-11 11:07:52 -08:00
2018-01-22 13:01:38 -08:00
< div class = "row" >
< div class = "col-md-12 text-center" >
2018-11-16 17:03:21 +01:00
< button type = "submit" class = "btn btn-primary" ng-disabled = "configureBackupForm.$invalid" / > < i class = "fa fa-circle-notch fa-spin" ng-show = "busy" > < / i > Restore< / button >
2018-01-22 13:01:38 -08:00
< / div >
< / div >
< / form >
< / div >
< / div >
< / div >
< / div >
< footer class = "text-center" >
2022-01-05 09:18:26 -08:00
< span class = "text-muted" > © 2022 < a href = "https://cloudron.io" target = "_blank" > Cloudron< / a > < / span >
2018-02-23 15:53:23 -08:00
< span class = "text-muted" > < a href = "https://forum.cloudron.io" target = "_blank" > Forum < i class = "fa fa-comments" > < / i > < / a > < / span >
2018-01-22 13:01:38 -08:00
< / footer >
< / body >
< / html >