mirror of
				https://github.com/elyby/chrly.git
				synced 2025-05-31 14:11:51 +05:30 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package mojang
 | 
						|
 | 
						|
type MojangUuidsStorage interface {
 | 
						|
	// The second argument must be returned as a incoming username in case,
 | 
						|
	// when cached result indicates that there is no Mojang user with provided username
 | 
						|
	GetUuidForMojangUsername(username string) (foundUuid string, foundUsername string, err error)
 | 
						|
	// An empty uuid value can be passed if the corresponding account has not been found
 | 
						|
	StoreMojangUuid(username string, uuid string) error
 | 
						|
}
 | 
						|
 | 
						|
type UuidsProviderWithCache struct {
 | 
						|
	Provider UuidsProvider
 | 
						|
	Storage  MojangUuidsStorage
 | 
						|
}
 | 
						|
 | 
						|
func (p *UuidsProviderWithCache) GetUuid(username string) (*ProfileInfo, error) {
 | 
						|
	uuid, foundUsername, err := p.Storage.GetUuidForMojangUsername(username)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	if foundUsername != "" {
 | 
						|
		if uuid != "" {
 | 
						|
			return &ProfileInfo{Id: uuid, Name: foundUsername}, nil
 | 
						|
		}
 | 
						|
 | 
						|
		return nil, nil
 | 
						|
	}
 | 
						|
 | 
						|
	profile, err := p.Provider.GetUuid(username)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	freshUuid := ""
 | 
						|
	wellCasedUsername := username
 | 
						|
	if profile != nil {
 | 
						|
		freshUuid = profile.Id
 | 
						|
		wellCasedUsername = profile.Name
 | 
						|
	}
 | 
						|
 | 
						|
	_ = p.Storage.StoreMojangUuid(wellCasedUsername, freshUuid)
 | 
						|
 | 
						|
	return profile, nil
 | 
						|
}
 |