Commit aa0ee02e authored by Mo Firouz's avatar Mo Firouz
Browse files

Add batch capabilities to the API. Add protocol documentation. Merged #77

Make User ID available in Runtime After authentication invocations
parent 2929f7e7
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -5,6 +5,15 @@ The format is based on [keep a changelog](http://keepachangelog.com/) and this p

## [Unreleased]

### Changed
- Restructure and stabilize API messages.
- Add batch operations Friends social graph.

### Fixed
- Invocation type was always set to "Before" in After Runtime scripts.
- User ID was not passed to context in After Authentication invocations.
- Authentication runtime invocation messages were named with leading "." and trailing "_".

## [0.13.1] - 2017-06-08
### Added
- Runtime Base64 and Base16 conversion util functions.
+704 −142

File changed.

Preview size limit exceeded, changes collapsed.

+4 −7
Original line number Diff line number Diff line
@@ -102,7 +102,8 @@ func RuntimeAfterHook(logger *zap.Logger, runtime *Runtime, jsonpbMarshaler *jso
}

func RuntimeBeforeHookAuthentication(runtime *Runtime, jsonpbMarshaler *jsonpb.Marshaler, jsonpbUnmarshaler *jsonpb.Unmarshaler, envelope *AuthenticateRequest) (*AuthenticateRequest, error) {
	messageType := strings.TrimPrefix(fmt.Sprintf("%T", envelope.Payload), "*server")
	messageType := strings.TrimPrefix(fmt.Sprintf("%T", envelope.Id), "*server.")
	messageType = strings.TrimSuffix(messageType, "_")
	fn := runtime.GetRuntimeCallback(BEFORE, messageType)
	if fn == nil {
		return envelope, nil
@@ -140,8 +141,8 @@ func RuntimeBeforeHookAuthentication(runtime *Runtime, jsonpbMarshaler *jsonpb.M
	return authenticationResult, nil
}

func RuntimeAfterHookAuthentication(logger *zap.Logger, runtime *Runtime, jsonpbMarshaler *jsonpb.Marshaler, envelope *AuthenticateRequest) {
	messageType := strings.TrimPrefix(fmt.Sprintf("%T", envelope.Payload), "*server")
func RuntimeAfterHookAuthentication(logger *zap.Logger, runtime *Runtime, jsonpbMarshaler *jsonpb.Marshaler, envelope *AuthenticateRequest, userId uuid.UUID, handle string, expiry int64) {
	messageType := strings.TrimPrefix(fmt.Sprintf("%T", envelope.Id), "*server")
	fn := runtime.GetRuntimeCallback(AFTER, messageType)
	if fn == nil {
		return
@@ -159,10 +160,6 @@ func RuntimeAfterHookAuthentication(logger *zap.Logger, runtime *Runtime, jsonpb
		return
	}

	userId := uuid.Nil
	handle := ""
	expiry := int64(0)

	if fnErr := runtime.InvokeFunctionAfter(fn, userId, handle, expiry, jsonEnvelope); fnErr != nil {
		logger.Error("Runtime after function caused an error", zap.String("message", messageType), zap.Error(fnErr))
	}
+38 −0
Original line number Diff line number Diff line
@@ -126,3 +126,41 @@ func UsersFetchHandle(logger *zap.Logger, db *sql.DB, handles []string) ([]*User

	return users, nil
}

func UsersFetchIdsHandles(logger *zap.Logger, db *sql.DB, userIds [][]byte, handles []string) ([]*User, error) {
	statements := make([]string, 0)
	params := make([]interface{}, 0)

	counter := 1
	for _, userID := range userIds {
		statement := "$" + strconv.Itoa(counter)
		counter += 1
		statements = append(statements, statement)
		params = append(params, userID)
	}
	for _, handle := range handles {
		statement := "$" + strconv.Itoa(counter)
		counter += 1
		statements = append(statements, statement)
		params = append(params, handle)
	}

	query := "WHERE "
	if len(userIds) > 0 {
		query += "users.id IN (" + strings.Join(statements, ", ") + ")"
	}

	if len(handles) > 0 {
		if len(userIds) > 0 {
			query += " OR "
		}
		query += "users.handle IN (" + strings.Join(statements, ", ") + ")"
	}

	users, err := querySocialGraph(logger, db, query, params)
	if err != nil {
		return nil, errors.New("Could not retrieve users")
	}

	return users, nil
}
+16 −16
Original line number Diff line number Diff line
@@ -99,20 +99,20 @@ func (p *pipeline) processRequest(logger *zap.Logger, session *session, original
	case *Envelope_UsersFetch:
		p.usersFetch(logger, session, envelope)

	case *Envelope_FriendAdd:
	case *Envelope_FriendsAdd:
		p.friendAdd(logger, session, envelope)
	case *Envelope_FriendRemove:
	case *Envelope_FriendsRemove:
		p.friendRemove(logger, session, envelope)
	case *Envelope_FriendBlock:
	case *Envelope_FriendsBlock:
		p.friendBlock(logger, session, envelope)
	case *Envelope_FriendsList:
		p.friendsList(logger, session, envelope)

	case *Envelope_GroupCreate:
	case *Envelope_GroupsCreate:
		p.groupCreate(logger, session, envelope)
	case *Envelope_GroupUpdate:
	case *Envelope_GroupsUpdate:
		p.groupUpdate(logger, session, envelope)
	case *Envelope_GroupRemove:
	case *Envelope_GroupsRemove:
		p.groupRemove(logger, session, envelope)
	case *Envelope_GroupsFetch:
		p.groupsFetch(logger, session, envelope)
@@ -122,20 +122,20 @@ func (p *pipeline) processRequest(logger *zap.Logger, session *session, original
		p.groupsSelfList(logger, session, envelope)
	case *Envelope_GroupUsersList:
		p.groupUsersList(logger, session, envelope)
	case *Envelope_GroupJoin:
	case *Envelope_GroupsJoin:
		p.groupJoin(logger, session, envelope)
	case *Envelope_GroupLeave:
	case *Envelope_GroupsLeave:
		p.groupLeave(logger, session, envelope)
	case *Envelope_GroupUserAdd:
	case *Envelope_GroupUsersAdd:
		p.groupUserAdd(logger, session, envelope)
	case *Envelope_GroupUserKick:
	case *Envelope_GroupUsersKick:
		p.groupUserKick(logger, session, envelope)
	case *Envelope_GroupUserPromote:
	case *Envelope_GroupUsersPromote:
		p.groupUserPromote(logger, session, envelope)

	case *Envelope_TopicJoin:
	case *Envelope_TopicsJoin:
		p.topicJoin(logger, session, envelope)
	case *Envelope_TopicLeave:
	case *Envelope_TopicsLeave:
		p.topicLeave(logger, session, envelope)
	case *Envelope_TopicMessageSend:
		p.topicMessageSend(logger, session, envelope)
@@ -144,9 +144,9 @@ func (p *pipeline) processRequest(logger *zap.Logger, session *session, original

	case *Envelope_MatchCreate:
		p.matchCreate(logger, session, envelope)
	case *Envelope_MatchJoin:
	case *Envelope_MatchesJoin:
		p.matchJoin(logger, session, envelope)
	case *Envelope_MatchLeave:
	case *Envelope_MatchesLeave:
		p.matchLeave(logger, session, envelope)
	case *Envelope_MatchDataSend:
		p.matchDataSend(logger, session, envelope)
@@ -165,7 +165,7 @@ func (p *pipeline) processRequest(logger *zap.Logger, session *session, original

	case *Envelope_LeaderboardsList:
		p.leaderboardsList(logger, session, envelope)
	case *Envelope_LeaderboardRecordWrite:
	case *Envelope_LeaderboardRecordsWrite:
		p.leaderboardRecordWrite(logger, session, envelope)
	case *Envelope_LeaderboardRecordsFetch:
		p.leaderboardRecordsFetch(logger, session, envelope)
Loading