
<html>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <title>Login to Apache Sling</title>
        <link href="/etc/clientlibs/launchpad/dist/css/index.css" rel="stylesheet" />
        <link href="/etc/clientlibs/launchpad/dist/css/form.css" rel="stylesheet" />
    </head>
    <body>
        <div class="Grid Fit-Medium Home-Grid">
            <div class="Gradient"></div>
            <header class="Cell Medium-35 Large-25 Align-Center Logos">
                <a href="http://sling.apache.org" target="_blank" id="sling-logo" title="Visit the Apache Sling website">
                    <img src="/sling-logo.svg" alt="Apache Sling Logo"/>
                </a>
                <a href="http://apache.org" target="_blank" id="asf-logo" title="Visit the Apache Software Foundation website">
                    <img src="/etc/clientlibs/launchpad/dist/img/asf-logo.svg" alt="Apache Software Foundation Logo"/>
                </a>
            </header>
            <div class="Cell Align-Center Main-Content">
                <div class="Grid">
                    <section class="Cell Large-100">
                    	<h3>Login:</h3>
						<form id="loginform" method="POST" action="${requestContextPath}/j_security_check" enctype="multipart/form-data" accept-charset="UTF-8">
							<input type="hidden" name="_charset_" value="UTF-8" />
							<input type="hidden" name="resource" value="${resource}" />
							<div id="error">
								<p>${j_reason}</p>
							</div>
							<div>
								<label for="j_username" >Username:</label>
							</div>
							<div>
								<input id="j_username" name="j_username" type="text" />
							</div>
							<div>
								<label for="j_password" accesskey="p">Password:</label>
							</div>
							<div>
								<input id="j_password" name="j_password" type="password" />
							</div>
							<div class="buttongroup">
								<button id="login" class="form-button" type="submit">Login</button>
							</div>
						</form>
                    </section>
                </div>
            </div>
        </div>
    </body>
</html>
