本文整理汇总了Golang中github.com/hfurubotten/autograder/entities.NewOrganization函数的典型用法代码示例。如果您正苦于以下问题:Golang NewOrganization函数的具体用法?Golang NewOrganization怎么用?Golang NewOrganization使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewOrganization函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: HomeHandler
// HomeHandler is a http handler for the home page for logged in users.
func HomeHandler(w http.ResponseWriter, r *http.Request) {
member, err := checkMemberApproval(w, r, true)
if err != nil {
return
}
view := HomeView{
StdTemplate: StdTemplate{
Member: member,
},
Teaching: make(map[string]*git.Organization),
Assisting: make(map[string]*git.Organization),
Courses: make(map[string]*git.Organization),
}
for key := range member.Teaching {
view.Teaching[key], _ = git.NewOrganization(key, true)
}
for key := range member.AssistantCourses {
view.Assisting[key], _ = git.NewOrganization(key, true)
}
for key := range member.Courses {
view.Courses[key], _ = git.NewOrganization(key, true)
}
if !member.IsComplete() {
http.Redirect(w, r, pages.REGISTER_REDIRECT, 307)
return
}
execTemplate("home.html", w, view)
}
开发者ID:tokams,项目名称:autograder,代码行数:33,代码来源:webserver.go
示例2: RequestRandomGroupHandler
// RequestRandomGroupHandler is a http handler used by a student to request a random group assignment.
func RequestRandomGroupHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkMemberApproval(w, r, false)
if err != nil {
http.Error(w, err.Error(), 404)
log.Println(err)
return
}
orgname := r.FormValue("course")
if !git.HasOrganization(orgname) {
http.Error(w, "Does not have organization.", 404)
}
org, err := git.NewOrganization(orgname, false)
if err != nil {
http.Error(w, "Does not have organization.", 404)
}
defer func() {
err := org.Save()
if err != nil {
org.Unlock()
log.Println(err)
}
}()
org.PendingRandomGroup[member.Username] = nil
}
开发者ID:tokams,项目名称:autograder,代码行数:29,代码来源:group.go
示例3: SlipdaysHandler
// SlipdaysHandler is used to get used slipdays for a user in a course.
func SlipdaysHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkMemberApproval(w, r, false)
if err != nil {
http.Error(w, err.Error(), 404)
log.Println(err)
return
}
orgname := r.FormValue("Course")
org, err := git.NewOrganization(orgname, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 500)
return
}
view := SlipdaysView{
Course: orgname,
MaxSlipdays: org.SlipdaysMax,
}
if org.IsTeacher(member) {
username := r.FormValue("Username")
user, err := git.NewMemberFromUsername(username, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
}
if !org.IsMember(member) {
http.Error(w, "Unknown member of course.", 404)
return
}
courseopt := user.Courses[org.Name]
view.UsedSlipdays = courseopt.UsedSlipDays
view.Username = user.Username
} else if org.IsMember(member) {
courseopt := member.Courses[org.Name]
view.UsedSlipdays = courseopt.UsedSlipDays
view.Username = member.Username
} else {
http.Error(w, "Unknown member of course.", 404)
return
}
enc := json.NewEncoder(w)
err = enc.Encode(view)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
}
}
开发者ID:tokams,项目名称:autograder,代码行数:61,代码来源:lab.go
示例4: RemoveUserHandler
// RemoveUserHandler is http handler used to remove users from the list of students on a course.
func RemoveUserHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkTeacherApproval(w, r, true)
if err != nil {
http.Redirect(w, r, "/", 307)
log.Println(err)
return
}
username := r.FormValue("user")
course := r.FormValue("course")
if !git.HasOrganization(course) {
http.Error(w, "Unknown course.", 404)
return
}
org, err := git.NewOrganization(course, false)
if err != nil {
http.Error(w, "Not valid organization.", 404)
return
}
defer func() {
err := org.Save()
if err != nil {
org.Unlock()
log.Println(err)
}
}()
if !org.IsTeacher(member) {
http.Error(w, "Is not a teacher or assistant for this course.", 404)
return
}
user, err := git.NewMemberFromUsername(username, false)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
defer func() {
err := user.Save()
if err != nil {
user.Unlock()
log.Println(err)
}
}()
if org.IsMember(user) {
org.RemoveMembership(user)
user.RemoveOrganization(org)
} else {
http.Error(w, "Couldn't find this user in this course. ", 404)
return
}
}
开发者ID:NoriVicJr,项目名称:autograder,代码行数:59,代码来源:course.go
示例5: AddAssistantHandler
// AddAssistantHandler is a http handler used to add users as assistants on a course.
func AddAssistantHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkTeacherApproval(w, r, false)
if err != nil {
log.Println(err)
return
}
username := r.FormValue("assistant")
course := r.FormValue("course")
if !git.HasOrganization(course) {
http.Error(w, "Unknown course.", 404)
return
}
if username == member.Username {
return
}
assistant, err := git.NewMemberFromUsername(username, false)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
defer func() {
if err := assistant.Save(); err != nil {
assistant.Unlock()
log.Println(err)
}
}()
org, err := git.NewOrganization(course, false)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
defer func() {
if err := org.Save(); err != nil {
org.Unlock()
log.Println(err)
}
}()
if !org.IsTeacher(member) {
http.Error(w, "User is not the teacher for this course.", 404)
return
}
assistant.AddAssistingOrganization(org)
org.AddTeacher(assistant)
if _, ok := org.PendingUser[username]; ok {
delete(org.PendingUser, username)
}
}
开发者ID:tokams,项目名称:autograder,代码行数:59,代码来源:teacher.go
示例6: RegisterCourseMemberHandler
// RegisterCourseMemberHandler is a http handler which register new students
// signing up for a course. After registering the student, this handler
// gives back a informal page about how to accept the invitation to the
// organization on github.
func RegisterCourseMemberHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkMemberApproval(w, r, true)
if err != nil {
log.Println(err)
return
}
// Gets the org and check if valid
orgname := ""
if path := strings.Split(r.URL.Path, "/"); len(path) == 4 {
if !git.HasOrganization(path[3]) {
http.Redirect(w, r, "/course/register", 307)
return
}
orgname = path[3]
} else {
http.Redirect(w, r, "/course/register", 307)
return
}
org, err := git.NewOrganization(orgname, false)
if err != nil {
http.Redirect(w, r, "/course/register", 307)
return
}
defer func() {
err = org.Save()
if err != nil {
org.Unlock()
log.Println(err)
}
}()
if _, ok := org.Members[member.Username]; ok {
http.Redirect(w, r, "/course/"+orgname, 307)
return
}
err = org.AddMembership(member)
if err != nil {
log.Println("Error adding the student to course. Error msg:", err)
}
view := NewMemberView{
StdTemplate: StdTemplate{
Member: member,
},
Org: orgname,
}
execTemplate("course-registeredmemberinfo.html", w, view)
}
开发者ID:NoriVicJr,项目名称:autograder,代码行数:58,代码来源:course.go
示例7: ListReviewsHandler
// ListReviewsHandler will write back a list of all the code reviews
// in a course, as json data.
//
// Expected input keys: course
func ListReviewsHandler(w http.ResponseWriter, r *http.Request) {
view := ListReviewsView{
Error: true,
}
enc := json.NewEncoder(w)
// Checks if the user is signed in.
member, err := checkMemberApproval(w, r, true)
if err != nil {
log.Println(err)
return
}
if r.FormValue("course") == "" {
view.Errormsg = "Missing required course field."
enc.Encode(view)
return
}
if !git.HasOrganization(r.FormValue("course")) {
view.Errormsg = "Unknown course."
enc.Encode(view)
return
}
org, err := git.NewOrganization(r.FormValue("course"), true)
if err != nil {
view.Errormsg = "Unknown course."
enc.Encode(view)
return
}
if !org.IsMember(member) {
view.Errormsg = "Not a member of this course."
enc.Encode(view)
return
}
crlist := []*git.CodeReview{}
for _, crid := range org.CodeReviewlist {
if cr, err := git.GetCodeReview(crid); err == nil {
crlist = append(crlist, cr)
}
}
view.Error = false
view.Reviews = crlist
enc.Encode(view)
}
开发者ID:tokams,项目名称:autograder,代码行数:54,代码来源:review.go
示例8: RemovePendingUserHandler
// RemovePendingUserHandler is http handler used to remove users from the list of pending students on a course.
func RemovePendingUserHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkTeacherApproval(w, r, true)
if err != nil {
http.Redirect(w, r, "/", 307)
log.Println(err)
return
}
username := r.FormValue("user")
course := r.FormValue("course")
if !git.HasOrganization(course) {
http.Error(w, "Unknown course.", 404)
return
}
org, err := git.NewOrganization(course, false)
if err != nil {
http.Error(w, "Not valid organization.", 404)
return
}
defer func() {
err := org.Save()
if err != nil {
org.Unlock()
log.Println(err)
}
}()
org.Lock()
defer org.Unlock()
if !org.IsTeacher(member) {
http.Error(w, "Is not a teacher or assistant for this course.", 404)
return
}
if _, ok := org.PendingUser[username]; ok {
delete(org.PendingUser, username)
}
}
开发者ID:NoriVicJr,项目名称:autograder,代码行数:43,代码来源:course.go
示例9: ScoreboardHandler
// ScoreboardHandler is a http handler to give the user a page
// showing the scoreboard for a course
func ScoreboardHandler(w http.ResponseWriter, r *http.Request) {
member, err := checkMemberApproval(w, r, true)
if err != nil {
return
}
// Gets the org and check if valid
orgname := ""
if path := strings.Split(r.URL.Path, "/"); len(path) == 3 {
if !git.HasOrganization(path[2]) {
http.Redirect(w, r, HomeURL, 307)
return
}
orgname = path[2]
} else {
http.Redirect(w, r, HomeURL, 307)
return
}
org, err := git.NewOrganization(orgname, true)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
if !org.IsMember(member) {
http.Redirect(w, r, HomeURL, 307)
return
}
view := ScoreboardView{
StdTemplate: StdTemplate{
Member: member,
},
Org: org,
}
execTemplate("scoreboard.html", w, view)
}
开发者ID:tokams,项目名称:autograder,代码行数:42,代码来源:score.go
示例10: CIResultSummaryHandler
// CIResultSummaryHandler is a http handler used to get a build summary
// of the build for a user or group. This handler writes back the summary
// as JSON data.
func CIResultSummaryHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
teacher, err := checkTeacherApproval(w, r, false)
if err != nil {
http.Error(w, err.Error(), 404)
log.Println(err)
return
}
orgname := r.FormValue("Course")
username := r.FormValue("Username")
if orgname == "" || username == "" {
http.Error(w, "Empty request.", 404)
return
}
org, err := git.NewOrganization(orgname, true)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
if !org.IsTeacher(teacher) {
http.Error(w, "Not a teacher for this course.", 404)
return
}
res := make(map[string]*ci.BuildResult)
notes := make(map[string]string)
//credit := make(map[string]score.Score)
//if group ...
if strings.HasPrefix(username, git.GroupRepoPrefix) {
groupid, err := strconv.Atoi(username[len(git.GroupRepoPrefix):])
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 500)
return
}
group, err := git.NewGroup(orgname, groupid, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 500)
return
}
for labnum, lab := range group.Assignments {
labname := org.GroupLabFolders[labnum]
buildid := group.GetLastBuildID(labnum)
if buildid < 0 {
continue
}
build, err := ci.GetBuildResult(buildid)
if err != nil {
log.Println(err)
continue
}
res[labname] = build
notes[labname] = lab.Notes
//credit[labname] = lab.ExtraCredit
}
} else {
user, err := git.NewMemberFromUsername(username, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 500)
return
}
courseopt, ok := user.Courses[orgname]
if ok {
for labnum, lab := range courseopt.Assignments {
labname := org.IndividualLabFolders[labnum]
buildid := user.GetLastBuildID(orgname, labnum)
if buildid < 0 {
continue
}
build, err := ci.GetBuildResult(buildid)
if err != nil {
log.Println(err)
continue
}
res[labname] = build
notes[labname] = lab.Notes
//credit[labname] = lab.ExtraCredit
}
}
}
view := SummaryView{
Course: orgname,
User: username,
Summary: res,
Notes: notes,
//.........这里部分代码省略.........
开发者ID:tokams,项目名称:autograder,代码行数:101,代码来源:ci.go
示例11: ManualCITriggerHandler
// ManualCITriggerHandler is a http handler for manually triggering test builds.
func ManualCITriggerHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkMemberApproval(w, r, false)
if err != nil {
http.Error(w, err.Error(), 404)
log.Println(err)
return
}
course := r.FormValue("course")
user := r.FormValue("user")
lab := r.FormValue("lab")
if !git.HasOrganization(course) {
http.Error(w, "Unknown organization", 404)
return
}
org, err := git.NewOrganization(course, true)
if err != nil {
http.Error(w, "Organization Error", 404)
return
}
// Defaults back to username or group name for the user if not a teacher.
if !org.IsTeacher(member) {
if org.IsMember(member) {
if strings.Contains(user, "group") {
if member.Courses[org.Name].IsGroupMember {
user = "group" + strconv.Itoa(member.Courses[org.Name].GroupNum)
} else {
http.Error(w, "Not a group member", 404)
return
}
} else {
user = member.Username
}
} else {
http.Error(w, "Not a member of the course", 404)
return
}
}
groupid := -1
labnum := -1
if strings.Contains(user, "group") {
groupid, err = strconv.Atoi(user[len("group"):])
if err != nil {
http.Error(w, err.Error(), 500)
return
}
for i, name := range org.GroupLabFolders {
if name == lab {
labnum = i
break
}
}
} else {
for i, name := range org.IndividualLabFolders {
if name == lab {
labnum = i
break
}
}
}
var repo string
var destfolder string
if _, ok := org.Members[user]; ok {
repo = user + "-" + git.StandardRepoName
destfolder = git.StandardRepoName
} else if _, ok := org.Groups[user]; ok {
repo = user
destfolder = git.GroupsRepoName
} else {
http.Error(w, "Unknown user", 404)
return
}
opt := ci.DaemonOptions{
Org: org.Name,
User: user,
Group: groupid,
Repo: repo,
BaseFolder: org.CI.Basepath,
LabFolder: lab,
LabNumber: labnum,
AdminToken: org.AdminToken,
DestFolder: destfolder,
Secret: org.CI.Secret,
IsPush: false,
}
log.Println(opt)
ci.StartTesterDaemon(opt)
}
开发者ID:tokams,项目名称:autograder,代码行数:100,代码来源:ci.go
示例12: CIResultHandler
// CIResultHandler is a http handeler for getting results from
// a build. This handler writes back the results as JSON data.
func CIResultHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkMemberApproval(w, r, false)
if err != nil {
http.Error(w, err.Error(), 404)
log.Println(err)
return
}
// TODO: add more security
orgname := r.FormValue("Course")
username := r.FormValue("Username")
labname := r.FormValue("Labname")
org, err := git.NewOrganization(orgname, true)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
if !org.IsMember(member) {
http.Error(w, "Not a member for this course.", 404)
return
}
var res *ci.BuildResult
if strings.HasPrefix(username, git.GroupRepoPrefix) {
labnum := -1
for i, name := range org.GroupLabFolders {
if name == labname {
labnum = i
break
}
}
if labnum < 0 {
http.Error(w, "No lab with that name found.", 404)
return
}
groupid, err := strconv.Atoi(username[len(git.GroupRepoPrefix):])
if err != nil {
http.Error(w, "Could not convert the group ID.", 404)
return
}
group, err := git.NewGroup(orgname, groupid, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
}
buildid := group.GetLastBuildID(labnum)
if buildid < 0 {
http.Error(w, "Could not find the build.", 404)
return
}
res, err = ci.GetBuildResult(buildid)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
}
} else {
labnum := -1
for i, name := range org.IndividualLabFolders {
if name == labname {
labnum = i
break
}
}
if labnum < 0 {
http.Error(w, "No lab with that name found.", 404)
return
}
user, err := git.NewMemberFromUsername(username, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
}
buildid := user.GetLastBuildID(orgname, labnum)
if buildid < 0 {
http.Error(w, "Could not find the build.", 404)
return
}
res, err = ci.GetBuildResult(buildid)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
//.........这里部分代码省略.........
开发者ID:tokams,项目名称:autograder,代码行数:101,代码来源:ci.go
示例13: AddGroupMemberHandler
// AddGroupMemberHandler is a http handler adding an additional member to a active group.
func AddGroupMemberHandler(w http.ResponseWriter, r *http.Request) {
view := AddGroupMemberView{}
view.Error = true
enc := json.NewEncoder(w)
// Checks if the user is signed in and a teacher.
member, err := checkTeacherApproval(w, r, true)
if err != nil {
err = enc.Encode(ErrSignIn)
return
}
orgname := r.FormValue("course")
if orgname == "" || !git.HasOrganization(orgname) {
err = enc.Encode(ErrUnknownCourse)
return
}
groupid, err := strconv.Atoi(r.FormValue("groupid"))
if err != nil {
view.ErrorMsg = err.Error()
err = enc.Encode(view)
return
}
if !git.HasGroup(groupid) {
err = enc.Encode(ErrUnknownGroup)
return
}
org, err := git.NewOrganization(orgname, false)
if err != nil {
view.ErrorMsg = err.Error()
err = enc.Encode(view)
return
}
defer func() {
err := org.Save()
if err != nil {
org.Unlock()
log.Println(err)
}
}()
if !org.IsTeacher(member) {
err = enc.Encode(ErrNotTeacher)
return
}
group, err := git.NewGroup(orgname, groupid, false)
if err != nil {
view.ErrorMsg = err.Error()
err = enc.Encode(view)
return
}
defer func() {
err := group.Save()
if err != nil {
group.Unlock()
log.Println(err)
}
}()
if group.TeamID == 0 {
teams, err := org.ListTeams()
if err != nil {
view.ErrorMsg = err.Error()
err = enc.Encode(view)
return
}
if team, ok := teams[git.GroupRepoPrefix+strconv.Itoa(groupid)]; ok {
group.TeamID = team.ID
} else {
view.ErrorMsg = "Error finding team on GitHub."
err = enc.Encode(view)
return
}
}
r.ParseForm()
members := r.PostForm["member"]
for _, username := range members {
if username == "" || !git.HasMember(username) {
continue
}
group.AddMember(username)
org.AddMemberToTeam(group.TeamID, username)
delete(org.PendingRandomGroup, username)
}
group.Activate()
view.Added = true
//.........这里部分代码省略.........
开发者ID:tokams,项目名称:autograder,代码行数:101,代码来源:group.go
示例14: TeachersPanelHandler
// TeachersPanelHandler is a http handler serving the Teacher panel.
// This page shows a summary of all the students and groups.
func TeachersPanelHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkTeacherApproval(w, r, true)
if err != nil {
log.Println(err)
http.Redirect(w, r, pages.HOMEPAGE, 307)
return
}
// Gets the org and check if valid
orgname := ""
if path := strings.Split(r.URL.Path, "/"); len(path) == 4 {
if !git.HasOrganization(path[3]) {
http.Redirect(w, r, pages.HOMEPAGE, 307)
return
}
orgname = path[3]
} else {
http.Redirect(w, r, pages.HOMEPAGE, 307)
return
}
org, err := git.NewOrganization(orgname, true)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
if !org.IsTeacher(member) {
log.Println("User is not a teacher for this course.")
http.Redirect(w, r, pages.HOMEPAGE, 307)
return
}
// gets pending users
users := org.PendingUser
var status string
for username := range users {
// check status up against Github
users[username], err = git.NewMemberFromUsername(username, true)
if err != nil {
continue
}
status, err = org.GetMembership(users[username].(*git.Member))
if err != nil {
log.Println(err)
continue
}
if status == "active" {
continue
// TODO: what about group assignments?
} else if status == "pending" {
delete(users, username)
} else {
delete(users, username)
log.Println("Got a unexpected status back from Github regarding Membership")
}
}
// gets teachers
for username := range org.Teachers {
org.Teachers[username], _ = git.NewMemberFromUsername(username, true)
}
// gets users
for username := range org.Members {
org.Members[username], _ = git.NewMemberFromUsername(username, true)
}
// get pending groups
pendinggroups := make(map[int]*git.Group)
for groupID := range org.PendingGroup {
group, err := git.NewGroup(org.Name, groupID, true)
if err != nil {
log.Println(err)
}
if group.Course != org.Name {
org.Lock()
delete(org.PendingGroup, groupID)
err := org.Save()
if err != nil {
log.Println(err)
org.Unlock()
}
continue
}
for key := range group.Members {
groupmember, _ := git.NewMemberFromUsername(key, true)
group.Members[key] = groupmember
}
pendinggroups[groupID] = group
}
//.........这里部分代码省略.........
开发者ID:tokams,项目名称:autograder,代码行数:101,代码来源:teacher.go
示例15: ApUserResultsHandler
// ApUserResultsHandler is a http handeler for getting all results for a user
// from the latest anti-plagiarism test. This handler writes back the results as JSON data.
func ApUserResultsHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkMemberApproval(w, r, false)
if err != nil {
http.Error(w, err.Error(), 404)
log.Println(err)
return
}
// TODO: add more security
orgname := r.FormValue("Course")
username := r.FormValue("Username")
org, err := git.NewOrganization(orgname, true)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
if !org.IsMember(member) {
http.Error(w, "Not a member for this course.", 404)
return
}
results := make(map[string]git.AntiPlagiarismResults)
if strings.HasPrefix(username, git.GroupRepoPrefix) {
// Get the group ID from the group name
groupid, err := strconv.Atoi(username[len(git.GroupRepoPrefix):])
if err != nil {
http.Error(w, "Could not convert the group ID.", 404)
return
}
// Get the group from the database
group, err := git.NewGroup(orgname, groupid, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
}
// For each lab
for i, name := range org.GroupLabFolders {
// Get the results for the lab
temp := group.GetAntiPlagiarismResults(org.Name, i)
if temp != nil {
results[name] = *temp
}
}
} else {
// Get user from the database
user, err := git.NewMemberFromUsername(username, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
}
// For each lab
for i, name := range org.IndividualLabFolders {
// Get the results for the lab
temp := user.GetAntiPlagiarismResults(org.Name, i)
if temp != nil {
results[name] = *temp
}
}
}
enc := json.NewEncoder(w)
// Encode the results in JSON
err = enc.Encode(results)
if err != nil {
http.Error(w, err.Error(), 404)
}
}
开发者ID:tokams,项目名称:autograder,代码行数:79,代码来源:apHandlers.go
示例16: NotesHandler
// NotesHandler will add a note to a lab for a given user.
// Page requested with method GET will return latest note and POST will store a
// new note to the user or group.
// required input:
// - Course
// - Username //or
// - Group
// - labnum
// - Notes
func NotesHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
teacher, err := checkTeacherApproval(w, r, false)
if err != nil {
http.Error(w, err.Error(), 404)
log.Println(err)
return
}
course := r.FormValue("Course")
username := r.FormValue("Username")
notes := r.FormValue("Notes")
groupid, _ := strconv.Atoi(r.FormValue("Group"))
labnum, err := strconv.Atoi(r.FormValue("Labnum"))
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
}
org, err := git.NewOrganization(course, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 500)
return
}
if !org.IsTeacher(teacher) {
log.Println(err)
http.Error(w, "Not a teacher of this course", 404)
return
}
if groupid > 0 {
group, err := git.NewGroup(org.Name, groupid, false)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 500)
return
}
if group.Course != org.Name {
log.Println(err)
http.Error(w, "Not a group in this course", 404)
return
}
if r.Method == "POST" {
group.AddNotes(labnum, notes)
} else {
view := &NotesView{
Course: course,
Group: groupid,
Labnum: labnum,
Notes: group.GetNotes(labnum),
}
enc := json.NewEncoder(w)
if err = enc.Encode(view); err != nil {
log.Println(err)
http.Error(w, err.Error(), 500)
return
}
}
if err = group.Save(); err != nil {
group.Unlock()
log.Println(err)
http.Error(w, err.Error(), 500)
return
}
} else {
user, err := git.NewMemberFromUsername(username, false)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 500)
return
}
if !org.IsMember(user) {
log.Println(err)
http.Error(w, "Not a member of this course", 404)
return
}
if r.Method == "POST" {
user.AddNotes(org.Name, labnum, notes)
} else {
view := &NotesView{
Course: course,
//.........这里部分代码省略.........
开发者ID:tokams,项目名称:autograder,代码行数:101,代码来源:lab.go
示例17: ApLabResultsHandler
// ApLabResultsHandler is a http handeler for getting results for one lab of a user
// from the latest anti-plagiarism test. This handler writes back the results as JSON data.
func ApLabResultsHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkMemberApproval(w, r, false)
if err != nil {
http.Error(w, err.Error(), 404)
log.Println(err)
return
}
// TODO: add more security
orgname := r.FormValue("Course")
username := r.FormValue("Username")
labname := r.FormValue("Labname")
org, err := git.NewOrganization(orgname, true)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
if !org.IsMember(member) {
http.Error(w, "Not a member for this course.", 404)
return
}
var results *git.AntiPlagiarismResults
if strings.HasPrefix(username, git.GroupRepoPrefix) {
labIndex := -1
// Find the correct lab index
for i, name := range org.GroupLabFolders {
if name == labname {
labIndex = i
break
}
}
if labIndex < 0 {
http.Error(w, "No lab with that name found.", 404)
return
}
// Get the group ID from the group name
groupid, err := strconv.Atoi(username[len(git.GroupRepoPrefix):])
if err != nil {
http.Error(w, "Could not convert the group ID.", 404)
return
}
// Get the group from the database
group, err := git.NewGroup(orgname, groupid, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
}
// Get the results for the lab
results = group.GetAntiPlagiarismResults(org.Name, labIndex)
} else {
labIndex := -1
// Find the correct lab index
for i, name := range org.IndividualLabFolders {
if name == labname {
labIndex = i
break
}
}
if labIndex < 0 {
http.Error(w, "No lab with that name found.", 404)
return
}
// Get the user from the database
user, err := git.NewMemberFromUsername(username, true)
if err != nil {
log.Println(err)
http.Error(w, err.Error(), 404)
return
}
// Get the results for the lab
results = user.GetAntiPlagiarismResults(org.Name, labIndex)
}
enc := json.NewEncoder(w)
err = enc.Encode(results)
if err != nil {
http.Error(w, err.Error(), 404)
}
}
开发者ID:tokams,项目名称:autograder,代码行数:95,代码来源:apHandlers.go
示例18: CreateOrgHandler
// CreateOrgHandler is a http handler which will link a new course
// to a github organization. This function will make a new course
// in autograder and then create all needed repositories on github.
//
// Expected input: org, desc, groups, indv
// Optional input: private, template
func CreateOrgHandler(w http.ResponseWriter, r *http.Request) {
// Checks if the user is signed in and a teacher.
member, err := checkTeacherApproval(w, r, true)
if err != nil {
log.Println(err)
return
}
member.Lock()
org, err := git.NewOrganization(r.FormValue("org"), false)
if err != nil {
log.Println(err)
return
}
defer func() {
// Saved the new organization info
err = org.Save()
if err != nil {
org.Unlock()
member.Unlock()
log.Println(err)
return
}
err = member.Save()
if err != nil {
member.Unlock()
log.Println(err)
return
}
}()
log.Println("Creating Course")
org.AdminToken = member.GetToken()
org.Private = r.FormValue("private") == "on"
org.ScreenName = org.Name
org.Description = r.FormValue("desc")
groups, err := strconv.Atoi(r.FormValue("groups"))
if err != nil {
log.Println("Cannot convert number of groups assignments from string to int: ", err)
groups = 0
}
org.GroupAssignments = groups
indv, err := strconv.Atoi(r.FormValue("indv"))
if err != nil {
log.Println("Cannot convert number of individual assignments from string to int: ", err)
http.Redirect(w, r, pages.HOMEPAGE, 307)
return
}
org.IndividualAssignments = indv
currepos, err := org.ListRepos()
if err != nil {
log.Println("Problem listing repos in the new course organization: ", err)
http.Redirect(w, r, pages.HOMEPAGE, 307)
return
}
templaterepos := make(map[string]git.Repo)
if r.FormValue("template") != "" {
templateorg, _ := git.NewOrganization(r.FormValue("template"), true)
templaterepos, err = templateorg.ListRepos()
if err != nil {
log.Println("Problem listing repos in the template organization: ", err)
http.Redirect(w, r, pages.HOMEPAGE, 307)
return
}
}
// creates the course info repo
if _, ok := currepos[git.CourseInfoName]; !ok {
if _, ok = templaterepos[git.CourseInfoName]; ok {
err = org.Fork(r.FormValue("template"), git.CourseInfoName)
if err != nil {
log.Println("Couldn't fork the course info repo: ", err)
http.Redirect(w, r, pages.HOMEPAGE, 307)
return
}
} else {
repo := git.RepositoryOptions{
Name: git.CourseInfoName,
Private: false,
AutoInit: true,
}
err = org.CreateRepo(repo)
if err != nil {
log.Println(err)
return
}
}
}
//.........这里部分代码省略.........
开发者ID:NoriVicJr,项目名称:autograder,代码行数:101,代码来源:course.go
示例19: LeaderboardDataHandler
// LeaderboardDataHandler is a http handler which return the leaderboard for a course in JSON format.
func LeaderboardDataHandler(w http.ResponseWriter, r *http.Request) {
view := LeaderboardDataView{}
view.Error = true
enc := json.NewEncoder(w)
member, err := checkMemberApproval(w, r, true)
if err != nil {
enc.Encode(ErrAccessToken)
return
}
orgname := r.FormValue("course")
period, err := strconv.Atoi(r.FormValue("period"))
if err != nil {
enc.Encode(ErrMissingField)
return
}
if !git.HasOrganization(orgname) {
enc.Encode(ErrUnknownCourse)
return
}
org, err := git.NewOrganization(orgname, true)
if err != nil {
view.ErrorMsg = err.Error()
enc.Encode(view)
return
}
if !org.IsMember(member) {
enc.Encode(ErrNotMember)
return
}
var t time.Time
if period == TotalScore {
view.Error = false
view.Leaderboard = org.GetTotalLeaderboard()
view.Scores = org.TotalScore
} else if period == MonthlyScore {
t, err = time.Parse("1", r.FormValue("month"))
if err != nil {
t = time.Now()
}
month := t.Month()
view.Error = false
view.Leaderboard = org.GetMonthlyLeaderboard(month)
view.Scores = org.MonthlyScore[month]
} else if period == WeeklyScore {
week, err := strconv.Atoi(r.FormValue("week"))
if err != nil {
_, week = time.Now().ISOWeek()
}
if week < 1 || week > 53 {
view.ErrorMsg = "Week need to be between 1 and 53."
enc.Encode(view)
return
}
view.Error = false
view.Leaderboard = org.GetWeeklyLeaderboard(week)
view.Scores = org.WeeklyScore[week]
}
enc.Encode(view)
}
开发者ID:tokams,项目名称:autograder,代码行数:70,代码来源:score.go
示例20: PublishReviewHandler
// PublishReviewHandler is a http handler which will publish a new
// code review to github. The function output json as the answer.
//
// Expected input keys: course, title, fileext, desc and code.
func PublishReviewHandler(w http.ResponseWriter, r *http.Request) {
view := PublishReviewView{
Error: true,
}
enc := json.NewEncoder(w)
// Checks if the user is signed in.
member, err := checkMemberApproval(w, r, true)
if err != nil {
view.Errormsg = "Not logged in."
enc.Encode(view)
return
}
if r.FormValue("course") == "" || r.FormValue("title") == "" ||
r.FormValue("fileext") == "" || r.FormValue("desc") == "" ||
r.FormValue("code") == "" {
view.Errormsg = "Missing some required input data."
enc.Encode(view)
return
}
if !git.HasOrganization(r.FormValue("course")) {
view.Errormsg = "Unknown course."
enc.Encode(view)
return
}
org, err := git.NewOrganization(r.FormValue("course"), false)
if err != nil {
view.Errormsg = "Error while getting orgaization data from storage."
enc.Encode(view)
return
}
defer func() {
if err := org.Save(); err != nil {
org.Unlock()
log.Println(err)
}
}()
if !org.IsMember(member) {
view.Errormsg = "Not a member of this course."
enc.Encode(view)
return
}
alfanumreg, err := regexp.Compile("[^A-Za-z0-9]+")
if err != nil {
view.Errormsg = "Internal sanitazion error."
enc.Encode(view)
return
}
reg, err := regexp.Compile("[^A-Za-z0-9 -.]+")
if err != nil {
view.Errormsg = "Internal sanitazion error."
enc.Encode(view)
return
}
// removes illigal chars
ext := r.FormValue("fileext")
ext = alfanumreg.ReplaceAllString(ext, "")
ext = strings.TrimSpace(ext)
title := r.FormValue("title")
title = reg.ReplaceAllString(title, "")
title = strings.TrimSpace(title)
cr, err := git.NewCodeReview()
if err != nil {
view.Errormsg = "Couldn't create code review: " + err.Error()
enc.Encode(view)
return
}
cr.Title = title
cr.Ext = ext
cr.Desc = r.FormValue("desc")
cr.Code = r.FormValue("code")
cr.User = member.Username
err = org.AddCodeReview(cr)
if err != nil {
view.Errormsg = err.Error()
enc.Encode(view)
return
}
if err := cr.Save(); err != nil {
view.Errormsg = err.Error()
enc.Encode(view)
return
}
//.........这里部分代码省略.........
开发者ID:tokams,项目名称:autograder,代码行数:101,代码来源:review.go
注:本文中的github.com/hfurubotten/autograder/entities.NewOrganization函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论