Fix various bugs
This commit is contained in:
		
							parent
							
								
									40cd19c5f0
								
							
						
					
					
						commit
						79c9738b96
					
				| 
						 | 
					@ -62,6 +62,11 @@ func FetchSnippets(
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		iSnippetIDs := itSnippetIDs.ToSlice()
 | 
							iSnippetIDs := itSnippetIDs.ToSlice()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// special early-out: no snippets found for these tags at all
 | 
				
			||||||
 | 
							if len(iSnippetIDs) == 0 {
 | 
				
			||||||
 | 
								return nil, nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		q.IDs = make([]int, len(iSnippetIDs))
 | 
							q.IDs = make([]int, len(iSnippetIDs))
 | 
				
			||||||
		for i := range iSnippetIDs {
 | 
							for i := range iSnippetIDs {
 | 
				
			||||||
			q.IDs[i] = iSnippetIDs[i].(*snippetIDRow).SnippetID
 | 
								q.IDs[i] = iSnippetIDs[i].(*snippetIDRow).SnippetID
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,7 @@
 | 
				
			||||||
				<img alt="{{ .Project.Name }}" src="{{ .Project.Logo }}">
 | 
									<img alt="{{ .Project.Name }}" src="{{ .Project.Logo }}">
 | 
				
			||||||
			{{ else }}
 | 
								{{ else }}
 | 
				
			||||||
				<div class="bg--dim w-100 aspect-ratio--1x1 relative">
 | 
									<div class="bg--dim w-100 aspect-ratio--1x1 relative">
 | 
				
			||||||
					<div class="aspect-ratio--object flex justify-center items-center f3 b c--dimmest">{{ .Project.Name }}</div>
 | 
										<div class="aspect-ratio--object flex justify-center items-center f3 b c--dimmest tc">{{ .Project.Name }}</div>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
			{{ end }}
 | 
								{{ end }}
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,10 +39,7 @@ func PodcastIndex(c *RequestContext) ResponseData {
 | 
				
			||||||
		return FourOhFour(c)
 | 
							return FourOhFour(c)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
 | 
						canEdit := c.CurrentUserCanEditCurrentProject
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	baseData := getBaseDataAutocrumb(c, podcastResult.Podcast.Title)
 | 
						baseData := getBaseDataAutocrumb(c, podcastResult.Podcast.Title)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -78,10 +75,7 @@ func PodcastEdit(c *RequestContext) ResponseData {
 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
							return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
 | 
						canEdit := c.CurrentUserCanEditCurrentProject
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if podcastResult.Podcast == nil || !canEdit {
 | 
						if podcastResult.Podcast == nil || !canEdit {
 | 
				
			||||||
		return FourOhFour(c)
 | 
							return FourOhFour(c)
 | 
				
			||||||
| 
						 | 
					@ -112,10 +106,7 @@ func PodcastEditSubmit(c *RequestContext) ResponseData {
 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
							return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
 | 
						canEdit := c.CurrentUserCanEditCurrentProject
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if podcastResult.Podcast == nil || !canEdit {
 | 
						if podcastResult.Podcast == nil || !canEdit {
 | 
				
			||||||
		return FourOhFour(c)
 | 
							return FourOhFour(c)
 | 
				
			||||||
| 
						 | 
					@ -218,11 +209,7 @@ func PodcastEpisode(c *RequestContext) ResponseData {
 | 
				
			||||||
		return FourOhFour(c)
 | 
							return FourOhFour(c)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
 | 
						canEdit := c.CurrentUserCanEditCurrentProject
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		c.Logger.Error().Err(err).Msg("Failed to check if user can edit podcast. Assuming they can't.") // NOTE(asaf): No need to return an error response here if it failed.
 | 
					 | 
				
			||||||
		canEdit = false
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	editUrl := ""
 | 
						editUrl := ""
 | 
				
			||||||
	if canEdit {
 | 
						if canEdit {
 | 
				
			||||||
| 
						 | 
					@ -268,10 +255,7 @@ func PodcastEpisodeNew(c *RequestContext) ResponseData {
 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
							return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
 | 
						canEdit := c.CurrentUserCanEditCurrentProject
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if podcastResult.Podcast == nil || !canEdit {
 | 
						if podcastResult.Podcast == nil || !canEdit {
 | 
				
			||||||
		return FourOhFour(c)
 | 
							return FourOhFour(c)
 | 
				
			||||||
| 
						 | 
					@ -311,10 +295,7 @@ func PodcastEpisodeEdit(c *RequestContext) ResponseData {
 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
							return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
 | 
						canEdit := c.CurrentUserCanEditCurrentProject
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if podcastResult.Podcast == nil || len(podcastResult.Episodes) == 0 || !canEdit {
 | 
						if podcastResult.Podcast == nil || len(podcastResult.Episodes) == 0 || !canEdit {
 | 
				
			||||||
		return FourOhFour(c)
 | 
							return FourOhFour(c)
 | 
				
			||||||
| 
						 | 
					@ -360,10 +341,7 @@ func PodcastEpisodeSubmit(c *RequestContext) ResponseData {
 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
							return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
 | 
						canEdit := c.CurrentUserCanEditCurrentProject
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return c.ErrorResponse(http.StatusInternalServerError, err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if podcastResult.Podcast == nil || (isEdit && len(podcastResult.Episodes) == 0) || !canEdit {
 | 
						if podcastResult.Podcast == nil || (isEdit && len(podcastResult.Episodes) == 0) || !canEdit {
 | 
				
			||||||
		return FourOhFour(c)
 | 
							return FourOhFour(c)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -692,7 +692,7 @@ func updateProject(ctx context.Context, tx pgx.Tx, user *models.User, payload *P
 | 
				
			||||||
			blurb = $?,
 | 
								blurb = $?,
 | 
				
			||||||
			description = $?,
 | 
								description = $?,
 | 
				
			||||||
			descparsed = $?,
 | 
								descparsed = $?,
 | 
				
			||||||
			lifecycle = $?,
 | 
								lifecycle = $?
 | 
				
			||||||
		`,
 | 
							`,
 | 
				
			||||||
		payload.Name,
 | 
							payload.Name,
 | 
				
			||||||
		payload.Blurb,
 | 
							payload.Blurb,
 | 
				
			||||||
| 
						 | 
					@ -701,7 +701,7 @@ func updateProject(ctx context.Context, tx pgx.Tx, user *models.User, payload *P
 | 
				
			||||||
		payload.Lifecycle,
 | 
							payload.Lifecycle,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	if user.IsStaff {
 | 
						if user.IsStaff {
 | 
				
			||||||
		qb.Add(`hidden = $?`, payload.Hidden)
 | 
							qb.Add(`, hidden = $?`, payload.Hidden)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	qb.Add(`WHERE id = $?`, payload.ProjectID)
 | 
						qb.Add(`WHERE id = $?`, payload.ProjectID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -857,21 +857,17 @@ func GetFormImage(c *RequestContext, fieldName string) (FormImage, error) {
 | 
				
			||||||
	return res, nil
 | 
						return res, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func CanEditProject(c *RequestContext, user *models.User, projectId int) (bool, error) {
 | 
					func CanEditProject(user *models.User, owners []*models.User) bool {
 | 
				
			||||||
	if user != nil {
 | 
						if user != nil {
 | 
				
			||||||
		if user.IsStaff {
 | 
							if user.IsStaff {
 | 
				
			||||||
			return true, nil
 | 
								return true
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			owners, err := hmndata.FetchProjectOwners(c.Context(), c.Conn, projectId)
 | 
					 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				return false, err
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			for _, owner := range owners {
 | 
								for _, owner := range owners {
 | 
				
			||||||
				if owner.ID == user.ID {
 | 
									if owner.ID == user.ID {
 | 
				
			||||||
					return true, nil
 | 
										return true
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return false, nil
 | 
						return false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -311,6 +311,7 @@ func NewWebsiteRoutes(longRequestContext context.Context, conn *pgxpool.Pool) ht
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				c.CurrentProject = &p.Project
 | 
									c.CurrentProject = &p.Project
 | 
				
			||||||
				c.UrlContext = hmndata.UrlContextForProject(c.CurrentProject)
 | 
									c.UrlContext = hmndata.UrlContextForProject(c.CurrentProject)
 | 
				
			||||||
 | 
									c.CurrentUserCanEditCurrentProject = CanEditProject(c.CurrentUser, p.Owners)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if !p.Project.Personal {
 | 
									if !p.Project.Personal {
 | 
				
			||||||
					return c.Redirect(c.UrlContext.RewriteProjectUrl(c.URL()), http.StatusSeeOther)
 | 
										return c.Redirect(c.UrlContext.RewriteProjectUrl(c.URL()), http.StatusSeeOther)
 | 
				
			||||||
| 
						 | 
					@ -485,7 +486,6 @@ func LoadCommonWebsiteData(c *RequestContext) (bool, ResponseData) {
 | 
				
			||||||
				panic(oops.New(err, "failed to fetch HMN project"))
 | 
									panic(oops.New(err, "failed to fetch HMN project"))
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			c.CurrentProject = &dbProject.Project
 | 
								c.CurrentProject = &dbProject.Project
 | 
				
			||||||
			owners = dbProject.Owners
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if c.CurrentProject == nil {
 | 
							if c.CurrentProject == nil {
 | 
				
			||||||
| 
						 | 
					@ -494,11 +494,12 @@ func LoadCommonWebsiteData(c *RequestContext) (bool, ResponseData) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		canEditProject := false
 | 
							canEditProject := false
 | 
				
			||||||
		if c.CurrentUser != nil {
 | 
							if c.CurrentUser != nil {
 | 
				
			||||||
			canEditProject = c.CurrentUser.IsStaff
 | 
								if c.CurrentUser.IsStaff {
 | 
				
			||||||
			if !canEditProject {
 | 
									canEditProject = true
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
				for _, o := range owners {
 | 
									for _, o := range owners {
 | 
				
			||||||
					if o.ID == c.CurrentUser.ID {
 | 
										if o.ID == c.CurrentUser.ID {
 | 
				
			||||||
						c.CurrentUserCanEditCurrentProject = true
 | 
											canEditProject = true
 | 
				
			||||||
						break
 | 
											break
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue