本文整理汇总了Golang中github.com/tinode/chat/server/store/types.Uid类的典型用法代码示例。如果您正苦于以下问题:Golang Uid类的具体用法?Golang Uid怎么用?Golang Uid使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Uid类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Authenticate
func (TokenAuth) Authenticate(token string) (types.Uid, time.Time, int) {
var zeroTime time.Time
// [8:UID][4:expires][32:signature] == 44 bytes
data, err := base64.URLEncoding.DecodeString(token)
if err != nil {
return types.ZeroUid, zeroTime, auth.ErrMalformed
}
if len(data) != token_len_decoded {
return types.ZeroUid, zeroTime, auth.ErrMalformed
}
var uid types.Uid
if err := uid.UnmarshalBinary(data[0:8]); err != nil {
return types.ZeroUid, zeroTime, auth.ErrMalformed
}
hasher := hmac.New(sha256.New, hmac_salt)
hasher.Write(data[:12])
if !hmac.Equal(data[12:], hasher.Sum(nil)) {
return types.ZeroUid, zeroTime, auth.ErrFailed
}
expires := time.Unix(int64(binary.LittleEndian.Uint32(data[8:12])), 0).UTC()
if expires.Before(time.Now()) {
return types.ZeroUid, zeroTime, auth.ErrExpired
}
return uid, expires, auth.NoErr
}
开发者ID:ycaihua,项目名称:chat,代码行数:31,代码来源:auth_token.go
示例2: evictUser
// evictUser evicts given user's sessions from the topic and clears user's cached data, if requested
func (t *Topic) evictUser(uid types.Uid, clear bool, ignore *Session) {
now := time.Now().UTC().Round(time.Millisecond)
note := NoErrEvicted("", t.original, now)
if clear {
// Delete per-user data
delete(t.perUser, uid)
} else {
// Clear online status
pud := t.perUser[uid]
pud.online = 0
t.perUser[uid] = pud
}
// Notify topic subscribers that the user has left the topic
if t.cat == TopicCat_Grp {
t.presPubChange(uid.UserId(), "off")
}
// Detach all user's sessions
for sess, _ := range t.sessions {
if sess.uid == uid {
delete(t.sessions, sess)
sess.detach <- t.name
if sess != ignore {
sess.QueueOut(note)
}
}
}
}
开发者ID:steelannelida,项目名称:tinode-chat,代码行数:31,代码来源:topic.go
示例3: UserUpdateStatus
func (a *RethinkDbAdapter) UserUpdateStatus(uid t.Uid, status interface{}) error {
update := map[string]interface{}{"Status": status}
_, err := rdb.DB(a.dbName).Table("users").Get(uid.String()).
Update(update, rdb.UpdateOpts{Durability: "soft"}).RunWrite(a.conn)
return err
}
开发者ID:ycaihua,项目名称:chat,代码行数:8,代码来源:adapter.go
示例4: presAnnounceToUser
// Announce to a single user on 'me' topic
func (t *Topic) presAnnounceToUser(uid types.Uid, what string, seq int, skip *Session) {
if pud, ok := t.perUser[uid]; ok {
update := &MsgServerPres{Topic: "me", What: what, Src: t.original, SeqId: seq}
if pud.modeGiven&pud.modeWant&types.ModePres != 0 {
globals.hub.route <- &ServerComMessage{Pres: update, rcptto: uid.UserId(), sessSkip: skip}
}
}
}
开发者ID:ycaihua,项目名称:chat,代码行数:10,代码来源:pres.go
示例5: SubscriptionGet
// Get a subscription of a user to a topic
func (a *RethinkDbAdapter) SubscriptionGet(topic string, user t.Uid) (*t.Subscription, error) {
rows, err := rdb.DB(a.dbName).Table("subscriptions").Get(topic + ":" + user.String()).Run(a.conn)
if err != nil {
return nil, err
}
var sub t.Subscription
err = rows.One(&sub)
return &sub, rows.Err()
}
开发者ID:ycaihua,项目名称:chat,代码行数:12,代码来源:adapter.go
示例6: UserUpdateLastSeen
func (a *RethinkDbAdapter) UserUpdateLastSeen(uid t.Uid, userAgent string, when time.Time) error {
update := struct {
LastSeen time.Time
UserAgent string
}{when, userAgent}
_, err := rdb.DB(a.dbName).Table("users").Get(uid.String()).
Update(update, rdb.UpdateOpts{Durability: "soft"}).RunWrite(a.conn)
return err
}
开发者ID:ycaihua,项目名称:chat,代码行数:11,代码来源:adapter.go
示例7: UserGet
// UserGet fetches a single user by user id. If user is not found it returns (nil, nil)
func (a *RethinkDbAdapter) UserGet(uid t.Uid) (*t.User, error) {
if row, err := rdb.DB(a.dbName).Table("users").Get(uid.String()).Run(a.conn); err == nil && !row.IsNil() {
var user t.User
if err = row.One(&user); err == nil {
return &user, nil
}
return nil, err
} else {
// If user does not exist, it returns nil, nil
return nil, err
}
}
开发者ID:ycaihua,项目名称:chat,代码行数:13,代码来源:adapter.go
示例8: replyTopicDescBasic
// replyTopicDescBasic loads minimal topic Desc when the requester is not subscribed to the topic
func replyTopicDescBasic(sess *Session, topic string, get *MsgClientGet) {
log.Printf("hub.replyTopicDescBasic: topic %s", topic)
now := time.Now().UTC().Round(time.Millisecond)
desc := &MsgTopicDesc{}
if strings.HasPrefix(topic, "grp") {
stopic, err := store.Topics.Get(topic)
if err == nil {
desc.CreatedAt = &stopic.CreatedAt
desc.UpdatedAt = &stopic.UpdatedAt
desc.Public = stopic.Public
} else {
sess.queueOut(ErrUnknown(get.Id, get.Topic, now))
return
}
} else {
// 'me' and p2p topics
var uid types.Uid
if strings.HasPrefix(topic, "usr") {
// User specified as usrXXX
uid = types.ParseUserId(topic)
} else if strings.HasPrefix(topic, "p2p") {
// User specified as p2pXXXYYY
uid1, uid2, _ := types.ParseP2P(topic)
if uid1 == sess.uid {
uid = uid2
} else if uid2 == sess.uid {
uid = uid1
}
}
if uid.IsZero() {
sess.queueOut(ErrMalformed(get.Id, get.Topic, now))
return
}
suser, err := store.Users.Get(uid)
if err == nil {
desc.CreatedAt = &suser.CreatedAt
desc.UpdatedAt = &suser.UpdatedAt
desc.Public = suser.Public
} else {
log.Printf("hub.replyTopicInfoBasic: sending error 3")
sess.queueOut(ErrUnknown(get.Id, get.Topic, now))
return
}
}
log.Printf("hub.replyTopicDescBasic: sending desc -- OK")
sess.queueOut(&ServerComMessage{
Meta: &MsgServerMeta{Id: get.Id, Topic: get.Topic, Timestamp: &now, Desc: desc}})
}
开发者ID:ycaihua,项目名称:chat,代码行数:53,代码来源:hub.go
示例9: GenSecret
func (TokenAuth) GenSecret(uid types.Uid, expires time.Time) (string, error) {
// [8:UID][4:expires][32:signature] == 44 bytes
buf := new(bytes.Buffer)
uidbits, _ := uid.MarshalBinary()
binary.Write(buf, binary.LittleEndian, uidbits)
binary.Write(buf, binary.LittleEndian, uint32(expires.Unix()))
hasher := hmac.New(sha256.New, hmac_salt)
hasher.Write(buf.Bytes())
binary.Write(buf, binary.LittleEndian, hasher.Sum(nil))
return base64.URLEncoding.EncodeToString(buf.Bytes()), nil
}
开发者ID:ycaihua,项目名称:chat,代码行数:13,代码来源:auth_token.go
示例10: AddAuthRecord
// Add user's authentication record
func (a *RethinkDbAdapter) AddAuthRecord(uid t.Uid, unique string, secret []byte, expires time.Time) (error, bool) {
_, err := rdb.DB(a.dbName).Table("auth").Insert(
map[string]interface{}{
"unique": unique,
"userid": uid.String(),
"secret": secret,
"expires": expires}).RunWrite(a.conn)
if err != nil {
if rdb.IsConflictErr(err) {
return errors.New("duplicate credential"), true
}
return err, false
}
return nil, false
}
开发者ID:ycaihua,项目名称:chat,代码行数:16,代码来源:adapter.go
示例11: SubsForUser
// SubsForUser loads a list of user's subscriptions to topics
func (a *RethinkDbAdapter) SubsForUser(forUser t.Uid) ([]t.Subscription, error) {
if forUser.IsZero() {
return nil, errors.New("RethinkDb adapter: invalid user ID in TopicGetAll")
}
q := rdb.DB(a.dbName).Table("subscriptions").GetAllByIndex("User", forUser.String()).Limit(MAX_RESULTS)
rows, err := q.Run(a.conn)
if err != nil {
return nil, err
}
var subs []t.Subscription
var ss t.Subscription
for rows.Next(&ss) {
subs = append(subs, ss)
}
return subs, rows.Err()
}
开发者ID:ycaihua,项目名称:chat,代码行数:20,代码来源:adapter.go
示例12: replySetSub
// replySetSub is a response to new subscription request or an update to a subscription {set.sub}:
// update topic metadata cache, save/update subs, reply to the caller as {ctrl} message, generate an invite
func (t *Topic) replySetSub(h *Hub, sess *Session, set *MsgClientSet) error {
now := time.Now().UTC().Round(time.Millisecond)
var uid types.Uid
if uid = types.ParseUserId(set.Sub.User); uid.IsZero() && set.Sub.User != "" {
// Invalid user ID
sess.queueOut(ErrMalformed(set.Id, set.Topic, now))
return errors.New("invalid user id")
}
// if set.User is not set, request is for the current user
if !uid.IsZero() {
uid = sess.uid
}
if uid == sess.uid {
return t.requestSub(h, sess, set.Id, set.Sub.Mode, set.Sub.Info, nil, false)
} else {
return t.approveSub(h, sess, uid, set)
}
}
开发者ID:ycaihua,项目名称:chat,代码行数:23,代码来源:topic.go
示例13: Create
// Create creates a topic and owner's subscription to topic
func (TopicsObjMapper) Create(topic *types.Topic, owner types.Uid, private interface{}) error {
topic.InitTimes()
err := adaptr.TopicCreate(topic)
if err != nil {
return err
}
if !owner.IsZero() {
err = Subs.Create(&types.Subscription{
ObjHeader: types.ObjHeader{CreatedAt: topic.CreatedAt},
User: owner.String(),
Topic: topic.Name,
ModeGiven: types.ModeFull,
ModeWant: topic.GetAccess(owner),
Private: private})
}
return err
}
开发者ID:steelannelida,项目名称:tinode-chat,代码行数:22,代码来源:store.go
示例14: makeInvite
func (t *Topic) makeInvite(notify, target, from types.Uid, act types.InviteAction, modeWant,
modeGiven types.AccessMode, info interface{}) *ServerComMessage {
// FIXME(gene): this is a workaround for gorethink's broken way of marshalling json
inv, err := json.Marshal(MsgInvitation{
Topic: t.name,
User: target.UserId(),
Action: act.String(),
Acs: MsgAccessMode{modeWant.String(), modeGiven.String()},
Info: info})
if err != nil {
log.Println(err)
}
converted := map[string]interface{}{}
err = json.Unmarshal(inv, &converted)
if err != nil {
log.Println(err)
}
// endof workaround
msg := &ServerComMessage{Data: &MsgServerData{
Topic: "me",
From: from.UserId(),
Timestamp: time.Now().UTC().Round(time.Millisecond),
Content: converted}, rcptto: notify.UserId()}
log.Printf("Invite generated: %#+v", msg.Data)
return msg
}
开发者ID:ycaihua,项目名称:chat,代码行数:28,代码来源:topic.go
示例15: login
// Authenticate
func (s *Session) login(msg *ClientComMessage) {
var uid types.Uid
var err error
if !s.uid.IsZero() {
s.QueueOut(ErrAlreadyAuthenticated(msg.Login.Id, "", msg.timestamp))
return
} else if msg.Login.Scheme == "" || msg.Login.Scheme == "basic" {
uid, err = store.Users.Login(msg.Login.Scheme, msg.Login.Secret)
if err != nil {
// DB error
log.Println(err)
s.QueueOut(ErrUnknown(msg.Login.Id, "", msg.timestamp))
return
} else if uid.IsZero() {
// Invalid login or password
s.QueueOut(ErrAuthFailed(msg.Login.Id, "", msg.timestamp))
return
}
} else {
s.QueueOut(ErrAuthUnknownScheme(msg.Login.Id, "", msg.timestamp))
return
}
s.uid = uid
s.userAgent = msg.Login.UserAgent
s.QueueOut(&ServerComMessage{Ctrl: &MsgServerCtrl{
Id: msg.Login.Id,
Code: http.StatusOK,
Text: http.StatusText(http.StatusOK),
Timestamp: msg.timestamp,
Params: map[string]interface{}{"uid": uid.UserId()}}})
}
开发者ID:steelannelida,项目名称:tinode-chat,代码行数:37,代码来源:session.go
示例16: SubsUpdate
// SubsUpdate updates a single subscription.
func (a *RethinkDbAdapter) SubsUpdate(topic string, user t.Uid, update map[string]interface{}) error {
_, err := rdb.DB(a.dbName).Table("subscriptions").Get(topic + ":" + user.String()).Update(update).RunWrite(a.conn)
return err
}
开发者ID:ycaihua,项目名称:chat,代码行数:5,代码来源:adapter.go
示例17: DelAllAuthRecords
// Delete user's all authentication records
func (a *RethinkDbAdapter) DelAllAuthRecords(uid t.Uid) (int, error) {
res, err := rdb.DB(a.dbName).Table("auth").GetAllByIndex("userid", uid.String()).Delete().RunWrite(a.conn)
return res.Deleted, err
}
开发者ID:ycaihua,项目名称:chat,代码行数:5,代码来源:adapter.go
示例18: approveSub
// approveSub processes a request to initiate an invite or approve a subscription request from another user:
// Handle these cases:
// A. Manager is inviting another user for the first time (no prior subscription)
// B. Manager is re-inviting another user (adjusting modeGiven, modeWant is still "N")
// C. Manager is changing modeGiven for another user, modeWant != "N"
func (t *Topic) approveSub(h *Hub, sess *Session, target types.Uid, set *MsgClientSet) error {
now := time.Now().UTC().Round(time.Millisecond)
// Check if requester actually has permission to manage sharing
if userData, ok := t.perUser[sess.uid]; !ok || !userData.modeGiven.IsManager() || !userData.modeWant.IsManager() {
sess.queueOut(ErrPermissionDenied(set.Id, t.original, now))
return errors.New("topic access denied")
}
// Parse the access mode granted
var modeGiven types.AccessMode
if set.Sub.Mode != "" {
modeGiven.UnmarshalText([]byte(set.Sub.Mode))
}
// If the user is banned from topic, make sute it's the only change
if modeGiven.IsBanned() {
modeGiven = types.ModeBanned
}
// Make sure no one but the owner can do an ownership transfer
if modeGiven.IsOwner() && t.owner != sess.uid {
sess.queueOut(ErrPermissionDenied(set.Id, t.original, now))
return errors.New("attempt to transfer ownership by non-owner")
}
var givenBefore types.AccessMode
// Check if it's a new invite. If so, save it to database as a subscription.
// Saved subscription does not mean the user is allowed to post/read
userData, ok := t.perUser[target]
if !ok {
if modeGiven == types.ModeNone {
if t.accessAuth != types.ModeNone {
// Request to use default access mode for the new subscriptions.
modeGiven = t.accessAuth
} else {
sess.queueOut(ErrMalformed(set.Id, t.original, now))
return errors.New("cannot invite without giving any access rights")
}
}
// Add subscription to database
sub := &types.Subscription{
User: target.String(),
Topic: t.name,
ModeWant: types.ModeNone,
ModeGiven: modeGiven,
}
if err := store.Subs.Create(sub); err != nil {
sess.queueOut(ErrUnknown(set.Id, t.original, now))
return err
}
userData = perUserData{
modeGiven: sub.ModeGiven,
modeWant: sub.ModeWant,
private: nil,
}
t.perUser[target] = userData
} else {
// Action on an existing subscription (re-invite or confirm/decline)
givenBefore = userData.modeGiven
// Request to re-send invite without changing the access mode
if modeGiven == types.ModeNone {
modeGiven = userData.modeGiven
} else if modeGiven != userData.modeGiven {
userData.modeGiven = modeGiven
// Save changed value to database
if err := store.Subs.Update(t.name, sess.uid,
map[string]interface{}{"ModeGiven": modeGiven}); err != nil {
return err
}
t.perUser[target] = userData
}
}
// The user does not want to be bothered, no further action is needed
if userData.modeWant.IsBanned() {
sess.queueOut(ErrPermissionDenied(set.Id, t.original, now))
return errors.New("topic access denied")
}
// Handle the following cases:
// * a ban of the user, modeGive.IsBanned = true (if user is banned no need to invite anyone)
// * regular invite: modeWant = "N", modeGiven > 0
// * access rights update: old modeGiven != new modeGiven
if !modeGiven.IsBanned() {
if userData.modeWant == types.ModeNone {
// (re-)Send the invite to target
//.........这里部分代码省略.........
开发者ID:ycaihua,项目名称:chat,代码行数:101,代码来源:topic.go
示例19: presTopicSubscribed
// User subscribed to a new topic. Let all user's other sessions know.
// Case 11
func (t *Topic) presTopicSubscribed(user types.Uid, skip *Session) {
t.presAnnounceToUser(user, "on", 0, skip)
log.Printf("Pres 11: from '%s' (src: %s) [subbed/on]", t.name, user.UserId())
}
开发者ID:ycaihua,项目名称:chat,代码行数:6,代码来源:pres.go
示例20: UserUpdate
func (a *RethinkDbAdapter) UserUpdate(uid t.Uid, update map[string]interface{}) error {
_, err := rdb.DB(a.dbName).Table("users").Get(uid.String()).Update(update).RunWrite(a.conn)
return err
}
开发者ID:ycaihua,项目名称:chat,代码行数:4,代码来源:adapter.go
注:本文中的github.com/tinode/chat/server/store/types.Uid类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论