Переглянути джерело

Send full list of homepages, shuffled.

Kruger 9 роки тому
батько
коміт
994594824f
2 змінених файлів з 10 додано та 6 видалено
  1. 1 1
      psiphon/server/api.go
  2. 9 5
      psiphon/server/psinet/psinet.go

+ 1 - 1
psiphon/server/api.go

@@ -176,7 +176,7 @@ func handshakeAPIRequestHandler(
 	db := support.PsinetDatabase
 	handshakeResponse := protocol.HandshakeResponse{
 		SSHSessionID:         sessionID,
-		Homepages:            db.GetRandomHomepage(sponsorID, geoIPData.Country, isMobile),
+		Homepages:            db.GetRandomizedHomepages(sponsorID, geoIPData.Country, isMobile),
 		UpgradeClientVersion: db.GetUpgradeClientVersion(clientVersion, normalizedPlatform),
 		PageViewRegexes:      make([]map[string]string, 0),
 		HttpsRequestRegexes:  db.GetHttpsRequestRegexes(sponsorID),

+ 9 - 5
psiphon/server/psinet/psinet.go

@@ -152,13 +152,17 @@ func NewDatabase(filename string) (*Database, error) {
 	return database, nil
 }
 
-// GetRandomHomepage returns a random home page from a set of home pages
+// GetRandomizedHomepages returns a randomly ordered list of home pages
 // for the specified sponsor, region, and platform.
-func (db *Database) GetRandomHomepage(sponsorID, clientRegion string, isMobilePlatform bool) []string {
+func (db *Database) GetRandomizedHomepages(sponsorID, clientRegion string, isMobilePlatform bool) []string {
 	homepages := db.GetHomepages(sponsorID, clientRegion, isMobilePlatform)
-	if len(homepages) > 0 {
-		index := rand.Intn(len(homepages))
-		return homepages[index : index+1]
+	if len(homepages) > 1 {
+		shuffledHomepages := make([]string, len(homepages))
+		perm := rand.Perm(len(homepages))
+		for i, v := range perm {
+			shuffledHomepages[v] = homepages[i]
+		}
+		return shuffledHomepages
 	}
 	return homepages
 }