Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open invitation setting #67

Merged
merged 3 commits into from
Feb 16, 2014
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Open invitation setting
Closes #64
  • Loading branch information
floatdrop committed Feb 14, 2014
commit 6937b7b21e91b092ace26aeba8c17ca720f83160
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
26 changes: 25 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.SettingsMust()

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

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

// Terminate the User session.
Expand All @@ -70,6 +76,15 @@ 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 {
if !database.SettingsMust().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 +159,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
2 changes: 2 additions & 0 deletions pkg/template/pages/admin_settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ <h1>Sysadmin</h1>
{{ end }}
</select>
<input class="form-control form-control-xlarge" type="text" name="Domain" value="{{.Settings.Domain}}" />
<label>Open invitations:</label>
<input class="form-control form-control-xlarge" type="checkbox" name="OpenInvitations" {{ if .Settings.OpenInvitations }} checked {{ end }} /> enable open invintation requests from users
</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.OpenInvitations }}
<a href="/signup">request invitation</a>&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" />
</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 enabled. In order to invite the user, you'll need to provide them the following link:<br><span class='url'>" + this.responseText + "</span>";
}
$("#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