176 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"html/template"
 | 
						|
	"log"
 | 
						|
	"path"
 | 
						|
)
 | 
						|
 | 
						|
func loadTemplates(dir string) *template.Template {
 | 
						|
	if dir == "" {
 | 
						|
		return getTemplates()
 | 
						|
	}
 | 
						|
	log.Printf("using custom template directory %q", dir)
 | 
						|
	t, err := template.New("").ParseFiles(path.Join(dir, "sign_in.html"), path.Join(dir, "error.html"))
 | 
						|
	if err != nil {
 | 
						|
		log.Fatalf("failed parsing template %s", err)
 | 
						|
	}
 | 
						|
	return t
 | 
						|
}
 | 
						|
 | 
						|
func getTemplates() *template.Template {
 | 
						|
	t, err := template.New("foo").Parse(`{{define "sign_in.html"}}
 | 
						|
<!DOCTYPE html>
 | 
						|
<html lang="en" charset="utf-8">
 | 
						|
<head>
 | 
						|
	<title>Sign In</title>
 | 
						|
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
 | 
						|
	<style>
 | 
						|
	body {
 | 
						|
		font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
 | 
						|
		font-size: 14px;
 | 
						|
		line-height: 1.42857143;
 | 
						|
		color: #333;
 | 
						|
		background: #f0f0f0;
 | 
						|
	}
 | 
						|
	.signin {
 | 
						|
		display:block;
 | 
						|
		margin:20px auto;
 | 
						|
		max-width:400px;
 | 
						|
		background: #fff;
 | 
						|
		border:1px solid #ccc;
 | 
						|
		border-radius: 10px;
 | 
						|
		padding: 20px;
 | 
						|
	}
 | 
						|
	.center {
 | 
						|
		text-align:center;
 | 
						|
	}
 | 
						|
	.btn {
 | 
						|
		color: #fff;
 | 
						|
		background-color: #428bca;
 | 
						|
		border: 1px solid #357ebd;
 | 
						|
		-webkit-border-radius: 4;
 | 
						|
		-moz-border-radius: 4;
 | 
						|
		border-radius: 4px;
 | 
						|
		font-size: 14px;
 | 
						|
		padding: 6px 12px;
 | 
						|
	  	text-decoration: none;
 | 
						|
		cursor: pointer;
 | 
						|
	}
 | 
						|
 | 
						|
	.btn:hover {
 | 
						|
		background-color: #3071a9;
 | 
						|
		border-color: #285e8e;
 | 
						|
		ext-decoration: none;
 | 
						|
	}
 | 
						|
	label {
 | 
						|
		display: inline-block;
 | 
						|
		max-width: 100%;
 | 
						|
		margin-bottom: 5px;
 | 
						|
		font-weight: 700;
 | 
						|
	}
 | 
						|
	input {
 | 
						|
		display: block;
 | 
						|
		width: 100%;
 | 
						|
		height: 34px;
 | 
						|
		padding: 6px 12px;
 | 
						|
		font-size: 14px;
 | 
						|
		line-height: 1.42857143;
 | 
						|
		color: #555;
 | 
						|
		background-color: #fff;
 | 
						|
		background-image: none;
 | 
						|
		border: 1px solid #ccc;
 | 
						|
		border-radius: 4px;
 | 
						|
		-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
 | 
						|
		box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
 | 
						|
		-webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
 | 
						|
		-o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
 | 
						|
		transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
 | 
						|
		margin:0;
 | 
						|
		box-sizing: border-box;
 | 
						|
	}
 | 
						|
	footer {
 | 
						|
		display:block;
 | 
						|
		font-size:10px;
 | 
						|
		color:#aaa;
 | 
						|
		text-align:center;
 | 
						|
		margin-bottom:10px;
 | 
						|
	}
 | 
						|
	footer a {
 | 
						|
		display:inline-block;
 | 
						|
		height:25px;
 | 
						|
		line-height:25px;
 | 
						|
		color:#aaa;
 | 
						|
		text-decoration:underline;
 | 
						|
	}
 | 
						|
	footer a:hover {
 | 
						|
		color:#aaa;
 | 
						|
	}
 | 
						|
	</style>
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
	<div class="signin center">
 | 
						|
	<form method="GET" action="{{.ProxyPrefix}}/start">
 | 
						|
	<input type="hidden" name="rd" value="{{.Redirect}}">
 | 
						|
	{{ if .SignInMessage }}
 | 
						|
	<p>{{.SignInMessage}}</p>
 | 
						|
	{{ end}}
 | 
						|
	<button type="submit" class="btn">Sign in with a {{.ProviderName}} Account</button><br/>
 | 
						|
	</form>
 | 
						|
	</div>
 | 
						|
 | 
						|
	{{ if .CustomLogin }}
 | 
						|
	<div class="signin">
 | 
						|
	<form method="POST" action="{{.ProxyPrefix}}/sign_in">
 | 
						|
		<input type="hidden" name="rd" value="{{.Redirect}}">
 | 
						|
		<label for="username">Username:</label><input type="text" name="username" id="username" size="10"><br/>
 | 
						|
		<label for="password">Password:</label><input type="password" name="password" id="password" size="10"><br/>
 | 
						|
		<button type="submit" class="btn">Sign In</button>
 | 
						|
	</form>
 | 
						|
	</div>
 | 
						|
	{{ end }}
 | 
						|
	<script>
 | 
						|
		if (window.location.hash) {
 | 
						|
			(function() {
 | 
						|
				var inputs = document.getElementsByName('rd');
 | 
						|
				for (var i = 0; i < inputs.length; i++) {
 | 
						|
					inputs[i].value += window.location.hash;
 | 
						|
				}
 | 
						|
			})();
 | 
						|
		}
 | 
						|
	</script>
 | 
						|
	<footer>
 | 
						|
	{{ if eq .Footer "-" }}
 | 
						|
	{{ else if eq .Footer ""}}
 | 
						|
	Secured with <a href="https://github.com/bitly/oauth2_proxy#oauth2_proxy">OAuth2 Proxy</a> version {{.Version}}
 | 
						|
	{{ else }}
 | 
						|
	{{.Footer}}
 | 
						|
	{{ end }}
 | 
						|
	</footer>
 | 
						|
</body>
 | 
						|
</html>
 | 
						|
{{end}}`)
 | 
						|
	if err != nil {
 | 
						|
		log.Fatalf("failed parsing template %s", err)
 | 
						|
	}
 | 
						|
 | 
						|
	t, err = t.Parse(`{{define "error.html"}}
 | 
						|
<!DOCTYPE html>
 | 
						|
<html lang="en" charset="utf-8">
 | 
						|
<head>
 | 
						|
	<title>{{.Title}}</title>
 | 
						|
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
	<h2>{{.Title}}</h2>
 | 
						|
	<p>{{.Message}}</p>
 | 
						|
	<hr>
 | 
						|
	<p><a href="{{.ProxyPrefix}}/sign_in">Sign In</a></p>
 | 
						|
</body>
 | 
						|
</html>{{end}}`)
 | 
						|
	if err != nil {
 | 
						|
		log.Fatalf("failed parsing template %s", err)
 | 
						|
	}
 | 
						|
	return t
 | 
						|
}
 |