Example #1
0
File: users.go Project: ovh/tat
// Contacts retrieves contacts presences since n seconds
func (*UsersController) Contacts(ctx *gin.Context) {
	sinceSeconds, err := GetParam(ctx, "sinceSeconds")
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": "Error while getting seconds parameter"})
		return
	}
	seconds, err := strconv.ParseInt(sinceSeconds, 10, 64)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": "Invalid since parameter : must be an interger"})
		return
	}

	var user = tat.User{}
	found, err := userDB.FindByUsername(&user, getCtxUsername(ctx))
	if !found {
		ctx.JSON(http.StatusInternalServerError, errors.New("User unknown"))
		return
	} else if err != nil {
		ctx.JSON(http.StatusInternalServerError, errors.New("Error while fetching user"))
		return
	}
	criteria := tat.PresenceCriteria{}
	for _, contact := range user.Contacts {
		criteria.Username = criteria.Username + "," + contact.Username
	}
	criteria.DateMinPresence = strconv.FormatInt(time.Now().Unix()-seconds, 10)
	count, presences, _ := presenceDB.ListPresences(&criteria)

	out := &tat.ContactsJSON{
		Contacts:               user.Contacts,
		CountContactsPresences: count,
		ContactsPresences:      &presences,
	}
	ctx.JSON(http.StatusOK, out)
}
Example #2
0
File: presences.go Project: ovh/tat
func (m *PresencesController) listWithCriteria(ctx *gin.Context, criteria *tat.PresenceCriteria) {
	user, e := m.preCheckUser(ctx)
	if e != nil {
		return
	}

	if criteria.Topic != "" {
		_, err := topicDB.FindByTopic(criteria.Topic, true, false, false, user)
		if err != nil {
			ctx.AbortWithError(http.StatusBadRequest, errors.New("topic "+criteria.Topic+" does not exist or you have no Read Access on it"))
			return
		}

		// add / if search on topic
		// as topic is in path, it can't start with a /
		if criteria.Topic != "" && string(criteria.Topic[0]) != "/" {
			criteria.Topic = "/" + criteria.Topic
		}

		topicDM := "/Private/" + getCtxUsername(ctx) + "/DM/"
		if strings.HasPrefix(criteria.Topic, topicDM) {
			part := strings.Split(criteria.Topic, "/")
			if len(part) != 5 {
				log.Errorf("wrong topic name for DM")
				ctx.AbortWithError(http.StatusInternalServerError, errors.New("Wrong topic name for DM:"+criteria.Topic))
				return
			}
			topicInverse := "/Private/" + part[4] + "/DM/" + getCtxUsername(ctx)
			criteria.Topic = criteria.Topic + "," + topicInverse
		}
	}

	count, presences, err := presenceDB.ListPresences(criteria)
	if err != nil {
		ctx.AbortWithError(http.StatusInternalServerError, err)
		return
	}
	out := &tat.PresencesJSON{
		Count:     count,
		Presences: presences,
	}
	ctx.JSON(http.StatusOK, out)
}