2020-02-04 14:35:59 +01: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" />
|
|
|
|
|
<meta http-equiv="Content-Security-Policy" content="default-src <%= apiOrigin %> 'unsafe-inline' 'unsafe-eval' 'self'; img-src <%= apiOrigin %> 'self'" />
|
|
|
|
|
|
|
|
|
|
<title> Cloudron Login </title>
|
|
|
|
|
|
|
|
|
|
<link id="favicon" href="<%= apiOrigin %>/api/v1/cloudron/avatar" rel="icon" type="image/png">
|
|
|
|
|
|
|
|
|
|
<!-- Theme CSS -->
|
|
|
|
|
<link type="text/css" rel="stylesheet" href="/theme.css">
|
|
|
|
|
|
|
|
|
|
<!-- Custom Fonts -->
|
|
|
|
|
<link type="text/css" rel="stylesheet" href="/3rdparty/fontawesome/css/all.min.css">
|
|
|
|
|
|
|
|
|
|
<!-- jQuery-->
|
|
|
|
|
<script type="text/javascript" src="/3rdparty/js/jquery.min.js"></script>
|
|
|
|
|
|
|
|
|
|
<!-- Bootstrap Core JavaScript -->
|
|
|
|
|
<script type="text/javascript" src="/3rdparty/js/bootstrap.min.js"></script>
|
|
|
|
|
|
|
|
|
|
<!-- Angularjs scripts -->
|
|
|
|
|
<script type="text/javascript" src="/3rdparty/js/angular.min.js"></script>
|
|
|
|
|
<script type="text/javascript" src="/3rdparty/js/angular-loader.min.js"></script>
|
|
|
|
|
<!-- <script type="text/javascript" src="/3rdparty/js/angular-md5.min.js"></script> -->
|
|
|
|
|
<!-- <script type="text/javascript" src="/3rdparty/js/angular-ui-notification.js"></script> -->
|
|
|
|
|
<script type="text/javascript" src="/3rdparty/js/autofill-event.js"></script>
|
|
|
|
|
|
|
|
|
|
<!-- 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>
|
|
|
|
|
|
|
|
|
|
<!-- Setup Application -->
|
|
|
|
|
<script type="text/javascript" src="/js/login.js"></script>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
<body ng-app="Application" ng-controller="LoginController">
|
|
|
|
|
|
|
|
|
|
<!-- login tester -->
|
|
|
|
|
|
|
|
|
|
<div class="layout-root">
|
|
|
|
|
|
2020-02-04 15:27:35 +01:00
|
|
|
<div class="layout-content" ng-hide="passwordReset">
|
2020-02-04 15:00:56 +01:00
|
|
|
<div class="card" style="padding: 20px; margin-top: 100px; max-width: 620px;">
|
2020-02-04 14:35:59 +01:00
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-md-12" style="text-align: center;">
|
2020-02-04 15:00:56 +01:00
|
|
|
<img width="128" height="128" style="margin-top: -84px" src="<%= apiOrigin %>/api/v1/cloudron/avatar"/>
|
|
|
|
|
<br/>
|
|
|
|
|
<h2>Cloudron Login</h2>
|
2020-02-04 15:27:35 +01:00
|
|
|
<h2 ng-show="passwordReset">Password Reset</h2>
|
2020-02-04 14:35:59 +01:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<br/>
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-md-12">
|
|
|
|
|
<h4 class="has-error" ng-show="error">Invalid Credentials</h4>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-md-12">
|
|
|
|
|
<form name="loginForm" ng-submit="onLogin()">
|
|
|
|
|
<div class="form-group">
|
|
|
|
|
<label class="control-label" for="inputUsername">Username</label>
|
|
|
|
|
<input type="text" class="form-control" id="inputUsername" name="username" ng-model="username" autofocus required>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="form-group">
|
|
|
|
|
<label class="control-label" for="inputPassword">Password</label>
|
|
|
|
|
<input type="password" class="form-control" name="password" id="inputPassword" ng-model="password" required>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="form-group">
|
|
|
|
|
<label class="control-label" for="inputPassword">2FA Token (if enabled)</label>
|
|
|
|
|
<input type="text" class="form-control" name="totpToken" id="inputTotpToken" ng-model="totpToken" value="">
|
|
|
|
|
</div>
|
|
|
|
|
<input class="btn btn-primary btn-outline pull-right" type="submit" value="Sign in" ng-disabled="loginForm.$invalid"/>
|
|
|
|
|
</form>
|
2020-02-04 15:27:35 +01:00
|
|
|
<a ng-href="" class="hand" ng-click="showPasswordReset()">Reset password</a>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="layout-content" ng-show="passwordReset">
|
|
|
|
|
<div class="card" style="padding: 20px; margin-top: 100px; max-width: 620px;">
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-md-12" style="text-align: center;">
|
|
|
|
|
<img width="128" height="128" style="margin-top: -84px" src="<%= apiOrigin %>/api/v1/cloudron/avatar"/>
|
|
|
|
|
<br/>
|
|
|
|
|
<h2>Password Reset</h2>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<br/>
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-md-12">
|
|
|
|
|
<h4 class="has-error" ng-show="error">Invalid Credentials</h4>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-md-12">
|
|
|
|
|
<form name="passwordResetForm" ng-submit="onPasswordReset()">
|
|
|
|
|
<div class="form-group">
|
|
|
|
|
<label class="control-label" for="inputPasswordResetIdentifier">Username or Email</label>
|
|
|
|
|
<input type="text" class="form-control" id="inputPasswordResetIdentifier" name="passwordResetIdentifier" ng-model="passwordResetIdentifier" autofocus required>
|
|
|
|
|
</div>
|
|
|
|
|
<input class="btn btn-primary btn-outline pull-right" type="submit" value="Reset" ng-disabled="passwordResetForm.$invalid"/>
|
|
|
|
|
</form>
|
|
|
|
|
<a ng-href="" class="hand" ng-click="showLogin()">Back to login</a>
|
2020-02-04 14:35:59 +01:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<footer class="text-center">
|
|
|
|
|
<span class="text-muted">© 2016-20 <a href="https://cloudron.io" target="_blank">Cloudron</a></span>
|
|
|
|
|
</footer>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
|
|
|
|
|