Skip to content

Commit

Permalink
Merge pull request #67 from floatdrop/open-invitations
Browse files Browse the repository at this point in the history
Open invitation setting
  • Loading branch information
bradrydzewski committed Feb 16, 2014
2 parents 9eab0c9 + 460ec90 commit 828cb84
Show file tree
Hide file tree
Showing 11 changed files with 101 additions and 4 deletions.
2 changes: 2 additions & 0 deletions cmd/droned/drone.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ func setupHandlers() {
m.Post("/forgot", handler.ErrorHandler(handler.ForgotPost))
m.Get("/reset", handler.ErrorHandler(handler.Reset))
m.Post("/reset", handler.ErrorHandler(handler.ResetPost))
m.Get("/signup", handler.ErrorHandler(handler.SignUp))
m.Post("/signup", handler.ErrorHandler(handler.SignUpPost))
m.Get("/register", handler.ErrorHandler(handler.Register))
m.Post("/register", handler.ErrorHandler(handler.RegisterPost))
m.Get("/accept", handler.UserHandler(handler.TeamMemberAccept))
Expand Down
1 change: 1 addition & 0 deletions pkg/database/schema/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ CREATE TABLE settings (
,smtp_password VARCHAR(1024)
,hostname VARCHAR(1024)
,scheme VARCHAR(5)
,open_invitations INTEGER
);
`

Expand Down
1 change: 1 addition & 0 deletions pkg/database/schema/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ CREATE TABLE settings (
,smtp_password VARCHAR(1024)
,hostname VARCHAR(1024)
,scheme VARCHAR(5)
,open_invitations INTEGER
);

CREATE UNIQUE INDEX member_uix ON members (team_id, user_id);
Expand Down
2 changes: 1 addition & 1 deletion pkg/database/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const settingsTable = "settings"
// SQL Queries to retrieve the system settings
const settingsStmt = `
SELECT id, github_key, github_secret, bitbucket_key, bitbucket_secret,
smtp_server, smtp_port, smtp_address, smtp_username, smtp_password, hostname, scheme
smtp_server, smtp_port, smtp_address, smtp_username, smtp_password, hostname, scheme, open_invitations
FROM settings WHERE id = 1
`

Expand Down
10 changes: 8 additions & 2 deletions pkg/handler/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ func AdminUserAdd(w http.ResponseWriter, r *http.Request, u *User) error {
return RenderTemplate(w, "admin_users_add.html", &struct{ User *User }{u})
}

// Invite a user to join the system
func AdminUserInvite(w http.ResponseWriter, r *http.Request, u *User) error {
func UserInvite(w http.ResponseWriter, r *http.Request) error {
// generate the password reset token
email := r.FormValue("email")
token := authcookie.New(email, time.Now().Add(12*time.Hour), secret)
Expand Down Expand Up @@ -66,6 +65,11 @@ func AdminUserInvite(w http.ResponseWriter, r *http.Request, u *User) error {
return RenderText(w, http.StatusText(http.StatusOK), http.StatusOK)
}

// Invite a user to join the system
func AdminUserInvite(w http.ResponseWriter, r *http.Request, u *User) error {
return UserInvite(w, r)
}

// Form to edit a user
func AdminUserEdit(w http.ResponseWriter, r *http.Request, u *User) error {
idstr := r.FormValue("id")
Expand Down Expand Up @@ -176,6 +180,8 @@ func AdminSettingsUpdate(w http.ResponseWriter, r *http.Request, u *User) error
settings.SmtpUsername = r.FormValue("SmtpUsername")
settings.SmtpPassword = r.FormValue("SmtpPassword")

settings.OpenInvitations = (r.FormValue("OpenInvitations") == "on")

// persist changes
if err := database.SaveSettings(settings); err != nil {
return RenderError(w, err, http.StatusBadRequest)
Expand Down
29 changes: 28 additions & 1 deletion pkg/handler/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,13 @@ func Index(w http.ResponseWriter, r *http.Request) error {

// Return an HTML form for the User to login.
func Login(w http.ResponseWriter, r *http.Request) error {
return RenderTemplate(w, "login.html", nil)
var settings, _ = database.GetSettings()

data := struct {
Settings *Settings
}{settings}

return RenderTemplate(w, "login.html", &data)
}

// Terminate the User session.
Expand All @@ -70,6 +76,18 @@ func Reset(w http.ResponseWriter, r *http.Request) error {
return RenderTemplate(w, "reset.html", &struct{ Error string }{""})
}

// Return an HTML form for the User to signup.
func SignUp(w http.ResponseWriter, r *http.Request) error {
var settings, _ = database.GetSettings()

if settings == nil || !settings.OpenInvitations {
http.Redirect(w, r, "/login", http.StatusSeeOther)
return nil
}

return RenderTemplate(w, "signup.html", nil)
}

// Return an HTML form to register for a new account. This
// page must be visited from a Signup email that contains
// a hash to verify the Email address is correct.
Expand Down Expand Up @@ -144,6 +162,15 @@ func ResetPost(w http.ResponseWriter, r *http.Request) error {
return nil
}

func SignUpPost(w http.ResponseWriter, r *http.Request) error {
if !database.SettingsMust().OpenInvitations {
http.Redirect(w, r, "/login", http.StatusSeeOther)
return nil
}

return UserInvite(w, r)
}

func RegisterPost(w http.ResponseWriter, r *http.Request) error {
// verify the token and extract the username
token := r.FormValue("token")
Expand Down
2 changes: 2 additions & 0 deletions pkg/model/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ type Settings struct {

// Scheme of the server, eg https
Scheme string `meddler:"scheme"`

OpenInvitations bool `meddler:"open_invitations"`
}

func (s *Settings) URL() *url.URL {
Expand Down
3 changes: 3 additions & 0 deletions pkg/template/pages/admin_settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ <h1>Sysadmin</h1>
{{ end }}
</select>
<input class="form-control form-control-xlarge" type="text" name="Domain" value="{{.Settings.Domain}}" />
<label class="checkbox">
Open invitations <input type="checkbox" name="OpenInvitations" {{ if .Settings.OpenInvitations }} checked {{ end }} />
</label>
</div>
<div class="form-group">
<div class="alert">GitHub OAuth Consumer Key and Secret</div>
Expand Down
3 changes: 3 additions & 0 deletions pkg/template/pages/login.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ <h1>Login</h1>
<input type="submit" value="Sign in" />
</div>
<div>
{{ if .Settings ne nil and .Settings.OpenInvitations }}
<a href="/signup">request invitation</a>&nbsp;·&nbsp;
{{ end }}
<a href="/forgot">forgot password</a>
</div>
{{ end }}
Expand Down
51 changes: 51 additions & 0 deletions pkg/template/pages/signup.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{{ define "title" }}Sign up · drone.io{{ end }}

{{ define "content" }}
<h1>Sign up</h1>
<form action="/signup" method="POST" role="form">
<div>
<input type="text" name="email" placeholder="Email address" autocomplete="off" spellcheck="false" class="form-control only-child" />
</div>
<div>
<div class="alert alert-success hide" id="successAlert"></div>
<div class="alert alert-error hide" id="failureAlert"></div>
</div>
<div>
<input type="submit" id="submitButton" value="Request invite" />
</div>
</form>
{{ end }}

{{ define "script" }}
<script>
document.forms[0].onsubmit = function(event) {

$("#successAlert").hide();
$("#failureAlert").hide();
$('#submitButton').button('loading');

var form = event.target
var formData = new FormData(form);
xhr = new XMLHttpRequest();
xhr.open('POST', form.action);
xhr.onload = function() {
if (this.status == 200) {
var msg = "User Invitation was sent successfully";
if (this.responseText != "OK") {
msg = "Email is not currently enables. Follow the link:<br><a href='" + this.responseText + "'>" + this.responseText + "</a>";
}
$("#successAlert").html(msg);
$("#successAlert").show().removeClass("hide");
$('#submitButton').button('reset')

} else {
$("#failureAlert").text("Failed to send Invitation Email. " + this.response);
$("#failureAlert").show().removeClass("hide");
$('#submitButton').button('reset')
};
};
xhr.send(formData);
return false;
}
</script>
{{ end }}
1 change: 1 addition & 0 deletions pkg/template/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ func init() {
"forgot.html",
"forgot_sent.html",
"reset.html",
"signup.html",
"register.html",
"install.html",

Expand Down

0 comments on commit 828cb84

Please sign in to comment.