mirror of https://github.com/h44z/wg-portal.git
				
				
				
			fix multi-peer generation, fix prefix handling (#491)
(cherry picked from commit c20f17cddf)
			
			
This commit is contained in:
		
							parent
							
								
									9be2133220
								
							
						
					
					
						commit
						b546eec4ed
					
				|  | @ -32,7 +32,7 @@ const selectedInterface = computed(() => { | ||||||
| function freshForm() { | function freshForm() { | ||||||
|   return { |   return { | ||||||
|     Identifiers: [], |     Identifiers: [], | ||||||
|     Suffix: "", |     Prefix: "", | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -102,7 +102,7 @@ async function save() { | ||||||
|         </div> |         </div> | ||||||
|         <div class="form-group"> |         <div class="form-group"> | ||||||
|           <label class="form-label mt-4">{{ $t('modals.peer-multi-create.prefix.label') }}</label> |           <label class="form-label mt-4">{{ $t('modals.peer-multi-create.prefix.label') }}</label> | ||||||
|           <input type="text" class="form-control" :placeholder="$t('modals.peer-multi-create.prefix.placeholder')" v-model="formData.Suffix"> |           <input type="text" class="form-control" :placeholder="$t('modals.peer-multi-create.prefix.placeholder')" v-model="formData.Prefix"> | ||||||
|           <small class="form-text text-muted">{{ $t('modals.peer-multi-create.prefix.description') }}</small> |           <small class="form-text text-muted">{{ $t('modals.peer-multi-create.prefix.description') }}</small> | ||||||
|         </div> |         </div> | ||||||
|       </fieldset> |       </fieldset> | ||||||
|  |  | ||||||
|  | @ -1851,7 +1851,7 @@ | ||||||
|                         "type": "string" |                         "type": "string" | ||||||
|                     } |                     } | ||||||
|                 }, |                 }, | ||||||
|                 "Suffix": { |                 "Prefix": { | ||||||
|                     "type": "string" |                     "type": "string" | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  | @ -206,7 +206,7 @@ definitions: | ||||||
|         items: |         items: | ||||||
|           type: string |           type: string | ||||||
|         type: array |         type: array | ||||||
|       Suffix: |       Prefix: | ||||||
|         type: string |         type: string | ||||||
|     type: object |     type: object | ||||||
|   model.Peer: |   model.Peer: | ||||||
|  |  | ||||||
|  | @ -138,7 +138,8 @@ func (s *Server) setupRoutes(endpoints ...ApiEndpointSetupFunc) { | ||||||
| 			s.versions[version].HandleFunc("GET /swagger/index.html", s.rapiDocHandler(version)) // Deprecated: old link
 | 			s.versions[version].HandleFunc("GET /swagger/index.html", s.rapiDocHandler(version)) // Deprecated: old link
 | ||||||
| 			s.versions[version].HandleFunc("GET /doc.html", s.rapiDocHandler(version)) | 			s.versions[version].HandleFunc("GET /doc.html", s.rapiDocHandler(version)) | ||||||
| 
 | 
 | ||||||
| 			groupSetupFn(s.versions[version]) | 			versionGroup := s.versions[version].Group() | ||||||
|  | 			groupSetupFn(versionGroup) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -172,13 +172,13 @@ func NewDomainPeer(src *Peer) *domain.Peer { | ||||||
| 
 | 
 | ||||||
| type MultiPeerRequest struct { | type MultiPeerRequest struct { | ||||||
| 	Identifiers []string `json:"Identifiers"` | 	Identifiers []string `json:"Identifiers"` | ||||||
| 	Suffix      string   `json:"Suffix"` | 	Prefix      string   `json:"Prefix"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func NewDomainPeerCreationRequest(src *MultiPeerRequest) *domain.PeerCreationRequest { | func NewDomainPeerCreationRequest(src *MultiPeerRequest) *domain.PeerCreationRequest { | ||||||
| 	return &domain.PeerCreationRequest{ | 	return &domain.PeerCreationRequest{ | ||||||
| 		UserIdentifiers: src.Identifiers, | 		UserIdentifiers: src.Identifiers, | ||||||
| 		Suffix:          src.Suffix, | 		Prefix:          src.Prefix, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -233,7 +233,7 @@ func (m Manager) CreateMultiplePeers( | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	var newPeers []*domain.Peer | 	createdPeers := make([]domain.Peer, 0, len(r.UserIdentifiers)) | ||||||
| 
 | 
 | ||||||
| 	for _, id := range r.UserIdentifiers { | 	for _, id := range r.UserIdentifiers { | ||||||
| 		freshPeer, err := m.PreparePeer(ctx, interfaceId) | 		freshPeer, err := m.PreparePeer(ctx, interfaceId) | ||||||
|  | @ -242,27 +242,22 @@ func (m Manager) CreateMultiplePeers( | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		freshPeer.UserIdentifier = domain.UserIdentifier(id) // use id as user identifier. peers are allowed to have invalid user identifiers
 | 		freshPeer.UserIdentifier = domain.UserIdentifier(id) // use id as user identifier. peers are allowed to have invalid user identifiers
 | ||||||
| 		if r.Suffix != "" { | 		if r.Prefix != "" { | ||||||
| 			freshPeer.DisplayName += " " + r.Suffix | 			freshPeer.DisplayName = r.Prefix + " " + freshPeer.DisplayName | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if err := m.validatePeerCreation(ctx, nil, freshPeer); err != nil { | 		if err := m.validatePeerCreation(ctx, nil, freshPeer); err != nil { | ||||||
| 			return nil, fmt.Errorf("creation not allowed: %w", err) | 			return nil, fmt.Errorf("creation not allowed: %w", err) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		newPeers = append(newPeers, freshPeer) | 		// Save immediately to reserve the assigned IPs so the next prepared peer gets the next free IPs
 | ||||||
| 	} | 		if err := m.savePeers(ctx, freshPeer); err != nil { | ||||||
|  | 			return nil, fmt.Errorf("failed to create new peer %s: %w", freshPeer.Identifier, err) | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 	err := m.savePeers(ctx, newPeers...) | 		createdPeers = append(createdPeers, *freshPeer) | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("failed to create new peers: %w", err) |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	createdPeers := make([]domain.Peer, len(newPeers)) | 		m.bus.Publish(app.TopicPeerCreated, *freshPeer) | ||||||
| 	for i := range newPeers { |  | ||||||
| 		createdPeers[i] = *newPeers[i] |  | ||||||
| 
 |  | ||||||
| 		m.bus.Publish(app.TopicPeerCreated, *newPeers[i]) |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return createdPeers, nil | 	return createdPeers, nil | ||||||
|  |  | ||||||
|  | @ -269,5 +269,5 @@ func MergeToPhysicalPeer(pp *PhysicalPeer, p *Peer) { | ||||||
| 
 | 
 | ||||||
| type PeerCreationRequest struct { | type PeerCreationRequest struct { | ||||||
| 	UserIdentifiers []string | 	UserIdentifiers []string | ||||||
| 	Suffix          string | 	Prefix          string | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue