Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

djfuse.py

Blame
  • actions_test.go 23.45 KiB
    package accountserver
    
    import (
    	"context"
    	"errors"
    	"fmt"
    	"path/filepath"
    	"strings"
    	"testing"
    
    	ct "git.autistici.org/ai3/go-common/ldap/compositetypes"
    	"git.autistici.org/ai3/go-common/pwhash"
    	"git.autistici.org/id/auth"
    	sso "git.autistici.org/id/go-sso"
    )
    
    const testUser = "testuser@example.com"
    
    type fakeBackend struct {
    	users                map[string]*User
    	resources            map[string]*Resource
    	passwords            map[string]string
    	recoveryPasswords    map[string]string
    	resourcePasswords    map[string]string
    	appSpecificPasswords map[string][]*ct.AppSpecificPassword
    	encryptionKeys       map[string][]*ct.EncryptedKey
    }
    
    func (b *fakeBackend) NewTransaction() (TX, error) {
    	return b, nil
    }
    
    func (b *fakeBackend) Commit(_ context.Context) error {
    	return nil
    }
    
    func (b *fakeBackend) NextUID(_ context.Context) (int, error) {
    	return 42, nil
    }
    
    func (b *fakeBackend) CanAccessResource(_ context.Context, username string, rsrc *Resource) bool {
    	owner := strings.Split(string(rsrc.ID), "/")[0]
    	return owner == username
    }
    
    func (b *fakeBackend) GetUser(_ context.Context, username string) (*RawUser, error) {
    	u, ok := b.users[username]
    	if !ok {
    		return nil, errors.New("user not found in fake backend")
    	}
    	return &RawUser{
    		User:             *u,
    		Password:         b.passwords[username],
    		RecoveryPassword: b.recoveryPasswords[username],
    		Keys:             b.encryptionKeys[username],
    	}, nil
    }
    
    func (b *fakeBackend) SearchUser(_ context.Context, pattern string, limit int) ([]string, error) {
    	var out []string
    	for username := range b.users {
    		if strings.HasPrefix(username, pattern) {
    			out = append(out, username)
    		}
    	}
    	return out, nil
    }
    
    func (b *fakeBackend) UpdateUser(_ context.Context, user *User) error {
    	b.users[user.Name] = user